函数指针的问题,请指教(100分)

  • 主题发起人 主题发起人 xfei
  • 开始时间 开始时间
X

xfei

Unregistered / Unconfirmed
GUEST, unregistred user!
TForm1 = class(TForm)
private
procedure FEnter(Sender:TObject);
end
...
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.OnEnter:=FEnter;//通过,FEnter定义在TForm外就不行
end;

//============错误,Why????How To??????=============
TForm1 = class(TForm)
end
procedure FEnter(Sender:TObject);//不在TForm1中
...
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.OnEnter:=FEnter;//通过,FEnter定义在TForm外就不行
end;
 
type TNotifyEvent = procedure (Sender: TObject) of object;

如果 没有of object就行了,自己看看书,我说不明白!
 
可以的
Unit unit2
type
TForm2 = class(TForm)
public
procedure FEnter(sender:Tobject);
end;
Unit unit1
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.OnEnter:=Form2.FEnter;//这里改一下
end;
 
在Form外和Form 内是不一样的。
一个是普通的函数或过程。
另一个是类或对象的方法。这个会含对象的地址。
 
一个是对象方法
一个是普通方法,参数调用地址不同,所以不兼容
 
是啊,如果实在要这么做,就需要定义一个从TObject下来的类,就像beyondair说的那样。
不过一定要是对象,比如TForm2就不可以:)
 
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.OnEnter:=FEnter;//通过,FEnter定义在TForm外就不行
end;
Fenter没有对象前缀,编译器会认为是self 但是self不存在此方法,所以通不过
 
后退
顶部