使用动态组件的事件

heartache 2004-01-24 12:09:18
谁能告诉我...

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure EditChange(Sender: TObject);
end;

var
Form1: TForm1;
ec:TNotifyEvent;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
ec:= EditChange(sender: TObject);
  //此处出错了
end;

procedure Tform1.EditChange(Sender: TObject);
begin
showmessage('a');
end;



谁能帮我做个动态组件如何调用它的方法,就是给TNotifyEvent的对象给procedure,然后OnSomeThing调用那个procedure....
...全文
53 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgqTiger 2004-01-28
  • 打赏
  • 举报
回复
对,请参照上面的赋值方法。
只有相同类型的才能够赋值!
Iamfish 2004-01-28
  • 打赏
  • 举报
回复
楼主的写法是错误的!!!

cll007(gazo)的:

Edit.OnChange:=DoEditChange;

才是正确的。

为控件动态添加事件的方法是:写一个与要动态关联的控件的事件参数一样的 "过程"。然后,把那个控件的On...事件(可以看做是一种特殊的属性)指定你刚才定义的事件(指定那个过程的名称就可以,不要带参数)。
ahjoe 2004-01-28
  • 打赏
  • 举报
回复
procedure TForm1.FormCreate(Sender: TObject);
begin
ec:= EditChange;
  //此处出错了
end;
lgqTiger 2004-01-25
  • 打赏
  • 举报
回复
你试试这个吧!
==============================
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure myBnt1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
btn1:TButton;
begin
btn1:=TButton.Create(Self);
with btn1 do
begin
Parent:=Self;
Top:=50;
Left:=120;
Width:=80;
Height:=35;
Caption:='动态按钮';
onClick:=myBnt1Click;
end;
end;

procedure Tform1.myBnt1Click(Sender: TObject);
begin
{MessageDlgPos('btn1控件的onClick事件已经响应!',
mtInformation,[mbAbort],0,100,200);
}
if MessageDlgPos('btn1控件的onClick事件已经响应!'
+#10+'是否退出?',mtConfirmation, [mbYes, mbNo],
0,400,350) = mrYes then
begin
MessageDlg('现将退出示范程序', mtInformation,
[mbOk], 0);
Close;
end;
end;

end.
zzlingaaa 2004-01-24
  • 打赏
  • 举报
回复
比如你动态创建了一个Edit组件,Name叫Edit123,创建后加一句
Edit123.OnChange := EditChange
则Edit123中的内容发生改变的时候就会showmessage('a');
heartache 2004-01-24
  • 打赏
  • 举报
回复
写个例子阿,帮我该一该,不是很懂..
zzlingaaa 2004-01-24
  • 打赏
  • 举报
回复
要注意的是,这个procedure的参数必须和静态创建的组件一致
zzlingaaa 2004-01-24
  • 打赏
  • 举报
回复
直接OnSomeTheing := procedure就可以了啊.
lgqTiger 2004-01-24
  • 打赏
  • 举报
回复
关注中!
cll007 2004-01-24
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure DoEditChange(Sender: TObject); //自定义函数,参数同EditChange
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DoEditChange(Sender: TObject);
begin
if sender is TEdit then
Caption:=TEdit(sender).Text;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
Edit:TEdit;
begin
Edit:=TEdit.Create(self);
Edit.Parent:=self;
Edit.OnChange:=DoEditChange;
end;

end.

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧