请问要在动态创建的FORM的onshow事件中添加代码应该怎么做呢
procedure Fo(Sender: TObject);
begin
showmessage('啊啊啊啊')
endf:=tform.create(f);
f.Onshow:=Fo;//到这里出错 如果设置为form1.onshow 编辑不会出错 但是运行就会报错
f.Show;
错误代码[DCC Error] fun.pas(41): E2009 Incompatible types: 'method pointer and regular procedure'高手帮帮忙
procedure Fo(Sender: TObject);
begin
showmessage('啊啊啊啊')
endf:=tform.create(f);
f.Onshow:=Fo;//到这里出错 如果设置为form1.onshow 编辑不会出错 但是运行就会报错
f.Show;
错误代码[DCC Error] fun.pas(41): E2009 Incompatible types: 'method pointer and regular procedure'高手帮帮忙
解决方案 »
- 寻求用web形式浏览医学dicom文件的delphi编程代码
- 端午節到了,散分!
- 运行期可改变大小和移动的Image控件
- 怎样用程序写弹出右下角系统时钟设置框?
- 这个问题真的是不好搞呀,delphi高手请帮帮忙吧,谢谢!!
- Delphi中对应的C++类:CWordArray,CStringArray是什么?
- 急急如令!!!请问使用 IDPOP3 怎么样得到附件名称,大小,又该如何下载下来?
- 关于显示转换
- 在delphi里如何调整分辨率
- Dbgrid中,我想把某一列的数值的符合某条件的赋为某它符号,具体情况如下:
- 请推荐一个好用的面板控件(类似QQ或XP中常见任务)
- help 没有安装Delphi,请帮忙试一下下面的代码
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure Fo(Sender: TObject);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Fo(Sender: TObject);
begin
showmessage('啊啊啊啊') ;
end;procedure TForm1.Button1Click(Sender: TObject);
var
f:tform;
begin
f:=tform.create(f);
f.Onshow:=Fo;//到这里出错 如果设置为form1.onshow 编辑不会出错 但是运行就会报错
f.Show;end;end.
TNotifyEvent = procedure (Sender: TObject) of object;
必须是类的方法。
1楼的Keiy所写的方法在类里面定义,那么这个方法就是类的一个方法了,过程名称FO也就是一个方法指针了;3楼兄弟直接声明一个方法指针类型,这就更没有问题了.不过在访问之前,要使方法指针指向你的自定义方法才行.type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure Test(Sender:TObject);
public
{ Public declarations } end;var
Form1: TForm1;
DoOnShow:TNotifyEvent;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
//方式1
DoOnShow:=Test;
self.OnShow:= DoOnShow;
//方式2
//self.OnShow:=self.Test;
end;procedure TForm1.Test(Sender: TObject);
begin
showmessage('test');
end;上面的方式1/方式2都可以.
注意一点就是keiy所说的:自定义事件响应方法必须定义在类内,private,public都可以.
f:tform;
begin
f:=tform.create(self);//这里弄成SELF就可以了.哪么麻烦
f.Onshow:=Fo
f.Show;