动态创建的控件如何响应事件?(100分)

  • 主题发起人 主题发起人 victor
  • 开始时间 开始时间
V

victor

Unregistered / Unconfirmed
GUEST, unregistred user!
是这样的,我用了用于串口通讯的控件async32,
因为要在一个程序中与多个串口通讯,因此我是
动态的在程序中生成该控件,

com1 = Tasync32.create(self) ;
com2 = Tasync32.create(self) ;

那我该如何在程序中响应控件的事件呢?
如Async32.OnrxRead(sender,count)等等

thanks
 
com1.onrxRead:=DOonrxRead(sender,count);

DOonrxRead(sender,count); 事先写好哦
 
首先,在form1的protected部分定义
procedure RXRead(Sender: TObject;count:integer);
然后在procedure Tform1.RXRead(Sender: TObject;count:integer);
中写入事件发生时要进行的操作
(在其中用Tasync32(sender)指代控件,如Tasync32(sender).tag:=0;)
在动态生成该控件时加上这样两句
com1.OnrxRead(sender,count)=RXRead;
com2.OnrxRead(sender,count)=RXRead;
就可以了.

 
>首先,在form1的protected部分定义
> procedure RXRead(Sender: TObject;count:integer);
补充一下,应为:
procedure RXRead(Sender: TObject;count:integer) of object;
 
对不起,刚才最后两句是
com1.OnrxRead=RXRead;
com2.OnrxRead=RXRead;
 
hehe,看来我的也不对

com1.onrxRead:=DOonrxRead;
 
yifeng的方法是对的
 
其实你可以先拽一个构件到FORM上, 再把所有事件写好, 然后把构件删除, 就
把动态生成构件的事件指向已写好的事件就可以了.
这是最简单的方法了.
 
那么,运行中动态生成一个BUTTON,他的ONCLICK事件也是使用这种方法吗?
 
动态创建一个按钮(button1),指定其onclik事件:
unit Unit1;

interface

uses
...;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure button1click(sender:tobject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
button1:tbutton;
implementation

{$R *.DFM}

procedure tform1.button1click(sender:tobject);
begin
form1.close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
button1:=tbutton.create(application);
button1.Caption:='ok';
button1.parent:=form1;
button1.OnClick:=button1click;
end;

end.
 
>>Jams:
>>>>
flyinsky:运行中动态生成一个BUTTON,他的ONCLICK事件也是使用这种方法吗?


?
 
flyinsky: 呵呵, 查看一下以前的回答, 关于动态生成控件或自定义事件的.
 
cytown 的方法最方便,我一直用它。
只是注意在用到控件名的时候,用Tasync32(Sender)来代替。
以免出现引用错误。
 
多谢charles ,cytown 的慷慨解答,我好象借了别人的分

得到了自己的答案,真便宜了我呀?

charles :你能告诉我为什么
button1:=tbutton.create(application);
而不是
button1:=tbutton.create(SELF);
吗?
我本来用了cytown的方法:
先拽一个构件到FORM上, 再把所有事件写好, 然后把构件删除, 就
把动态生成构件的事件指向已写好的事件.
不过用的是 button1:=tbutton.create(SELF);
而之后onclick事件
button1.onclick:=button1click(sender);
无法通过编译。


 
self指form1,create的参数为Aowner指谁将拥有button1,
button1.onclick:=button1click;就可以了。
 
flyinsky:

>> charles :你能告诉我为什么
button1:=tbutton.create(application);
而不是 button1:=tbutton.create(SELF); 吗?

button1:=tbutton.create(SELF); 也可以.

不过: button1.onclick:=button1click(sender);
应改为 button1.onclick:=button1click;
 
后退
顶部