动态载入的控件的ONCLICK事件的定义 在线等,谢! ( 积分: 50 )

  • 主题发起人 主题发起人 llpike
  • 开始时间 开始时间
L

llpike

Unregistered / Unconfirmed
GUEST, unregistred user!
BtnOpt:=TbitBtn.Create(nil);
with BtnOpt do
begin
Parent:=Form1;
Caption:='Option';
OnClick:=DeployForm; //DeployForm是自定义的全局过程名
end;

OnClick:=DeployForm 该句报错:method point and regular procedure
难道不能直接用过程名定义事件触发的方法?
如果不行,该如何定义?
 
BtnOpt:=TbitBtn.Create(nil);
with BtnOpt do
begin
Parent:=Form1;
Caption:='Option';
OnClick:=DeployForm; //DeployForm是自定义的全局过程名
end;

OnClick:=DeployForm 该句报错:method point and regular procedure
难道不能直接用过程名定义事件触发的方法?
如果不行,该如何定义?
 
时间是只想对象方法的过程指针

它包含对象地址和方法地址
全局过程只包含一个方法地址,
两者类型不兼容
 
那该如何定义?
我以前都是这样定义的,从来没错,今天不知道怎么了。
 
OnClick:=ClickButton;

procedure TForm1.ClickButton(Sender: TObject);
begin
//
end;
 
我的form1也是动态载入的,全部代码在一个单元文件里,没有静态窗体。
 
ding
ding
ding
ding
ding
 
把DeployForm方法定义成TForm1的类方法就可以了,form1动态载入没有问题。
 
你把 DeployForm 的完整定义贴出来
 
在你的過程DeployForm后定義(Sender: TObject)就行了。
 
DeployForm不能是全局的,好象必须属于一个form实例才行。。。。
 
TNotifyEvent = procedure(Sender: TObject) of object;

与该类型一致
 
不能用全局过程名,要一个对象如:
program Project1;


uses
SysUtils,
forms, windows, classes, StdCtrls;
type
TMyObject = Class(TObject)
private
{ Private declarations }
public
{ Public declarations }
procedure DeployForm(Sender: TObject); // »òÊÇÔÚÄãµÄTForm¶ÔÏóʵÀýÀï
end;

procedure TMyObject.DeployForm(Sender: TObject);
begin
Application.MessageBox('Click it.', 'test', MB_OK)
end;

var
F: TForm;
Btn: TButton;
EObj: TMyObject;
begin

Application.Initialize;
Application.CreateForm(TForm, F);
Btn := TButton.Create(F);
Btn.Parent := F;
F.Caption := 'Test windows';
Btn.Caption := 'Test Button';
Btn.OnClick := Eobj.DeployForm;
F.Show;
Application.Run;
end.
 
谢谢 "a delphi"
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
790
DelphiTeacher的专栏
D
后退
顶部