3

我正在使用TFrame作为在 IDE 中注册的复合组件的基类。当我从调色板中选择组件并将其添加到表单/框架中时,一切似乎都运行良好。下次我打开表单/框架时,框架组件显示为一个通用框架,就像该组件未从 IDE 注册一样,我的意思是:

  • 所有自定义发布的属性在Object Inspector.
  • 只有继承自TFrame的已发布属性在Object Inspector.
  • 可以在框架内单击和移动子组件。 在此处输入图像描述

此外,如果该属性有一个值,我会收到以下错误:

读取 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;
  • 我已将包含dcudcp文件的文件夹添加到 Tools -> Options -> Library - Win32 -> Library path

  • 我已将包含文件的文件夹添加bplPATH环境变量中。

  • 我已经在 IDE 中安装了该软件包并重新启动它。

  • 我创建了一个新的“运行时”包,其中包含一个放置TMyComponent类组件的表单。

  • 该组件按预期显示,我已将MyCaption属性设置为“AAA”。在此处输入图像描述

  • 然后我保存了表单并关闭了 IDE。

  • 之后我重新启动了 IDE,在重新打开同一个表单文件时,我收到以下错误:在此处输入图像描述

  • 我也尝试在不为属性设置任何值的情况下遵循相同的步骤,并且我注意到该属性从Object Inspector在此处输入图像描述

更多信息:

  • 每次重新编译组件的包并重新启动时,该MyCaption属性都会出现。我可以看到它,直到我下次关闭并重新启动它,然后它又消失了。Object InspectorIDEObject InspectorIDE

  • 我使用 DelphiXE7 重现了同样的问题,将“delphivclide210.bpl”而不是“delphivclide100.bpl”传递给过程中的GetModuleHandle函数Register

  • 它似乎与操作系统无关,我已经在 Windows 10 和 Windows XP 上复制了它。

4

0 回答 0