看过inside VCL的进来坐坐 ( 积分: 200 )

  • 主题发起人 主题发起人 WoDing
  • 开始时间 开始时间
W

WoDing

Unregistered / Unconfirmed
GUEST, unregistred user!
Inside VCL的P238到P239:事实上一个鼠标点击的动作包含了两个窗口消息,wm_lbuttonup和wm_command,
然后接下来仔细的讲述了从wm_command到onclick的过程,但是没有讲VCL是怎样处理wm_lbuttonup这个消息的,(难道不用处理?)。
后来我通过onmessage却只能收到wm_lbuttonup,而没有收到wm_command,代码我晚上贴上来,我这个PC上没有Delphi
 
Inside VCL的P238到P239:事实上一个鼠标点击的动作包含了两个窗口消息,wm_lbuttonup和wm_command,
然后接下来仔细的讲述了从wm_command到onclick的过程,但是没有讲VCL是怎样处理wm_lbuttonup这个消息的,(难道不用处理?)。
后来我通过onmessage却只能收到wm_lbuttonup,而没有收到wm_command,代码我晚上贴上来,我这个PC上没有Delphi
 
还只看了几十页
 
代码如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure mymsg(var msg:Tmsg;var b:boolean);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.mymsg(var msg:Tmsg;var b:boolean);

begin
case msg.message of
wm_command : Memo1.Lines.Add('command '+inttostr(msg.hwnd)+' '+inttostr(msg.wParam)+' '+inttostr(msg.lParam));
wm_lbuttonup:Memo1.Lines.Add('lbuttonup '+inttostr(msg.hwnd)+' '+inttostr(msg.wParam)+' '+inttostr(msg.lParam));
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage:=mymsg;
end;

end.
 
unit Unit1;

interface

uses
Windows, Messages, Controls, Forms, Dialogs, StdCtrls, Classes;

type
TForm1 = class(TForm)
Button1: TButton;
private
procedure WMCommand(var Msg: TWMCommand)
message WM_COMMAND;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMCommand(var Msg: TWMCommand);
begin
ShowMessage('收到');
end;

end.
 
明白了,谢谢两位参与,也不是完全的明白
 
wm_command应该是控件过程SendMessage()给父窗体的,不经过消息队列,所以Application.OnMessage 拦不到.
 
后退
顶部