Thema: Delphi zu schnelle reaktion

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#9

Re: zu schnelle reaktion

  Alt 10. Mär 2007, 13:31
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
  Mit Zitat antworten Zitat