Window 要发送和恢复布尔值和整数的消息
Window Message to Send and recover Boolean and Integer
如何 Post 包含布尔值和整数的 Windows 消息。我确实了解如何 Post 和恢复字符串。
这是我的字符串代码。
procedure TForm5.Button1Click(Sender: TObject);
var
LParam: string;
WParam: string;
pLParam: pChar;
pWParam: pChar;
begin
Memo.Clear;
LParam := 'Now is the time for all good men...';
Length(LParam);
GetMem(pLParam, (Length(LParam) + 1) * SizeOf(Char));
Move(LParam[1], pLParam^, (Length(LParam) + 1) * SizeOf(Char));
WParam := 'This is the WParam. ';
Length(WParam);
GetMem(pWParam, (Length(WParam) + 1) * SizeOf(Char));
Move(WParam[1], pWParam^, (Length(WParam) + 1) * SizeOf(Char));
PostMessage(Handle, WM_SETPAUSE_MESSAGE, Integer(pWParam),Integer(pLParam));
end;
这是为了恢复文本...
procedure TForm5.WMsetPause(var MESSAGE: TMessage) { message WM_SETPAUSE_MESSAGE };
var
pLParam: pChar;
pWParam: pChar;
begin
try
pLParam := pChar(Message.LParam) ;
Memo.Lines.Add( pLParam) ;
Freemem(pLParam);
except
on E: Exception do
Memo.Lines.Add(E.ClassName + ': ' + E.MESSAGE);
end;
try
pWParam := pChar(Message.WParam);
Memo.Lines.Add(pWParam);
Freemem(pWParam);
except
on E: Exception do
Memo.Lines.Add(E.ClassName + ': ' + E.MESSAGE);
end;
end;
这个任务比发送字符串简单多了。
您不需要为这些类型分配内存,因为消息参数已经是 Integer,而 Boolean 只需要简单的转换。
PostMessage(Handle, WM_MY_MESSAGE, IntegerParam, Integer(BooleanParam));
....
//in WM_MY_MESSAGE handler:
IntVar := Message.WParam;
BooleanVar := Boolean(Message.WParam);
如何 Post 包含布尔值和整数的 Windows 消息。我确实了解如何 Post 和恢复字符串。 这是我的字符串代码。
procedure TForm5.Button1Click(Sender: TObject);
var
LParam: string;
WParam: string;
pLParam: pChar;
pWParam: pChar;
begin
Memo.Clear;
LParam := 'Now is the time for all good men...';
Length(LParam);
GetMem(pLParam, (Length(LParam) + 1) * SizeOf(Char));
Move(LParam[1], pLParam^, (Length(LParam) + 1) * SizeOf(Char));
WParam := 'This is the WParam. ';
Length(WParam);
GetMem(pWParam, (Length(WParam) + 1) * SizeOf(Char));
Move(WParam[1], pWParam^, (Length(WParam) + 1) * SizeOf(Char));
PostMessage(Handle, WM_SETPAUSE_MESSAGE, Integer(pWParam),Integer(pLParam));
end;
这是为了恢复文本...
procedure TForm5.WMsetPause(var MESSAGE: TMessage) { message WM_SETPAUSE_MESSAGE };
var
pLParam: pChar;
pWParam: pChar;
begin
try
pLParam := pChar(Message.LParam) ;
Memo.Lines.Add( pLParam) ;
Freemem(pLParam);
except
on E: Exception do
Memo.Lines.Add(E.ClassName + ': ' + E.MESSAGE);
end;
try
pWParam := pChar(Message.WParam);
Memo.Lines.Add(pWParam);
Freemem(pWParam);
except
on E: Exception do
Memo.Lines.Add(E.ClassName + ': ' + E.MESSAGE);
end;
end;
这个任务比发送字符串简单多了。
您不需要为这些类型分配内存,因为消息参数已经是 Integer,而 Boolean 只需要简单的转换。
PostMessage(Handle, WM_MY_MESSAGE, IntegerParam, Integer(BooleanParam));
....
//in WM_MY_MESSAGE handler:
IntVar := Message.WParam;
BooleanVar := Boolean(Message.WParam);