【发布时间】:2017-02-18 23:08:57
【问题描述】:
在仅运行时的包中,我定义了一个 TFrame 后代,它发布了 OnLoaded 事件:
type
TMyMethod = procedure() of object;
TMyFrame = class(TFrame)
protected
FOnLoaded : TMyMethod;
procedure Loaded(); override;
published
property OnLoaded : TMyMethod read FOnLoaded write FOnLoaded;
end;
implementation
{$R *.dfm}
procedure TMyFrame.Loaded();
begin
inherited;
if(Assigned(FOnLoaded))
then FOnLoaded();
end;
在仅设计时的包中,我注册了TMyFrame 组件,如下所示:
unit uMyRegistrations;
interface
uses
Classes, uMyFrame;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('MyTestComponents', [
TMyFrame
]);
end;
我已经安装了 designtime 包,我可以在工具面板中找到TMyFrame,它的OnLoaded 事件显示在对象检查器中。
我已将TMyFrame 拖入表单,然后通过在对象检查器中双击来分配OnLoaded 事件。
分配事件后,我注意到每次尝试在 Delphi 中打开表单文件时都会出现访问冲突错误消息(它让我打开“.pas”文件,但我无法切换到可视化设计器视图)。
我是否正确发布了OnLoaded 事件?如果是这样,还有什么问题?
更多信息:
- 我使用的是 Delphi 2007(不知道是否重要)。
- 对不同的父类执行相同的操作也会出现该错误(不仅适用于
TFrame后代)。
【问题讨论】:
标签: delphi events components design-time