我现在把动态生成控件的过程放到DLL中,在创建按钮控件时要给按钮加载事件(如给按钮click事件)我在DLL中已经定义了一个过程(如:procedure BtnClick(sender:Tobject);),我如何把这个事件加载给创建的按钮呢??也就是说在点击创建的按钮时如何触发BtnClick事件!!!
最好哪位兄弟有详细代码贴出来!!!!!
最好哪位兄弟有详细代码贴出来!!!!!
解决方案 »
- 虚荣的心
- 请问中国内地有买 quick report 软件的买
- 这周末去上海见女友,散分祈求祝福~~~
- shelllistview的问题??????
- 高分请教 delphi中使用 excel 如何增加一个sheet其格式和模版一样 (急)
- 求高手赐教,关于包的问题?
- PageControl这个控件怎么使用,我要做出2个Page,怎么设置,谢谢!
- 习惯了c语言风格,实在看不惯delphi风格,咋办?
- 下载了文件监控控件“fisFileNotification”,希望可以提供相关教程
- 那位高手能否帮我解决这个问题??急!!
- try except 用法的问题?????????????????????
- 我如何从datetimepicker的值中得到月份数值啊?
begin
ShowMessage('');
end;
btn1:TButtonbtn1:=TButton.create(nil)
btn1.parent:=form1;
//设置btn的属性
btn1.OnClick:=haha;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Panel1: TPanel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
MyButton: TButton;
procedure MyButtonClick(Sender: TObject);
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
MyButton := TButton.Create(Self);
MyButton.Parent := Panel1;
MyButton.Show;
end;procedure TForm1.MyButtonClick(Sender: TObject);
begin
ShowMessage('Hello');
end;procedure TForm1.Button2Click(Sender: TObject);
begin
MyButton.OnClick := MyButtonClick;
end;end.
如果你自定义的事件过程不是一个类过程的话,那就要进行这样的转换。
..
var
MyMet : TMetmod;
..
..
Begin
..
MyMet.Code := @BtnClick;
MyButton.OnClick := TNotifyEvent(MyMet);
..
End;
但是,这样指定的过程如何带参数进去呢?
在哪一句指定参数?
如下:
library DCC;
.
.
.
procedure BtnClick(sender:Tobject);
begin
showmessage((sender sa TButton).name);//执行这一句报内存错
end;
.
.
.
..
//========================下面是自动创建按钮,并加载事件
var
MyMet : TMetmod;
..
..
Begin
..
MyMet.Code := @BtnClick;
MyButton.OnClick := TNotifyEvent(MyMet);
..
End;
var
MyMet : TMetmod;
..
..
Begin
..
MyMet.Code := @BtnClick;
MyButton.OnClick := TNotifyEvent(MyMet);
..
End;
dll中:procedure Btn1Click(sender:TObject);stdcall;
begin
showmessage(TButton(sender).name);
end;procedure Btn2Click(sender:TObject);stdcall;
begin
showmessage('haha:'+TButton(sender).name);
end;exports
Btn1Click,
Btn2Click;
....程序中: public
procedure EventBtnsClick(Sender:TObject);
.....
var
btn1,btn2:TButton;
.....procedure Btn1Click(sender:TObject);stdcall;external 'project1.dll';
procedure Btn2Click(sender:TObject);stdcall;external 'project1.dll';
procedure TForm1.Button1Click(Sender: TObject);
begin
btn1:=TButton.Create(nil);
btn1.OnClick:=EventBtnsClick;
btn1.Left:=100;
btn1.Parent:=Form1;
btn1.Name:='ButtonTest'; btn2:=TButton.Create(nil);
btn2.OnClick:=EventBtnsClick;
btn2.Left:=200;
btn2.Parent:=Form1;
btn2.Name:='ButtonTest2';
end;procedure TForm1.EventBtnsClick(Sender:TObject);
begin
if TButton(Sender).Name='ButtonTest' then
btn1Click(Sender)
else if TButton(Sender).Name='ButtonTest2' then
btn2Click(Sender);
end;