消息类型转换的问题?(50分)

  • 主题发起人 主题发起人 vfphome
  • 开始时间 开始时间
V

vfphome

Unregistered / Unconfirmed
GUEST, unregistred user!
在Application.OnMessage中得到的消息变量 (var Msg: TMsg;
var Handled: Boolean);
中的 Msg :TMsg 怎样转换成 Message :TMessage 的消息类型
我起码接用 TMessage(Msg) 或 TMessage(Msg.Message)
都有不行,,,怎样才行请高手指点,
在线等待
如问题瓿得不明白,请询问..............我会立即补充详细.....
 
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;

tagMSG = packed record
hwnd: HWND;
message: UINT;
wParam: WPARAM;
lParam: LPARAM;
time: DWORD;
pt: TPoint;
end;
{$EXTERNALSYM tagMSG}
TMsg = tagMSG;
两者长度不同。
 
TMsg , TMessage 二者难道没有任何联系吗?
为何 Messgae :Tmessge -> TWMMouse 可以用 TWMMouse(Message)转换?
Msg :TMsg , TMessage二者可以这样吗 TMessage(Msg.LParam) ?
 
有的参数能对应起来。看看下面例子。
private
{ Private declarations }
procedure OnAppMessage(var Msg:TMsg;var Handle:Boolean);
procedure Test(var msg: TMessage);message WM_USER;
procedure TForm1.OnAppMessage(var Msg:TMsg;var Handle:Boolean);
begin
if Msg.message = WM_USER then
memo1.lines.Add('message:'+inttostr(Msg.message)+#13#10+'wparam:'+inttostr(msg.wParam));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage:=OnAppMessage;
end;

procedure TForm1.Test(var msg: TMessage);
begin
memo2.lines.Add('message:'+inttostr(Msg.Msg)+#13#10+'wparam:'+inttostr(msg.wParam));
inherited;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
postMessage(handle,WM_USER,100,0);
end;
 
TMsg类型是Windows程序标准的消息结构,而TMessage是VCL自己的消息处理系统所用结构,
它对TMsg结构做了简化,两者结构如影子所说,两者不能直接转换,但两者的部分成员一致
TMsg.message =TMessage.Msg
TMsg.wParam =TMessage.wParam
TMsg.lParam =TMessage.lParam
所以只要在OnMessage中定义TMessage类型的变量,并将Msg参数中与TMessage中相一致的成
员赋与该变量即可,并且该变量类型可转换为任意VCL内部其他消息类型。

 
我已解决了问题但还是谢谢各位,每人都有有分
 

Similar threads

S
回复
0
查看
896
SUNSTONE的Delphi笔记
S
S
回复
0
查看
873
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部