请教“函数类型”是怎么会事?----面条(100分)

  • 主题发起人 主题发起人 面条
  • 开始时间 开始时间

面条

Unregistered / Unconfirmed
GUEST, unregistred user!
function myfunction(var i:integer):integer;
................
...............

var f:Tmyfunction;是怎么会事????

另外,
以前我自己写消息句宾函数时总是:
procedure mypro(var m:TMessage);Message:WM_...;
今天我又看到:
procedure mypro(var m:Tmypro);Message:WM_...;
忘哪位大虾解释一下。
谢谢!
 
f是一个函数指针啊。就像Delphi VCL的事件(event)都是函数指针。
TMyPro其实也是一个TMessage结构。只不过在解释wParam和lParam的时候不同,
总长度是一样的。
 
f相当于一个指向函数的指针
用f:=myfunction可以给它赋值
然后,可以用f(i)调用此函数
procedure mypro(var m:Tmypro);Message:WM_...;
意思是收到WM_...消息时
系统回调此函数
 
delphi里面函数都是指针,就象tqz说的那样.
其实你一直在使用函数指针,只是自己没有注意,比如当你给form的onClick事件定义
过程的时候,实际上是将onclick的指针指向了你定义的过程,所以你才可以很方便的
将它指向另一个过程.
这就是oop的优点,VB这点无法和delphi相比.
 
VB有个ADDRESS OF 的操作符可以取得函数的地址
好象还有什么办法能通过该地址调用函数
不过,VB的面向对象的那些东东,
如类,做的实在是很差,
结构和层次都很不清楚
 
wrench: VB里面不能给事件指定别的过程,因为他不支持指针.
 
tqz:好久没见了! :)
 
顺便说,函数指针可以当参数传递的:)
 
能在详细解释一下他们的区别吗??
procedure mypro(var m:TMessage);Message:WM_...;
procedure mypro(var m:Tmypro);Message:WM_...;
 
例如:
TMessage = packed record
Msg: Cardinal;
case Integer of
0: (
WParam: Longint;
LParam: Longint;
Result: Longint);
1: (
WParamLo: Word;
WParamHi: Word;
LParamLo: Word;
LParamHi: Word;
ResultLo: Word;
ResultHi: Word);
end;

收到WM_PAINT消息时: WParam = hDC;
即此时
TMessage.Msg = WM_PAINT;
TMessage.WParam = hDC;
TMessage.LParam 没用;
TMessage.Result 存放返回值.
为了方便使用: delphi将wm_paint消息重新定义为:
TWMPaint = packed record
Msg: Cardinal;
DC: HDC;
Unused: Longint;
Result: Longint;
end;

看到了吗?
其实还是个TMessage结构, 只不过将其中的item改了下名字已便于理解(长度相同).
 
基本上懂了,谢谢各位!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
687
import
I
后退
顶部