我将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中的类完成节省了大量时间,但我还没有找到一种方法来定制它.
我希望将一个属性的getter和setter组合在一起,而不是被整个单元抛出; 接口部分是正确生成的,但如果将内容留给IDE,实现部分就会变得一团糟.我希望默认情况下按这样排序方法:
function TAaa.getAaa();
程序TAaa.setAaa();
程序TAaa.Baa();
function TAaa.getCow();
程序TAaa.setCow();
程序TBbb.getAaa()
我希望实现部分与接口的顺序相同;
我希望生成的方法的主体看起来像这样:
.
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来完成这样的事情?
我使用Open Tools API创建了一个访问ClearCase的小型IDE插件.它有菜单项"Check In","Check Out"等.它工作正常,但是如果我开始在IDE编辑器中输入或者我试图保存文件,我希望它自动检出一个只读文件.你认为这有可能吗?
我尝试了一些事情但最终放弃了.IOTAEditorServices.KeyboardServices具有看起来很有前景的AddKeyboardBinding方法.使用它我添加了一个带有绑定类型btPartial的通知程序(后来尝试了btComplete)并且插件开始检测一些快捷键按下但不是所有键盘事件,远非它...任何想法将非常感谢!
我在Delphi XE中编写了一个向导,它工作正常.但是,我还没有想出如何访问Delphi的OTA可以创建的生成的默认单元名称(或表单名称或项目名称).
在我的旧式向导中,我能够调用ToolServices.GetNewModuleName来发现在生成关联源文件时可以使用的可用单元和表单名称.今天的开放式工具API中的等价物是什么?
根据ToolsAPI单元注释,我应该从IOTAModuleCreator.GetImplFileName方法返回一个空白,让Delphi生成文件名.我从这个方法返回一个空字符串,但仍然无法看到我可以访问Delphi正在生成的文件名.
有没有办法在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 7和Delphi 2006,在那里我使用,我需要添加到一个单元.dpr上的组件自动删除该项目的文件.就像Eureka Log自动将单元'ExceptionLog'添加到项目文件中一样:

当我将组件放在项目中的任何表单上时,有人能告诉我如何以编程方式将单元添加到项目文件中吗?
几年前,我编写了一个代码模板,它采用了一些简单的参数(点)并生成了一个类骨架.由于某些方法体中有代码,我无法调用InvokeClassCompletion,只是将实现放在声明中(用户必须移动它们).
在我看来,我可以编写一个代码模板脚本引擎来将这些方法插入到正确的位置,但我不知道我应该如何导航文件.在ToolsAPI.pas中有IOTAEditReader和IOTAEditWriter的声明,但我猜测有一个步骤缺失 - 当然我不需要手动解析Delphi代码只是为了找到实现部分?
有人有经验吗?
如何获得目标可执行文件的名称IOTAProject?
如何确定二进制文件/ 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 Open Tools API工具,用于自动生成和更新放置在数据模块或表单上的组件.我已经可以列出所有组件(每个组件由(IOTAComponent的类)实例表示)并修改它们的属性(setPropByName(...),getPropValueByName(...)).问题是 - 如何创建新组件 - 在Open Tools API代码中,以便将此组件添加到datamodule的形式?
我正在使用IOTAModuleServices API的一部分,我猜这是手头任务的正确部分,不是吗?