要動態創建LABEL,又要在LABEL事件中執行代碼,該怎麼寫? 要動態創建LABEL,又要在LABEL事件中執行代碼,該怎麼寫? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把你要执行的代码写一个过程,动态创建完label后,将label的事件赋值为该过程。如:label.onclick:=myclick; procedure myclick;begin showmessage('ok');end;varaa:tlabel;begin aa:=tlabel.create(self); aa.top:=30; aa.left:=30; aa.caption:='asdf'; aa.onclick:=myclick;end; 其實我是想問Nmsmtp控件的OnConnect事件,我賦值時提示[Error] Mail.pas(143): Incompatible types: 'TNotifyEvent' and 'Procedure' delphi对类型检测太严格,赋值为你自定义函数的入口指针好了。 type TMyNmsmtp = class(TNmsmtp) procedure TMyNmsmtpONConnect(Sender: TObject); private { Private declarations } protected { Protected declarations } public { Public declarations } published { Published declarations } end;procedure TMyNmsmtp.TMyNmsmtpONConnect(Sender: TObject);begin ----------end;function SendMail(Host,UserID,FromAddress,ToAddress,Body,Subject,Attachments: String):Boolean;Var Nmsmtp1:TMyNmsmtp;begin Nmsmtp1:=TMyNmsmtp.Create(Application); Nmsmtp1.OnConnect:=TMyNmsmtp.TMyNmsmtpONConnect; //這句通不過 Nmsmtp1.Host :=Host; nmsmtp1.Port :=25; nmsmtp1.UserID :=UserID; nmsmtp1.ReportLevel :=1; Nmsmtp1.TimeOut :=10000; nmsmtp1.Connect ; -----------------end; begin with TLabel.Create(self) do begin Parent := self; Caption := 'MyLabel'; OnClick := MyClick; end;end;MyClick的事件代码同snowtiger2000(snowtiger) 将SendMail函数改成TMyNmsmtp.SendMail呢? 搞那么复杂干吗?试试下面type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public procedure TMyNmsmtpONConnect(Sender: TObject); { Public declarations } end;var Form1: TForm1;implementation{$R *.DFM}procedure TForm1.TMyNmsmtpONConnect(Sender: TObject);begin ----------end;procedure TForm1.Button1Click(Sender: TObject);var Nmsmtp1:TNmsmtp;begin Nmsmtp1:=TNmsmtp.Create(Application); Nmsmtp1.OnConnect:=TMyNmsmtpONConnect; //這句通不過 Nmsmtp1.Host :=Host; nmsmtp1.Port :=25; nmsmtp1.UserID :=UserID; nmsmtp1.ReportLevel :=1; Nmsmtp1.TimeOut :=10000; nmsmtp1.Connect ; end; TMyNmsmtp=>Nmsmtp1Nmsmtp1.OnConnect:=Nmsmtp1.TMyNmsmtpONConnect;牢记它和一般的过程是有区别的,一个类的成员是不存在地址的概念的,它只是一个虚拟的数据结构,当然不能赋值,所以只能赋值为实例化后的成员的地址当然你上面已经从TNMSmtp上派生了TMyNMSmtp,直接重载Create是比较好的做法constructor Create(AOwner: TComponent); override;constructor TMyNmsmtp.Create(AOwner: TComponent);begin inherited; Self.OnConnect:=Self.TMyNmsmtpONConnect;end; 新手请教? 急聘Delphi软件工程师(北京上地) UDP如何发送和接收带有图片流的结构? 如何在2个页面传递checkbox的值? hongwei? 请问如何用delphi实现连续播放多幅图片的功能? 马上给分,有关MTS/COM+的问题 超简单问题 有关DELPHI与C语言SOCKET互相通讯问题 数据传输的问题? 又一个巨菜的问题!如何在程序中调用控件的事件? 简单问题,怎样在bitbtn上加图片?
如:label.onclick:=myclick;
begin
showmessage('ok');
end;var
aa:tlabel;
begin
aa:=tlabel.create(self);
aa.top:=30;
aa.left:=30;
aa.caption:='asdf';
aa.onclick:=myclick;
end;
[Error] Mail.pas(143): Incompatible types: 'TNotifyEvent' and 'Procedure'
TMyNmsmtp = class(TNmsmtp)
procedure TMyNmsmtpONConnect(Sender: TObject);
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
end;
procedure TMyNmsmtp.TMyNmsmtpONConnect(Sender: TObject);
begin
----------end;function SendMail(Host,UserID,FromAddress,ToAddress,Body,Subject,Attachments: String):Boolean;
Var
Nmsmtp1:TMyNmsmtp;
begin
Nmsmtp1:=TMyNmsmtp.Create(Application);
Nmsmtp1.OnConnect:=TMyNmsmtp.TMyNmsmtpONConnect; //這句通不過
Nmsmtp1.Host :=Host;
nmsmtp1.Port :=25;
nmsmtp1.UserID :=UserID;
nmsmtp1.ReportLevel :=1;
Nmsmtp1.TimeOut :=10000;
nmsmtp1.Connect ;
-----------------
end;
with TLabel.Create(self) do
begin
Parent := self;
Caption := 'MyLabel';
OnClick := MyClick;
end;
end;MyClick的事件代码同snowtiger2000(snowtiger)
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure TMyNmsmtpONConnect(Sender: TObject);
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.TMyNmsmtpONConnect(Sender: TObject);
begin
----------
end;procedure TForm1.Button1Click(Sender: TObject);
var
Nmsmtp1:TNmsmtp;
begin
Nmsmtp1:=TNmsmtp.Create(Application);
Nmsmtp1.OnConnect:=TMyNmsmtpONConnect; //這句通不過
Nmsmtp1.Host :=Host;
nmsmtp1.Port :=25;
nmsmtp1.UserID :=UserID;
nmsmtp1.ReportLevel :=1;
Nmsmtp1.TimeOut :=10000;
nmsmtp1.Connect ; end;
=>
Nmsmtp1Nmsmtp1.OnConnect:=Nmsmtp1.TMyNmsmtpONConnect;牢记它和一般的过程是有区别的,一个类的成员是不存在地址的概念的,它只是一个虚拟的数据结构,当然不能赋值,所以只能赋值为实例化后的成员的地址当然你上面已经从TNMSmtp上派生了TMyNMSmtp,直接重载Create是比较好的做法constructor Create(AOwner: TComponent); override;constructor TMyNmsmtp.Create(AOwner: TComponent);
begin
inherited;
Self.OnConnect:=Self.TMyNmsmtpONConnect;
end;