有时在设计时覆盖Delphi默认程序?

时间:2010-01-22 01:44:39

标签: delphi override design-time

有时在设计时覆盖Delphi默认程序?

我需要在设计时覆盖InstanceSize,我使用FastCode方法运行它:

FastcodeAddressPatch(FastcodeGetAddress(@SInstanceSize), @TWinControl.RfInstanceSize);

但是,有没有办法在设计时做到这一点?

提出建议

2 个答案:

答案 0 :(得分:4)

“设计时间”实际上只是“运行时间”,但是在IDE的上下文中而不是程序的上下文中。将代码放入设计时包中并将其加载到IDE中。 IDE将调用程序包单元中的所有Register过程,此时您可以运行所需的任何代码。

  1. 制作一个新的包项目(.dpk文件)。
  2. 设置项目首选项,使其成为设计时包。
  3. 添加一个新的空白单位。
  4. 将过程添加到名为Register的接口部分。它必须有一个大写字母R,其余的小写字母。
  5. 按照您的意愿实施该程序(例如将您的电话转到FastcodeAddressPatch)。
  6. 编译并安装软件包。
  7. 我对你在第5步中尝试做的事情有点警惕,但我会让你为自己解决这个问题。

答案 1 :(得分:1)

如果“在设计时”你的意思是“在表单设计器中改变组件的行为方式”,那么你真的不应该这样做。表单设计器是IDE的一部分,它是在BDS.exe中运行的所有Delphi代码。如果在“表单设计器”下更改TObject,则会为整个IDE更改它,从而可能带来灾难性的后果。