VCL封装了大量Windows消息,一般来讲,已经可以满足我们的需要。
自定义事件可以这样定义:TMyControl = Class(TWinControl)
private
FOnCreate: TNotifyEvent;
public
constructor Create(AOwner: TComponent); override;
published
property OnCreate: TNotifyEvent read FOnCreate write FOnCreate;
end;
constructor Create(AOwner: TComponent);
begin
inhert;
if Assigned(FOnCreate) then
FOnCreate(Self);
end;也就是先说定义事件的存储域和访问域,然后在恰当的时机调用即可。
可以通过捕获Windows消息来调用自定义事件。这一点在VCL这体现得很清楚。
自定义事件可以这样定义:TMyControl = Class(TWinControl)
private
FOnCreate: TNotifyEvent;
public
constructor Create(AOwner: TComponent); override;
published
property OnCreate: TNotifyEvent read FOnCreate write FOnCreate;
end;
constructor Create(AOwner: TComponent);
begin
inhert;
if Assigned(FOnCreate) then
FOnCreate(Self);
end;也就是先说定义事件的存储域和访问域,然后在恰当的时机调用即可。
可以通过捕获Windows消息来调用自定义事件。这一点在VCL这体现得很清楚。
关键是我怎么来写这个onclick事件。 yjs_lh(长风浪子) 说的是创建时的情况,有参数传进来的。
constructor Create(AOwner: TComponent); override;但我点击的时候,没有参数的。还是不知道怎么写。我试了很多次了,都不成功。我是这么写的。type
Tmymb = class(TWinControl)
private
FOnClick : TNotifyEvent; public
{ Public declarations }
Constructor Create(AOwner : TComponent); Override; published
Property OnClick : TNotifyEvent read FOnClick Write FOnClick; end;implementationConstructor Tmymb.Create(AOwner : TComponent);
begin
Inherited Create(AOwner); If Assigned(FOnClick) then
FOnClick(Self);
end;end.
//然后主窗体里这么用的unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, Chartfx3, StdCtrls;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
Procedure myClick(Sender : TObject);
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses mymb;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
mb : Tmymb;
begin
mb := Tmymb.Create(Self);
mb.Parent := Form1;
mb.Visible := True;
mb.Enabled := True;
mb.Left := 50 ;
mb.Top := 50;
mb.OnClick := myclick;
end;procedure TForm1.myClick(Sender : TObject);
begin
showmessage('ok');
end;end.是不是哪里有问题。
Tmymb
{
Panel : Tpanel;
edit : Tedit;
}窗体上生成了一系列的Tmymb 实例。
我现在单击的时候只能知道是哪个Tmymb里的Panel被单击了,那我是不能知道edit的一些属性的。
我现在想实现的就是要知道是哪个Tmymb 被单击了,那么我就能知道Panel 的属性,也能知道Edit的属性了。这样可以了么?
请大家帮忙呀。
好比我有一个容器,里面放了一些标准控件,当我点击这个容器的时候是重定向了其中的一个标准控件panel的事件,那么这个sender是指向这个panel的。我的意思就是要自己定义一个TNotifyEvent,指向我自己的这个容器,当我点击的时候我就知道是我的哪个控件被点击了(因为同时可能生成了很多的控件实例)。