标签: opentools

如何在DFM文件中始终保持PixelsPerInch = 96,即使Windows使用中等字体大小(125%)

我将Windows 7字体大小设置为中等(125%).当我打开表单Delphi XE2 IDE时,DFM文件中的PixelsPerInch总是自动设置为120.在Windows中使用较小的字体大小(100%)使得Delphi DFM文件中的PixelsPerInch为96.

这在团队环境中编码时会产生问题.大多数团队成员使用较小的字体大小(100%或96 PPI).存储在版本控制存储库中的所有DFM文件都使用96 PPI.如果我将使用120 PPI的DFM文件提交到存储库,则所有其他团队成员将对我更改为DFM文件的内容感到困惑.与尺寸,宽度或高度相关的所有属性都将更改.

在使用120 PPI窗口环境时,是否可以强制Delphi IDE将DFM保存在96 PPI中?

delphi opentools

11
推荐指数
1
解决办法
5126
查看次数

Delphi-IDE:如何改变类完成的工作方式?

Delphi中的类完成节省了大量时间,但我还没有找到一种方法来定制它.

  1. 我希望将一个属性的getter和setter组合在一起,而不是被整个单元抛出; 接口部分是正确生成的,但如果将内容留给IDE,实现部分就会变得一团糟.我希望默认情况下按这样排序方法:

    function TAaa.getAaa();

    程序TAaa.setAaa();

    程序TAaa.Baa();

    function TAaa.getCow();

    程序TAaa.setCow();

    程序TBbb.getAaa()

  2. 我希望实现部分与接口的顺序相同;

  3. 我希望生成的方法的主体看起来像这样:

.

 procedure TMyClass.MyProc;
 begin
   { TODO -oWouter -cimplement autogenerated stuff : implement Procedure MyProc() }
   raise Exception.create('procedure TMyClass.MyProc() is not yet implemented');
 end;
Run Code Online (Sandbox Code Playgroud)

有没有工具可以做到这一点,还是需要深入到opentools API来完成这样的事情?


相关问题: Class Completion以什么顺序发布其结果?

ide delphi code-generation class-completion opentools

7
推荐指数
1
解决办法
1372
查看次数

如何使用Open Tools API检测IDE中的文件是否正在编辑

我使用Open Tools API创建了一个访问ClearCase的小型IDE插件.它有菜单项"Check In","Check Out"等.它工作正常,但是如果我开始在IDE编辑器中输入或者我试图保存文件,我希望它自动检出一个只读文件.你认为这有可能吗?

我尝试了一些事情但最终放弃了.IOTAEditorServices.KeyboardServices具有看起来很有前景的AddKeyboardBinding方法.使用它我添加了一个带有绑定类型btPartial的通知程序(后来尝试了btComplete)并且插件开始检测一些快捷键按下但不是所有键盘事件,远非它...任何想法将非常感谢!

ide delphi opentools

6
推荐指数
2
解决办法
936
查看次数

如何从Delphi的开放工具API中检索新的单元名称

我在Delphi XE中编写了一个向导,它工作正常.但是,我还没有想出如何访问Delphi的OTA可以创建的生成的默认单元名称(或表单名称或项目名称).

在我的旧式向导中,我能够调用ToolServices.GetNewModuleName来发现在生成关联源文件时可以使用的可用单元和表单名称.今天的开放式工具API中的等价物是什么?

根据ToolsAPI单元注释,我应该从IOTAModuleCreator.GetImplFileName方法返回一个空白,让Delphi生成文件名.我从这个方法返回一个空字符串,但仍然无法看到我可以访问Delphi正在生成的文件名.

delphi wizard opentools delphi-xe

6
推荐指数
1
解决办法
809
查看次数

我可以从DUnit GUITestrunner中的代码调用ToolsAPI吗?

有没有办法在ToolSAPI单元中初始化全局变量BorlandIDEServices,以便可以从DUnit GUITestrunner代码中使用它?

procedure TGUITestRunner.FailureListViewClick(Sender: TObject);
var
  Project: IOTAProject;
begin
  if FailureListView.Selected <> nil then
  begin
    TestTree.Selected := TTreeNode(FailureListView.Selected.data);

    // call OTA
    Project := ToolsAPI.GetActiveProject;
    ShowMessage(Project.ProjectType);

  end;
end;
Run Code Online (Sandbox Code Playgroud)

在此示例中,Project变量将为nil,因为未初始化BorlandIDEServices变量.GUITestrunner在IDE中以调试模式运行.

delphi dunit opentools

5
推荐指数
1
解决办法
272
查看次数

自动添加单元到项目

我在工作的组件上Delphi 7Delphi 2006,在那里我使用,我需要添加到一个单元.dpr上的组件自动删除该项目的文件.就像Eureka Log自动将单元'ExceptionLog'添加到项目文件中一样:

在此输入图像描述

当我将组件放在项目中的任何表单上时,有人能告诉我如何以编程方式将单元添加到项目文件中吗?

delphi delphi-7 delphi-2006 opentools toolsapi

5
推荐指数
1
解决办法
3301
查看次数

在Tools API中提供方法体

几年前,我编写了一个代码模板,它采用了一些简单的参数(点)并生成了一个类骨架.由于某些方法体中有代码,我无法调用InvokeClassCompletion,只是将实现放在声明中(用户必须移动它们).

在我看来,我可以编写一个代码模板脚本引擎来将这些方法插入到正确的位置,但我不知道我应该如何导航文件.在ToolsAPI.pas中有IOTAEditReader和IOTAEditWriter的声明,但我猜测有一个步骤缺失 - 当然我不需要手动解析Delphi代码只是为了找到实现部分?

有人有经验吗?

delphi plugins opentools

4
推荐指数
1
解决办法
268
查看次数

Delphi OpenTools API:如何获取目标exe名称?

如何获得目标可执行文件的名称IOTAProject

来自GExpert的OpenTools API FAQ:

如何确定二进制文件/ exe/dll/bpl/ocx/etc的文件名.由编译或构建生成?
- 对于Delphi 8或更高版本,请使用IOTAProjectOptions.TargetName.
- 对于早期版本,该方法实现起来要复杂得多,因为它涉及可能扫描$ E指令,该指令指定项目的可执行文件扩展名,然后在"OptputDir"指定的路径上查找二进制文件项目选项,或项目目录,如果该选项为空(在许多其他可能性和复杂性中).实现此类工具的最佳方法可能是从CodeGear CodeCentral样本ID 19823中的示例代码开始.

在我的情况下,我适合后者.给定一个IOTAProject接口,会有什么内容:

function GetTargetName(Project: IOTAProject): TFilename;
begin
   //todo
end;
Run Code Online (Sandbox Code Playgroud)

如果它是Delphi 8或更高版本,(未经测试的)答案是:

{$I compilers.inc}

function GetTargetName(Project: IOTAProject): TFilename;
begin
{$IFDEF COMPILER_8_UP}
   Result := Project.ProjectOptions.TargetName;
{$ELSE}
   raise Exception.Create('Not yet implemented');
{$ENDIF}
end;
Run Code Online (Sandbox Code Playgroud)

但这是复杂的前Delphi 8更难.

Jedi JCL在内部有十几种方法TJclOTAExpert可以用来模拟:

Project.ProjectOptions.TargetName
Run Code Online (Sandbox Code Playgroud)

我将努力通过该代码.几个星期后,我希望能够回答我自己的问题.

但与此同时,我会打开它让其他人因能够回答我的问题而获得声誉.

delphi delphi-5 opentools

2
推荐指数
1
解决办法
1744
查看次数

如何在Delphi表单上创建新的IOTAComponent

我正在尝试编写Delphi Open Tools API工具,用于自动生成和更新放置在数据模块或表单上的组件.我已经可以列出所有组件(每个组件由(IOTAComponent的类)实例表示)并修改它们的属性(setPropByName(...),getPropValueByName(...)).问题是 - 如何创建新组件 - 在Open Tools API代码中,以便将此组件添加到datamodule的形式?

我正在使用IOTAModuleServices API的一部分,我猜这是手头任务的正确部分,不是吗?

delphi form-designer opentools

0
推荐指数
1
解决办法
349
查看次数