procedure TForm1.Wndproc(var Message: TMessage);
var
strLog: AnsiString;
begin
case Message.Msg of
WM_KEYDOWN, WM_SYSKEYDOWN, WM_SYSKEYUP, WM_KEYUP:
begin
strLog := 'wParam: ' + IntToStr(Message.wParam) +
' lParam: ' + IntToStr(Message.lParam);
end;
else
inherited;
end;
end;
VK_TAB: приходит лишь сообщение об отпускании клавиши ( Message.lParam < 0)
Почему про нажатие клавиши не приходит сообщения? Т.е. с Message.lParam большим нуля.
Код:
Delphi XE
[ATTACH]5275[/ATTACH]
Что-то я не понял в этой жизни, а с каких пор Message.lParam отвечает за то, нажали клавишу или отпустили?
Он каким-то битом отвечает за это!
[QUOTE=MSDN]
The previous key state. The value is 1 if the key is down before the message is sent, or it is zero if the key is up.
[/QUOTE]
31 бит - новое состояние клавиши.
[QUOTE=MSDN]
WM_CHAR
31 The transition state. The value is 1 if the key is being released, or it is 0 if the key is being pressed.
WM_KEYDOWN
31 The transition state. The value is always 0 for a WM_KEYDOWN message.
WM_KEYUP
31 The transition state. The value is always 1 for a WM_KEYUP message.
[/QUOTE]
Аналогично для WM_SYSKEYDOWN / WM_SYSKEYUP.
Upd: а какое отношение 31-й бит имеет к знаку Message.lParam?
Тоесть Щупак нигде не облажался. Полей и правда 6. Но 6-е поле не имеет смысла для, положим, WM_KEY{UP,DOWN}
Код:
procedure TForm1.CMDialogKey(var AMessage: TCMDialogKey);
var strLog: AnsiString;
begin
if AMessage.CharCode = VK_TAB then begin
strLog := 'wParam: ' + IntToStr(AMessage.CharCode) + ' lParam: '
+ IntToStr(AMessage.KeyData);
AMessage.result := 1;
Exit;
end;
inherited;
end;
var strLog: AnsiString;
begin
if AMessage.CharCode = VK_TAB then begin
strLog := 'wParam: ' + IntToStr(AMessage.CharCode) + ' lParam: '
+ IntToStr(AMessage.KeyData);
AMessage.result := 1;
Exit;
end;
inherited;
end;
>>а какое отношение 31-й бит имеет к знаку Message.lParam?
Никакого) Это IntToStr() дарит ему знак.
31й бит это знак Message.lParam
Прям как в учебниках )
Цитата: Phodopus
31й бит это знак Message.lParam
Все, вопрос снят. Это я не включился, что это старший бит.