控件的动态创建后,他的事件如何写;

hare007 2004-09-17 05:11:24
例如:我动态创建一个按钮,他如何执行单击事件。原先静态创建时,直接在单击事件里写代码就行了,可动态创建,往哪里写啊。
...全文
226 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
da18a 2004-09-18
  • 打赏
  • 举报
回复
同意一楼!
boatzm 2004-09-18
  • 打赏
  • 举报
回复
to hare007(横刀立马)

???一直这么用的呀?大量使用,怎么了?
pengxuan 2004-09-18
  • 打赏
  • 举报
回复
unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
procedure ButtonClick(Sender:TObject);
public
{ Public declarations }
end;

var
Form1: TForm1;
i:integer=1;
implementation

{$R *.dfm}

procedure TForm1.ButtonClick(Sender: TObject);
begin
ShowMessage((Sender as TButton).Caption);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var tmpbutton:TButton;
begin
if Button=mbLeft then
begin
tmpbutton:=TButton.Create(self);
tmpbutton.Parent:=Self;
tmpbutton.Name:='Button'+IntToStr(i);
tmpbutton.Caption:='Button'+IntToStr(i);
tmpbutton.OnClick:=ButtonClick;
tmpbutton.Left:=X;
tmpbutton.Top:=Y;
Inc(i);
end;
end;


end.
hare007 2004-09-18
  • 打赏
  • 举报
回复
谢谢各位的积极回复

==================================
回复人: boatzm(晓舟)【塑料的玫瑰花】(●)
你试过了么?
========================================
回复人: yywulan(鬼见怕)
先自定义一个事件过程。然后在:=给它不就得了吗?
-------------------------------------------------
能通过么?能给个例子么?


hj007 2004-09-17
  • 打赏
  • 举报
回复
哈哈又学一招
WGYKING 2004-09-17
  • 打赏
  • 举报
回复
你们到底谁错了?
好迷茫啊!

^_^
luke5678 2004-09-17
  • 打赏
  • 举报
回复
我认错
boatzm 2004-09-17
  • 打赏
  • 举报
回复
同意一楼,反对三楼,不说了,都说完了
zdq801104 2004-09-17
  • 打赏
  • 举报
回复
哎!又来迟了,该说的都被上面的大哥说完了
SpeedyHorse 2004-09-17
  • 打赏
  • 举报
回复
該說的前面都說了~~~~~~~
webwolfa 2004-09-17
  • 打赏
  • 举报
回复
先自定义一个事件过程。然后在:=给它不就得了吗?
hare007 2004-09-17
  • 打赏
  • 举报
回复
写错了,应该是
控件的事件声明:
………………
Taa:procedure(param1,param2……)of object;
………………
xx=class
…………
Faa:Taa;
proprety aa:Taa read Faa write Faa;
这样的如何给aa事件赋值
hare007 2004-09-17
  • 打赏
  • 举报
回复
一般的可以,如果类似于:
控件的事件声明:
………………
Taa:procedure(param1,param2……)of object;
………………
xx=class
…………
Faa:Taa;
procedure aa:Taa read Faa write Faa;
这样的如何给事件赋值
梅青松 2004-09-17
  • 打赏
  • 举报
回复
var
button: TButton;
begin
button := TButton.Create(self);
button.parent := self;
button.caption := 'btn1';
button.left := 100;
button.top := 200;
button.onClick := MyClick; //给事件赋值 ---
end;
wenjianyao 2004-09-17
  • 打赏
  • 举报
回复
例子如下:
//Unit1 Code
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
procedure ButtonClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ButtonClick(Sender: TObject);
begin
TButton(Sender).Caption:='OnClick Event OK!';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
With TButton.create(Self) do
begin
parent:=Form1;
OnClick:=ButtonClick;
end;
end;

end.
WGYKING 2004-09-17
  • 打赏
  • 举报
回复
如同楼上
对象的事件本质上是一个回调函数
D实现是一个对象方法
作为属性公布并持久化

定义一个同格式的对象方法
直接赋值就可以了
zhaoxiaoying 2004-09-17
  • 打赏
  • 举报
回复
先写一个事件,然后赋给它
例如
1. 先定义一个过程 buttontest(里面的参数直接想写哪个控件就用对应事件的参数)
2. 之后 button.onclick := buttontes就可以了
luke5678 2004-09-17
  • 打赏
  • 举报
回复
同意一楼!,只是...

button.OnClick := MyClick(Sender); //

lw549 2004-09-17
  • 打赏
  • 举报
回复
给事件赋一个指针,这个指针指向你自己的过程。
梅青松 2004-09-17
  • 打赏
  • 举报
回复
produce MyClick(Sender: TObject); //定义自己的单击事件


produce MyClick(Sender: TObject); //实现
begin
//
end;


var
button: TButton;
begin
button := TButton.Create(self);
button.parent := self;
button.caption := 'btn1';
button.click := MyClick; //给事件赋值
end;

5,388

社区成员

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

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