菜鸟系列2(25分)

  • 主题发起人 主题发起人 hbffff
  • 开始时间 开始时间
H

hbffff

Unregistered / Unconfirmed
GUEST, unregistred user!
pascal的过程或函数名究竟是什么?
是指针?
事件是方法指针,但动态给一事件赋植怎么做?

dataset1.Afteropen:=form1.dataset1Afteropen(dataset1);??//不行
 
a demo

procedure Tform1.aa(sender: TObject);
begin
showmessage('1');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('2');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
button1.OnClick := aa;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
button1.OnClick := Button1Click;
end;
 
记住,赋给他的过程的参数必须与原事件相同!
 
应这样
dataset1.Afteropen:=form1.dataset1Afteropen ;
 
:tinytao
为什么去掉参数?
《记住,赋给他的过程的参数必须与原事件相同
 
事件类型实际上是TMethod类型的记录(在 Controls.pas 中定义),包含两个指针,一个指向
类的成员方法,一个指向类的对象实例。如 TDataSet.AfterOpen 是 TDataSetNotifyEvent
类型的事件,TDataSetNotifyEvnet = procedure(DataSet: TDataSet) of Object
则该类型第一个指针必须指向原型为 procedure ProcName(DataSet: TDataSet) 的类成员
方法,第二个指针可以指向任何对象。如果这样 dataset1.AfterOpen := form1.dataset1AfterOpen
则 AfterOpen 这个 TMethod 类记录中第一个指针将指向 datasetafteropen 这个方法,
第二个指针将指向 form1 这个对象。Delphi 编译时遇到这种语句会自动地对两个指针分别
赋值,并检查是否合法的。触发事件时,Delphi 会根据事件类型自动地调用第一个指针指向
的方法,并将第二个指针指向的对象作为 Self 参数传给该方法。
 
多人接受答案了。
 
后退
顶部