消息我想不用再解释了吧?!
事件本质上是一个指向一个过程的调用地址的指针
当程序收到一条消息,它尝试把该条消息解释为一个事件,如果该定义了该事件的处理过程,就调用该过程,例如:当你编写了一个事件处理过程,在该窗体的dfm文件里你会找到象下面的这一行:OnMouseDown = Button1MouseDown这一行就是把你写事件处理过程的地址赋值给该Button控件的OnMouseDown属性,该属性实际把值赋给一个私有变量.在该Button的声明中会有类似如下的代码:Property OnMouseDown: TOnMouseDownEvent read FOnMouseDown write FOnMouseDown;消息处理过程中会有类似如下的代码:case Message of
...
WM_LBUTTONDOWN:
if Assigned(FOnMouseDown) then
FOnMouseDown(Self);
...
end;
事件本质上是一个指向一个过程的调用地址的指针
当程序收到一条消息,它尝试把该条消息解释为一个事件,如果该定义了该事件的处理过程,就调用该过程,例如:当你编写了一个事件处理过程,在该窗体的dfm文件里你会找到象下面的这一行:OnMouseDown = Button1MouseDown这一行就是把你写事件处理过程的地址赋值给该Button控件的OnMouseDown属性,该属性实际把值赋给一个私有变量.在该Button的声明中会有类似如下的代码:Property OnMouseDown: TOnMouseDownEvent read FOnMouseDown write FOnMouseDown;消息处理过程中会有类似如下的代码:case Message of
...
WM_LBUTTONDOWN:
if Assigned(FOnMouseDown) then
FOnMouseDown(Self);
...
end;
如WM_LBUTTONDOWN消息和事件onchick通过什么代码或函数联系起来的呢?
...
WM_LBUTTONDOWN:
onchick(self);
...
end;
还有个问题:
有个什么消息结构的!这个消息结构是否一定是固定长度呢?
还有一个消息处理过程:
procedure(var msg:TMemmage);Message WM_...;
这个东西和事件处理过程是什么关系呢?另:很高兴和你认识,以后我有什么问题能发电子邮件请教你吗?
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG, *PMSG;
VCL中定义了许多自己的消息结构,如TWMKey,TWMMouse等,有兴趣可以看messages.pas的源码。语句procedure(var msg:TMemmage);Message WM_...;的意思就是告诉VCL,有WM_...消息过来,就让我处理一下。你随便在VCL中找一个类似上面的过程的源码看看,在过程中多半会有一行inherited。实际上这种过程就是省略了override关键字的覆盖过程。具体的解释可以在Delphi的帮助中查message (directive)关键字。我的电子邮件地址是[email protected](你是第一个问我要地址的人)。我能否有足够的水平和时间回答你的问题就很难说了,一起学习吧!