运行时创建的button,如何响应它的各种事件呢?比如,click事件?(20分)

  • 主题发起人 主题发起人 johnrain
  • 开始时间 开始时间
J

johnrain

Unregistered / Unconfirmed
GUEST, unregistred user!
1.运行时创建的button,如何响应它的各种事件呢?比如,click事件?
2.若是运行时创建两个button,如何使第二个钮的click事件指向第一个钮的同样事件呢?
 
面板里面选择就可以了!
 
好像前面有问过了
 
请查看 “事件指针”
 
procedure abc;
begin
//jfkdjafda;fd
end;

button1.OnClick := abc;
 
procedure OnClickNewBtn(Sender:TObject);
//自定义事件过程
procedure TForm1.OnClickNewBtn(Sender:TObject);
begin
过程代码
end;

调用
Button1.OnClick:=OnClickNewBtn;
 
同意楼上的!
 
可以共用一個事件sender
 
同意onlyonekgx
 
我说的是运行时创建的button!!!
 
自己定义的过程必须是类中的方法,不能是普通过程
所以这段代码是错的
procedure abc;
begin
//jfkdjafda;fd
end;
utton1.OnClick := abc;
改成:
procedure Tform1.abc;
begin
//jfkdjafda;fd
end;
procedure Tform1.create(sender:Tobject);
var button1:Tbutton;
begin
button1:=Tbutton.create(self);//运行时创建的按钮
button1.......//初始化按钮,只要设置button1的PARENT属性button1就可以显示了
button1.OnClick := abc;
end;
这样在form1建立的时候就动态创建一个按钮,并且它的CLICK事件为abc
给分!
 
同意yyhhnn的方法。
Object Inspector的Event页中显示的事件,只不过是对象方法指针类型的属性。因此,我们可以
在设计时动态改动一个组件的事件处理程序,或甚至在运行时建立一个新组件并将时间处理程序赋
给它。我们要在窗体类中声明该事件处理程序。对于button对象,事件处理程序abc必须是Sender:
TObject才行的!因为它对应button1象的对象方法指针!要在改写Tbutton类Create方法中加入OnClick
:= abc;
//指定事件处理程序是abc!
[:)]
 
但是,如果是在dll中创建的控件,上面的方法,控件响应不到,如何处理
 
procedure abc;
begin
//jfkdjafda;fd
end;

procedure Tform1.create(sender:Tobject);
var button1:Tbutton;
begin
button1:=Tbutton.create(self);//运行时创建的按钮
button1.......//初始化按钮,只要设置button1的PARENT属性button1就可以显示了
button1([red]sender[/red]).OnClick := abc;
end;
 
procedure abc;
begin
//jfkdjafda;fd
end;

procedure Tform1.create(sender:Tobject);
var button1:Tbutton;
begin
button1:=Tbutton.create(self);//运行时创建的按钮
button1.parent:=self;
button1([red]sender[/red]).OnClick := abc;
end;
 
你的方法,你根本没轼过,onclick,是个tnotify类型,只能用类方法进行赋值,另外在dll中根本不响应
 
后退
顶部