我正在使用TFrame
作为在 IDE 中注册的复合组件的基类。当我从调色板中选择组件并将其添加到表单/框架中时,一切似乎都运行良好。下次我打开表单/框架时,框架组件显示为一个通用框架,就像该组件未从 IDE 注册一样,我的意思是:
此外,如果该属性有一个值,我会收到以下错误:
读取 MyComponent1.MyProperty 时出错:属性 MyProperty 不存在。忽略错误并继续?注意:忽略错误可能会导致组件被删除或属性值丢失。
一步一步的例子:
- 我已经创建并编译了一个“设计时和运行时”包。(请注意,使用 Delphi 2007,我已经获得了 TFrameModule 类,如Ondrej Kelle 的帖子中所述)。
代码:
TMyComponent = class(TFrame)
private
FMyCaption : TCaption;
{ Private declarations }
public
{ Public declarations }
published
property MyCaption : TCaption read FMyCaption write FMyCaption;
end;
....
procedure Register;
var
delphivclide: THandle;
TFrameModule: TCustomModuleClass;
begin
RegisterComponents('MyComponents', [TMyComponent]);
//registering custom module for TMyComponent
delphivclide := GetModuleHandle('delphivclide100.bpl');
if delphivclide <> 0 then
begin
TFrameModule := GetProcAddress(delphivclide, '@Vclformcontainer@TFrameModule@');
if Assigned(TFrameModule) then
RegisterCustomModule(TMyComponent, TFrameModule);
end;
end;
我已将包含
dcu
和dcp
文件的文件夹添加到Tools -> Options -> Library - Win32 -> Library path
我已将包含文件的文件夹添加
bpl
到PATH
环境变量中。我已经在 IDE 中安装了该软件包并重新启动它。
我创建了一个新的“运行时”包,其中包含一个放置
TMyComponent
类组件的表单。然后我保存了表单并关闭了 IDE。
更多信息:
每次重新编译组件的包并重新启动时,该
MyCaption
属性都会出现。我可以看到它,直到我下次关闭并重新启动它,然后它又消失了。Object Inspector
IDE
Object Inspector
IDE
我使用 DelphiXE7 重现了同样的问题,将“delphivclide210.bpl”而不是“delphivclide100.bpl”传递给过程中的
GetModuleHandle
函数Register
。它似乎与操作系统无关,我已经在 Windows 10 和 Windows XP 上复制了它。