Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Pfeiltasten benutzen zum Bewegen eines Shapes (https://www.delphipraxis.net/191275-pfeiltasten-benutzen-zum-bewegen-eines-shapes.html)

Maurooon 28. Dez 2016 12:59

Delphi-Version: 5

Pfeiltasten benutzen zum Bewegen eines Shapes
 
Hallo,

ich hoffe ihr hattet alle schöne Feiertage.

Hier zu meiner Frage: Ich habe ein Shape und mehrere Buttons auf meiner Maske. Ich möchte nun das Shape mit den Pfeiltasten bewegen. drücke ich aber die Pfeiltasten, dann bewegt sich der Cursor sag ich mal nur auf den Buttons, wie man das eben kennt. was muss ich tun, damit sich tatsächlich NUR das Shape beweget?

Meine Prozedur sieht wie folgt aus:

Code:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
  );
begin
  if key = vk_left then
   Shape16.Left := Shape16.Left - 2;
  if key = vk_right then
   Shape16.Left := Shape16.Left + 2;
  if key = vk_up then
   Shape16.Top := Shape16.Top - 2;
  if key = vk_down then
   Shape16.Top := Shape16.Top + 2;
end;
LG

a.def 28. Dez 2016 13:11

AW: Pfeiltasten benutzen zum Bewegen eines Shapes
 
Setz in deinem FormCreate-Event mal
Delphi-Quellcode:
KeyPreview := True
dann sollte es klappen. Sicher bin ich mir nicht.

himitsu 28. Dez 2016 13:12

AW: Pfeiltasten benutzen zum Bewegen eines Shapes
 
Ich würde das ja gleich im OI setzen. :angle:

Und dann muß man aufpassen, dass der Fokus nicht in einem Control liegt, welches diese Tasten vorher abfängt.

a.def 28. Dez 2016 13:13

AW: Pfeiltasten benutzen zum Bewegen eines Shapes
 
Oder so :thumb:
Ich persönlich mag es lieber im Code denn dann hat man alles an zentraler Stelle und muss nicht erst im IO suchen.

stahli 28. Dez 2016 13:37

AW: Pfeiltasten benutzen zum Bewegen eines Shapes
 
Nach der Behandlung kann man m.E. Key noch auf #0 setzen, damit ein focusiertes Control nicht noch auf die Taste reagiert.

Maurooon 28. Dez 2016 13:41

AW: Pfeiltasten benutzen zum Bewegen eines Shapes
 
Zitat:

Zitat von a.def (Beitrag 1357340)
Setz in deinem FormCreate-Event mal
Delphi-Quellcode:
KeyPreview := True
dann sollte es klappen. Sicher bin ich mir nicht.


Also jetzt funktioniert schon mal das Bewegen des Shapes, vielen Dank! Aber trotzdem bewegt sie der Cursor auf den Buttons. Da ich unter den Buttons auch eine Trackbar hab verstellt diese sich auch unglücklicherweise noch und führt so noch andere Dinge aus.... Jemand eine Lösung dafür?

himitsu 28. Dez 2016 13:49

AW: Pfeiltasten benutzen zum Bewegen eines Shapes
 
Zitat:

Zitat von Maurooon (Beitrag 1357345)
Aber trotzdem bewegt sie der Cursor auf den Buttons.
...
Jemand eine Lösung dafür?

stahli


Zitat:

Zitat von a.def (Beitrag 1357342)
Ich persönlich mag es lieber im Code denn dann hat man alles an zentraler Stelle und muss nicht erst im IO suchen.

Du erstellst auch alle Controls manuell und setzt deren Properties im Code?

Papaschlumpf73 28. Dez 2016 13:56

AW: Pfeiltasten benutzen zum Bewegen eines Shapes
 
Nimm statt des Ereignisses FormKeyDown einfach FormShortCut (OnShortCut) des Formulars.

Die Tasten kannst du da so auswerten:

Delphi-Quellcode:
if Msg.CharCode = VK_LEFT then begin [DeinCode]; Handled:=true; end;

Durch das Handled:=true wird dann der Tastenanschlag nicht mehr an andere Komponenten weiter gegeben.

a.def 28. Dez 2016 14:19

AW: Pfeiltasten benutzen zum Bewegen eines Shapes
 
Zitat:

Zitat von Papaschlumpf73 (Beitrag 1357347)
Nimm statt des Ereignisses FormKeyDown einfach FormShortCut (OnShortCut) des Formulars.

Die Tasten kannst du da so auswerten:

Delphi-Quellcode:
if Msg.CharCode = VK_LEFT then begin [DeinCode]; Handled:=true; end;

Durch das Handled:=true wird dann der Tastenanschlag nicht mehr an andere Komponenten weiter gegeben.


Oder so
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if Key = vk_left then
  Shape1.Left := Shape1.Left - 2;
 if Key = vk_right then
  Shape1.Left := Shape1.Left + 2;
 if Key = vk_up then
  Shape1.Top := Shape1.Top - 2;
 if Key = vk_down then
  Shape1.Top := Shape1.Top + 2;

 Key := 0; // <==
end;

Maurooon 28. Dez 2016 14:28

AW: Pfeiltasten benutzen zum Bewegen eines Shapes
 
Zitat:

Zitat von stahli (Beitrag 1357344)
Nach der Behandlung kann man m.E. Key noch auf #0 setzen, damit ein focusiertes Control nicht noch auf die Taste reagiert.

Da ich aber ja key: word habe, motzt er rum wenn ich key := #0 setzen möchte

stahli 28. Dez 2016 14:36

AW: Pfeiltasten benutzen zum Bewegen eines Shapes
 
Dann ":= 0" siehe a.def...

a.def 28. Dez 2016 14:58

AW: Pfeiltasten benutzen zum Bewegen eines Shapes
 
Zitat:

Zitat von Maurooon (Beitrag 1357349)
Da ich aber ja key: word habe, motzt er rum wenn ich key := #0 setzen möchte

Siehe mein Beitrag.

Maurooon 28. Dez 2016 15:02

AW: Pfeiltasten benutzen zum Bewegen eines Shapes
 
Zitat:

Zitat von stahli (Beitrag 1357350)
Dann ":= 0" siehe a.def...

Dann funktioniert gar nichts mehr.
Ich erkläre mal genau was ich vor hab: Ich habe mehrere Buttons und mit einem der Buttons startet ein "Spiel" mit dem das Ziel ist ein Shape über die Pfeiltasten an eine bestimmte Position zu bringen. Habe ich das Spiel gestartet und ich bewege das Shape, was funktioniert (Wenn ich nicht key := 0 setze). Ich bewege aber während ich das Shape bewege auch noch die Auswahl zwischen den Buttons hin und her und da unter den Buttons wie gesagt auch eine Trackbar ist, nervt das ziemlich...

Zwischenfrage: Ich hab in einem Timer mit dem Intervall 1 an einem bestimmten Punkt ein showmessage('xy') eingebaut. Da das Intervall 1 ist erscheint die Nachricht dann unzählige Male. Kann ich das irgendwie beheben? Mit Timer.enabled := false funktioniert es nicht.

LG

Edit: Erster Teil hat sich erledigt, hatte das key := 0 an der falschen Stelle, oups

a.def 28. Dez 2016 15:05

AW: Pfeiltasten benutzen zum Bewegen eines Shapes
 
Zitat:

Dann funktioniert gar nichts mehr.
Was genau funktioniert nicht? Das Shape bewegt sich doch.

Delphi-Quellcode:
Timer1.Enabled := False;
muss VOR dem ShowMessage('xy'); sein.

Delphi-Quellcode:
// timer1
begin
 if wasauchimmer then
  begin
   // zeige showmessage
   Timer1.Enabled := False; // <==
   showmessage('xy');
  end else
   begin
    // mache etwas anderes
   end;
end;

Maurooon 28. Dez 2016 15:25

AW: Pfeiltasten benutzen zum Bewegen eines Shapes
 
Zitat:

Zitat von a.def (Beitrag 1357354)
Zitat:

Dann funktioniert gar nichts mehr.
Was genau funktioniert nicht? Das Shape bewegt sich doch.

Delphi-Quellcode:
Timer1.Enabled := False;
muss VOR dem ShowMessage('xy'); sein.

Delphi-Quellcode:
// timer1
begin
 if wasauchimmer then
  begin
   // zeige showmessage
   Timer1.Enabled := False; // <==
   showmessage('xy');
  end else
   begin
    // mache etwas anderes
   end;
end;

Super, danke, jetzt funktioniert alles! Vielen Dank, echt! Ihr seid der Hammer!

a.def 28. Dez 2016 15:35

AW: Pfeiltasten benutzen zum Bewegen eines Shapes
 
Du könntest es auch noch so abändern, dass das Schließen des Dialogs im Timer selbigen wieder aktiviert.

Maurooon 29. Dez 2016 17:12

AW: Pfeiltasten benutzen zum Bewegen eines Shapes
 
Ja, stimmt, aber für´s erste reicht mir das. Weißt du zufällig auch, oder sonst jemand, wie man bei Ausführen der exe Datei direkt ein showmessage Befehl ausführen kann - also wo der im Quellcode stehen muss?

LG


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 Uhr.

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