怎么截获自建控件中的TButton的事件呢? 如题,我的一个很简单的控件其实就是一个TPanel中包含了几个TButton按钮,(控件功能就是可以实现按钮的用户自定义排列啥的),但我想如果点击了其中的一个按钮,怎么能触发例如TPanel.OnButtonClick这样的事件?当OnButtonClick被触发的时候,我需要获得Button的名字,坐标啥的信息,我应该怎么作呀?谢谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type tmypanel = class(TPanel) //自定义的panel,包含两个按钮,当按钮点击的时候,显示按钮的名称和位置 public bt : array[0..1] of TButton; procedure MybtnClick(sender : TObject); constructor Create(AOwner: TComponent); override; end; TForm1 = class(TForm) Panel1: TPanel; Button1: TButton; Button2: TButton; Button3: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public procedure MyClick(sender : TObject); end;var Form1: TForm1; a : tmypanel;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);beginend;{ tmypanel }constructor tmypanel.Create(AOwner: TComponent);var i : integer;begin inherited; Self.Width := 500; for i := 0 to 1 do begin bt[i] := TButton.Create(nil); bt[i].Parent := Self; bt[i].Top := 10; bt[i].Left := (i+1)*100; bt[i].Caption := '按钮'+IntToStr(i+1); bt[i].OnClick := MybtnClick; end;end;procedure tmypanel.MybtnClick(sender: TObject);begin ShowMessage(Format('名称:%s;left :%d;top:%d',[(sender as TButton).Caption,(sender as TButton).Left,(sender as TButton).Top]) );end;procedure TForm1.Button1Click(Sender: TObject);begin a := tmypanel.Create(nil); a.Parent := Form1; a.Left := 20; a.Top := 20;end;procedure TForm1.Button2Click(Sender: TObject);begina.Free;end;procedure TForm1.Button3Click(Sender: TObject); //在程序中使用按钮的onclick事件begin a.bt[0].OnClick := MyClick;end;procedure TForm1.MyClick(sender: TObject);begin ShowMessage('hello');end;end.大致就是这样,建议LZ研究一下事件究竟是什么,在DELPHI中,我们通常使用的onclick这些事件,准确的说,应该叫事件属性,一个指向特定类型的访问接口。例如onclick,参看DELPHI帮助或者VCL源码,你可以发现,onclick是一个tnotifyevent类型property OnClick: TNotifyEvent read FOnClick write FOnClick stored IsOnClickStored;再看这个类型的定义Delphi syntax:type TNotifyEvent = procedure (Sender: TObject) of object;想必可以加深你的理解 多谢二位,尤其是 wudi_1982 兄,给我这么详尽的解释,我仔细研究研究。多谢了! 200分(续) listbox问题....求解........5555555 求救 请教各位高手关于:clientdataset 要回家了,散分啊!前十个有分 使用Dephi如何读取Excel表中的数据?(急!!!在线等!100分!) 如何在isapi中生成可以在页面之间传递信息的Session对象 关于数据表的问题!(在线等...) 网上调查,大家一年要买多少钱的和编程有关的书,最喜欢哪个出版社的,买了以后不后悔的有几本 控件的事件编写的问题 VCL的问题 如何实现不同应用程序间数据交换?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
tmypanel = class(TPanel) //自定义的panel,包含两个按钮,当按钮点击的时候,显示按钮的名称和位置
public
bt : array[0..1] of TButton;
procedure MybtnClick(sender : TObject);
constructor Create(AOwner: TComponent); override; end;
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
procedure MyClick(sender : TObject);
end;var
Form1: TForm1;
a : tmypanel;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
beginend;{ tmypanel }constructor tmypanel.Create(AOwner: TComponent);
var
i : integer;
begin
inherited;
Self.Width := 500;
for i := 0 to 1 do
begin
bt[i] := TButton.Create(nil);
bt[i].Parent := Self;
bt[i].Top := 10;
bt[i].Left := (i+1)*100;
bt[i].Caption := '按钮'+IntToStr(i+1);
bt[i].OnClick := MybtnClick;
end;end;procedure tmypanel.MybtnClick(sender: TObject);
begin ShowMessage(Format('名称:%s;left :%d;top:%d',[(sender as TButton).Caption,(sender as TButton).Left,(sender as TButton).Top]) );
end;procedure TForm1.Button1Click(Sender: TObject);
begin
a := tmypanel.Create(nil);
a.Parent := Form1;
a.Left := 20;
a.Top := 20;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
a.Free;
end;procedure TForm1.Button3Click(Sender: TObject); //在程序中使用按钮的onclick事件
begin
a.bt[0].OnClick := MyClick;
end;procedure TForm1.MyClick(sender: TObject);
begin
ShowMessage('hello');
end;end.大致就是这样,建议LZ研究一下事件究竟是什么,在DELPHI中,我们通常使用的onclick这些事件,准确的说,应该叫事件属性,一个指向特定类型的访问接口。例如onclick,参看DELPHI帮助或者VCL源码,你可以发现,onclick是一个tnotifyevent类型
property OnClick: TNotifyEvent read FOnClick write FOnClick stored IsOnClickStored;
再看这个类型的定义
Delphi syntax:type TNotifyEvent = procedure (Sender: TObject) of object;
想必可以加深你的理解