Zitat von
Flocke:
Dein Problem liegt nicht in der WndProc sondern in ProcessKeys - wenn die Taste gedrückt ist und wenn diese Routine aufgerufen wird, dann tust du etwas - egal ob du noch ein WM_KEYDOWN usw. bekommen hast oder wieviel Zeit vergangen ist.
Wie wäre es, wenn du in ProcessKeys den Status wieder auf False setzt? Dadurch würde die Routine bis zum nächsten Tastendruck bzw. bis zum Ablauf der Wiederholverzögerung warten. Außerdem müsstest du dann WM_KEYUP überhaupt nicht behandeln.
Ja !
Das wars...
Winproc brauch ich trotzdem da die Keys sonst nicht registriert werden
Delphi-Quellcode:
procedure ProcessKeys(This_Mod: PWinAMPVisModule);
begin
if KeyDown = False then
begin
// Jump To Prev Song
if keys[VK_LEFT] then
SendMessage(This_Mod^.hWNDParent, WM_COMMAND, 40044, 0);
KeyDown := true;
// Jump To Next Song
if keys[VK_RIGHT] then
SendMessage(This_Mod^.hWNDParent, WM_COMMAND, 40048, 0);
KeyDown := true;
// Toggle Volume Up
if keys[VK_UP] then
SendMessage(This_Mod^.hWNDParent, WM_COMMAND, 40058, 0);
KeyDown := true;
// Toggle Volume Down
if keys[VK_DOWN] then
SendMessage(This_Mod^.hWNDParent, WM_COMMAND, 40059, 0);
KeyDown := true;
if keys[VK_F2] then
if HelpScreen then HelpScreen:=False else HelpScreen:=True;
KeyDown := true;
end;
end;
Delphi-Quellcode:
WM_KEYDOWN: //Is A Key Being Held Down?
begin
keys[wParam] := True;
KeyDown := false;
result:=0;
end;
WM_KEYUP: //Is A Key Being Released?
begin
keys[wParam] := False;
KeyDown := true;
result:=0;
end;
So funktioniert es .
Gruss Emil