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);