![]() |
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:
LG
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; |
AW: Pfeiltasten benutzen zum Bewegen eines Shapes
Setz in deinem FormCreate-Event mal
Delphi-Quellcode:
dann sollte es klappen. Sicher bin ich mir nicht.
KeyPreview := True
|
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. |
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. |
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.
|
AW: Pfeiltasten benutzen zum Bewegen eines Shapes
Zitat:
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? |
AW: Pfeiltasten benutzen zum Bewegen eines Shapes
Zitat:
Zitat:
|
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. |
AW: Pfeiltasten benutzen zum Bewegen eines Shapes
Zitat:
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; |
AW: Pfeiltasten benutzen zum Bewegen eines Shapes
Zitat:
|
AW: Pfeiltasten benutzen zum Bewegen eines Shapes
Dann ":= 0" siehe a.def...
|
AW: Pfeiltasten benutzen zum Bewegen eines Shapes
Zitat:
|
AW: Pfeiltasten benutzen zum Bewegen eines Shapes
Zitat:
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 |
AW: Pfeiltasten benutzen zum Bewegen eines Shapes
Zitat:
Delphi-Quellcode:
muss VOR dem ShowMessage('xy'); sein.
Timer1.Enabled := False;
Delphi-Quellcode:
// timer1
begin if wasauchimmer then begin // zeige showmessage Timer1.Enabled := False; // <== showmessage('xy'); end else begin // mache etwas anderes end; end; |
AW: Pfeiltasten benutzen zum Bewegen eines Shapes
Zitat:
|
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.
|
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 23:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz