自定义框架的已发布属性在表单文件重新打开时消失

时间:2017-05-22 10:24:06

标签: delphi properties components delphi-2007 delphi-ide

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

  • Object Inspector
  • 中不再显示所有自定义发布的属性
  • 只有TFrame继承的已发布属性仍在Object Inspector
  • 中可见
  • 可以在框架内单击并移动子组件。 enter image description here

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

  

读取MyComponent1.MyProperty时出错:属性MyProperty没有   存在。忽略错误并继续?注意:忽略错误可能   导致组件被删除或属性值丢失。

分步示例:

  • 我创建并编译了“Designtime and Runtime”包。 (请注意,使用Delphi 2007,我已经按照this Ondrej Kelle's post中的说明获得了TFrameModule类。)

代码:

  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

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

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

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

  • 组件按预期显示,我将MyCaption属性设置为'AAA'。 enter image description here

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

  • 之后我重新启动了IDE,在重新打开同一个表单文件时,出现以下错误:enter image description here

  • 我也尝试按照相同的步骤而不对属性设置任何值,我注意到该属性从Object Inspectorenter image description here

    <消失/ LI>

更多信息:

  • 每次重新编译组件包并重新启动MyCaption时,Object Inspector属性都会显示在IDE中。我可以在Object Inspector中看到它,直到下次关闭并重新启动IDE,然后它再次消失。

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

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

0 个答案:

没有答案