Zitat von
MSDN:
0-15: Specifies the repeat count for the current message. The value is the number of times the keystroke is autorepeated as a result of the user holding down the key. If the keystroke is held long enough, multiple messages are sent. However, the repeat count is not cumulative.
Das ist slso nur die Anzahl seit der vorherrigen Message.
Windows optimiert hier mal zur Abwechslung etwas
Delphi-Quellcode:
if Msg.message = WM_KEYDOWN then
begin
locCount := Msg.lParam AND $FFFF;
Label1.Caption := IntToStr (loccount);
Sleep(500);
end;
und rechnet die letzten gleichen Nachrichten zusammen.
[add]
ich wollte grad vorschlagen eine Liste anzulegen, welche Tasten grad gedrückt sind und die aktiven Tasten dann bei den nächsten KeyDowns zu ignorieren.
KeyDown in Liste eintragen | KeyUp wider daraus löschen
usw.
und zu Xong's Vorschlag ... es muß nicht immer nur eine Taste gleichzeiig gedrückt sein ... bei mehreren kommt das Programm so durcheinander, da so nicht geprüft wird welche Taste grad gemeint ist.
aber schau dir mal Bit 30 in lParam an
(grad noch so gesehn)
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
if Msg.message = WM_KEYDOWN then
begin
if Msg.lParam AND $40000000 = 0 then
begin
...
end;
end;
end;
// und zum Testen
if Msg.message = WM_KEYDOWN then
begin
locCount := Msg.lParam AND $40000000;
Label1.Caption := IntToStr (loccount);
end;
Zitat von
MSDN:
30: Specifies 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.