2016-05-26 6 views
0

ブール値と整数を含むWindowsメッセージを投稿する方法を教えてください。私は、文字列の投稿と復元方法を理解しています。 これは文字列のコードです。ブール値と整数を送受信するウィンドウメッセージ

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; 
+2

メッセージを投稿できない場合は、PostMessageから返されたメッセージを確認する必要があります。その場合、メモリを破壊する。あなたのキャストは間違っていて、64ではなく失敗します。 LPARAM、WPARAMなどにキャスト –

答えて

5

このタスクは、送信文字列よりもはるかに簡単です。

メッセージパラメータはすでに整数であり、ブール値は単純なキャストだけで済むため、これらの型にメモリを割り当てる必要はありません。

PostMessage(Handle, WM_MY_MESSAGE, IntegerParam, Integer(BooleanParam)); 
.... 
//in WM_MY_MESSAGE handler: 
IntVar := Message.WParam; 
BooleanVar := Boolean(Message.WParam); 
+0

キャストを除いてうまくいったMBo: Ord(Message.WParam); ありがとうございました: ブール型(Message.WParam) –

+0

ああ、はい、Ordは最初のケースに適しています(boolからint):) – MBo

関連する問題