2011-06-28 9 views
4
procedure TSell.ApplicationEvents1Message(var Msg: tagMSG; 
    var Handled: Boolean); 
begin 
    if (Msg.Message=WM_KEYDOWN)and(Msg.wParam=VK_CONTROL+VK_HOME)then 
    begin 
end; 
+1

「仕事」を意味するのはどうですか?何が起こり、代わりに何が起こると思いますか? –

答えて

10

VK_CONTROL仮想キーのステータスを確認するには、GetKeyState関数を使用する必要があります。

このサンプル= Ord('5')

procedure TSell.ApplicationEvents1Message(var Msg: tagMSG; 
    var Handled: Boolean); 
begin 
    if (Msg.Message=WM_KEYDOWN) then 
    if (GetKeyState(VK_CONTROL) < 0) and (Msg.wParam=VK_HOME) then 
    //do your stuff 
end; 
+0

私のデファイナーverymuchありがとうございます –

+2

@Saeed:ようこそStackOverflow。 @ RRUZの答えが問題の解決策だった場合は、それを受け入れることを検討してください(左のチェックマークを使用)。 –

+0

GetAsyncKeyState(CURRENT状態(非同期)を使用する場合はこれを呼び出します)またはVK_HOMEキーが押されたときの状態(通常:GetKeyState)の違いに注意してください。 GetAsyncKeyState情報:http://msdn.microsoft.com/en-us/library/ms646293(VS.85).aspx –

7

VK_CONTROL + VK_HOME = 17 + 36 = 53を試します。ユーザがキーボードの一番上の行に沿ってを押したかどうかを確認しています。

2つの独立したキーの仮想キーコードを追加して、両方が同時に押されているかどうかを調べることはできません。 Ctrlキーホームは、二つの異なるキーであり、それぞれが独自のwm_KeyDownwm_KeyUpメッセージを生成します。 (しかし、これらのキーを順番に押すのを検出しようとしないでください。より複雑になります。ホームが押されたら、GetKeyStateを使用して、Rruzの回答が示すようにCtrlは、現在のキーボードメッセージを受信した時点ですでにダウンしていました。)

関連する問題