Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Tastendruck innerhalb vorgegeb. Zeit / Maus diagonal bewegen (https://www.delphipraxis.net/81603-tastendruck-innerhalb-vorgegeb-zeit-maus-diagonal-bewegen.html)

-=cats=- 30. Nov 2006 07:23


Tastendruck innerhalb vorgegeb. Zeit / Maus diagonal bewegen
 
Guten Morgen :hi:

Ich habe ein kleines Problem ...

In meinem anderen Beitrag habe ich bereits geschrieben,
das ich den Mauszeiger auch diagonal bewegen möchte.
Allerdings ... ! Nur mit den Pfeiltasten.
Gehen wir mal davon aus, dass es keine anderen Tasten
gibt :-)
Da das ein kleines Problem ist, links und rechts gleichzeitig
zu nehmen (es wird immer erst links genommen und dann rechts),
habe ich mir überlegt, die Tasten unmittelbar nacheinander
abzufragen.
Geht das ?
Also, der Benutzer wird ja automatisch "links" und "hoch"
gleichzeitig drücken. Also werden vermutlich nur sehr wenige
Sekunden zwischen dem Drücken auf "links" und auf "hoch"
liegen.

Kann man das irgendwie machen, oder ist die Idee eher
Schwachsinn ... ?
Wenn ja, wie ?

Vielen Dank schon mal für Eure Hilfe !

Gruß,
-=cats=-

SirThornberry 30. Nov 2006 08:15

Re: Tastendruck innerhalb vorgegebener Zeit ?
 
die Idee ist eher schlecht weil es genau so vorkommen kann das jemand den Mauszeiger eine zeit lang in eine Richtung bewegt und dann erst später in die Diagonale Bewegung übergeht. Wenn du das ganze nur Innerhalb deines Programmes nutzen willst kannst du einfach auf OnKeyUp und OnKeyDown reagieren und dir in den Ereignissen merken welche Tasten gedrückt sind und welche nicht.

-=cats=- 30. Nov 2006 09:09

Re: Tastendruck innerhalb vorgegebener Zeit ?
 
Oh das habe ich noch vergessen zu
erwähnen: Die Maus gibt es nicht.
Daher soll man auch den Mauszeiger mit den
Tasten bedienen können.

Ich habe hier einen Lösungsansatz, leider funktioniert
das Diagonale nur so lange, wie der Timer läuft ...

Delphi-Quellcode:

procedure TForm18.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if
   key = vk_left
   then
   begin
    SetCursorPos(Mouse.CursorPos.X - 10, Mouse.CursorPos.Y);
    JvTimer1.Enabled := true;
    end
  else
   if
    key = vk_right
    then
     SetCursorPos(Mouse.CursorPos.X + 10, Mouse.CursorPos.Y)
  else

   if
     (key = vk_up) and (JvTimer1.Enabled = false)
      then
       SetCursorPos(Mouse.CursorPos.X, Mouse.CursorPos.Y - 10)
   else
    if
      key = vk_down
       then
       SetCursorPos(Mouse.CursorPos.X, Mouse.CursorPos.Y + 10)
   else
       if
     ((GetKeyState(vk_left) AND 128)=128) AND ((GetKeyState(vk_up) AND 128)=128)
     then
     begin
     // ShowMessage('Links und hoch gleichzeitig gedrückt !');
     SetCursorPos(Mouse.CursorPos.X - 1, Mouse.CursorPos.Y - 1);
     end;
end;
Jetzt muss ich noch irgendwas mit "onKeyUp" machen.
Denn so geht diagonal ja nur, wenn der Timer läuft. Ist der
Timer abgelaufen, geht der Zeiger wieder ganz normal in die
Richtung nach oben. Und das soll nicht sein ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf