如何正确发布从“加载”过程执行的事件?

问题描述 投票:3回答:1

在仅运行时程序包中,我定义了一个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;

我已经安装了设计时软件包,我可以在工具选项板中找到TMyFrame,并且它的OnLoaded事件在对象检查器中显示。

我已将TMyFrame拖到窗体中,然后通过从对象检查器中双击来分配OnLoaded事件。分配事件后,我注意到每次尝试在Delphi中打开表单文件时都会出现访问冲突错误消息(它使我可以打开“ .pas”文件,但无法切换到可视设计器视图)。 >

enter image description here

我是否正确发布了OnLoaded事件?如果是这样,还有什么问题吗?

其他信息:

  1. 我正在使用Delphi 2007(不知道是否重要)。
  2. 通过对不同的父类执行相同的操作也会出现此错误(不仅对于TFrame后代)。

在仅运行时程序包中,我定义了一个TFrame后代,该后代发布OnLoaded事件:类型TMyMethod = procedure()of object; TMyFrame = class(TFrame)受保护的FOnLoaded:...

delphi events components design-time
1个回答
8
投票

已更新(伪造程度稍低)答案

© www.soinside.com 2019 - 2024. All rights reserved.