![]() |
Kasten mit Pfeiltasten bewegen
Hi, ich lerne momentan Delphi mit einem Buch,
und so weit ich das gesehen habe steht dort nichts darüber drin wie man beispielsweise ein rechteck mit den pfeiltasten über die form bewegen kann. Ich habe momentan noch keinen Ansatz wie das funnktionieren könnte, da ich bis jetzt nur Programme mit Button-Klick Methoden programmiert habe. Weil mich das sehhhr interessiert, würd ich gerne jemanden bitten der ein bissl Zeit übrig hat mal einen Quelltext zu posten, bei dem man mit den Pfeiltasten ganz schlicht nen kasten bewegen kann. Ich denke wie das Funktioniert kann ich mir selbst zusammen reimen, Also brauch ich wahrscheinlich nichtmal ne erklärung. Also vielen Dank wenn sich jemand die Zeit nimmt das zu machen. :stupid: :stupid: MfG Spiderpig |
Re: Kasten mit Pfeiltasten bewegen
Am besten benutzt du das OnKeyDown-Ereignis der Form (KeyPreview auf True), überprüfst, welche taste gedrückt wurde(vk_UP, vk_DOWN, vk_LEFT, vk_RIGHT) und bewegst dementsprechend dein Rechteck(Top, left).
Mfg |
Re: Kasten mit Pfeiltasten bewegen
thx für die schnelle antwort, aber momentan kann ich mir nur vorstellen das ich das dann für ein tastenklick um ien pixel verschiebe, aber es soll ja solange rumgeschoben werden, wie ich gedrückt halte
geht das vielleicht mit ner schleife? repeat //verschieben... until keyup(oder so)? |
Re: Kasten mit Pfeiltasten bewegen
Guck dir mal die Ereignisse
Delphi-Quellcode:
an.
Form1.OnKeyDown
Form1.OnKeyPress Form1.OnKeyUp Bei dem Ereignis OnKeyPress wird ein Charakter "Key" übergeben, der deiner Taste entspricht die du drückst:
Delphi-Quellcode:
Dann musst du nur noch vergleichen ob dein Key der nach links oder nach rechtstaste entspricht und auf die Eigenschaft Top bzw Left deiner Box auf dem Desktop einen bestimmen wert draufaddieren bzw abziehen
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin end; |
Re: Kasten mit Pfeiltasten bewegen
Wenn du es ins KeyDown machst, wid die Aktion (wie der Name schon sagt) solange ausgeführt, wie die Taste RUNTERgedrückt (down) ist.
|
Re: Kasten mit Pfeiltasten bewegen
ah okay, das wolt ich genau gerade fragen xD
|
Re: Kasten mit Pfeiltasten bewegen
sry for double post...
Delphi-Quellcode:
das bedeutet doch das er(mein laptop schatz) das ausführt sobald cih irgendeine taste drücke?
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin end; Wie mache ich es dann so das er nur dann die positionswerte von meinem rechteck verändere, wenn ich 'runter' drücke? |
Re: Kasten mit Pfeiltasten bewegen
Liste der Anhänge anzeigen (Anzahl: 1)
Hust ich will dir nicht deinen Drag bzw. Wunsch zum Ausprobieren klauen...aber ich habs mal fix programmiert...
|
Re: Kasten mit Pfeiltasten bewegen
ich nimms dir echt nicht übel, alleinherrscher
danke genau das wollte ich ja!! THX :!: :!: :!: :witch: |
Re: Kasten mit Pfeiltasten bewegen
Zitat:
Gute nacht :-) |
Re: Kasten mit Pfeiltasten bewegen
perfekt, echt geil, soo wie ich mir das vorgestellt hab, danke!
Der erste Schritt auf dem Weg zum Egosmoorhuhn-Shooter ist gemacht :-D |
Re: Kasten mit Pfeiltasten bewegen
..was ich nochned versteh:
ich hab n canvas, aufm punkt xy ist ein viereck und via timer werdn koordinaten abgelesen und wird halt dargestellt. aber wenn ich pfeiltasten drück, dann bewegt sich die markierung von buton zu button bis se an einem editfeld hängenbleibt und dort sich hin und her bewegt.. oo ich mein, momentan ist es eigtl eine testanwendung, ich kann die steuerung auch auf WASD setzen oder so, interessiert mich grad halt.. |
Re: Kasten mit Pfeiltasten bewegen
KeyPreview der Form auf True und bei den Buttons/Edits TabStop auf False setzen
Mfg PS.: Herzlich Willkommen in der DP :dp: |
Re: Kasten mit Pfeiltasten bewegen
hmkay, klappt fast.. bleibt noch am edit hängen..
öhm, wie mach ich eigl buchstaben? weil mit vk_i gehts ned, mit 'i' schon garned und vk_char ist zu allgemein... oo thx ^^ ich fang an, mit nem kumpel n orpg zu basteln.. testen grad eigtl die basics.. auf jedn fall stöber ich schon ne weile hier rum aber nur durch lesen klärt sich ned alles.. ^^ |
Re: Kasten mit Pfeiltasten bewegen
Delphi-Quellcode:
Ich glaube man kann Buchstaben auch mit VK_LBUTTON $01 Linke Maustaste VK_RBUTTON $02 Rechte Maustaste VK_CANCEL $03 Für die Verarbeitung von Control-Break VK_MBUTTON $04 Mittlere Maustaste (Dreitastenmaus) -- $05 Nicht definiert -- $06 Nicht definiert -- $07 Nicht definiert VK_BACK $08 BACKSPACE Taste VK_TAB $09 TAB Taste -- $0A Nicht definiert -- $0B Nicht definiert VK_CLEAR $0C Löschtaste VK_RETURN $0D RETURN Taste -- $0E Nicht definiert -- $0F Nicht definiert VK_SHIFT $10 SHIFT Taste VK_CONTROL $11 STRG Taste VK_MENU $12 ALT Taste VK_PAUSE $13 PAUSE Taste VK_CAPITAL $14 CAPS LOCK Taste -- $15 Reserviert für Kanji-Systeme -- $16 Reserviert für Kanji-Systeme -- $17 Reserviert für Kanji-Systeme -- $18 Reserviert für Kanji-Systeme -- $19 Reserviert für Kanji-Systeme -- $1A Nicht definiert VK_ESCAPE $1B ESC Taste -- $1C Reserviert für Kanji-Systeme -- $1D Reserviert für Kanji-Systeme -- $1E Reserviert für Kanji-Systeme -- $1F Reserviert für Kanji-Systeme VK_SPACE $20 LEERTASTE VK_PRIOR $21 PAGE UP Taste VK_NEXT $22 PAGE DOWN Taste VK_END $23 ENDE Taste VK_HOME $24 POS1 Taste VK_LEFT $25 Cursortaste links VK_UP $26 Cursortaste oben VK_RIGHT $27 Cursortaste rechts VK_DOWN $28 Cursortaste unten VK_SELECT $29 SELECT Taste VK_PRINT $2A Druck VK_EXECUTE $2B Taste Ausführen (EXECUTE) VK_SNAPSHOT $2C PRINT SCREEN Taste für Windows 3.0 und höher VK_INSERT $2D EINFG Taste VK_DELETE $2E ENTF Taste VK_HELP $2F Hilfetaste VK_0 $30 Taste 0 VK_1 $31 Taste 1 VK_2 $32 Taste 2 VK_3 $33 Taste 3 VK_4 $34 Taste 4 VK_5 $35 Taste 5 VK_6 $36 Taste 6 VK_7 $37 Taste 7 VK_8 $38 Taste 8 VK_9 $39 Taste 9 -- $3A Nicht definiert -- $3B Nicht definiert -- $3C Nicht definiert -- $3D Nicht definiert -- $3E Nicht definiert -- $3F Nicht definiert -- $40 Nicht definiert VK_A $41 Taste A VK_B $42 Taste B VK_C $43 Taste C VK_D $44 Taste D VK_E $45 Taste E VK_F $46 Taste F VK_G $47 Taste G VK_H $48 Taste H VK_I $49 Taste I VK_J $4A Taste J VK_K $4B Taste K VK_L $4C Taste L VK_M $4D Taste M VK_N $4E Taste N VK_O $4F Taste O VK_P $50 Taste P VK_Q $51 Taste Q VK_R $52 Taste R VK_S $53 Taste S VK_T $54 Taste T VK_U $55 Taste U VK_V $56 Taste V VK_W $57 Taste W VK_X $58 Taste X VK_Y $59 Taste Y VK_Z $5A Taste Z -- $5B Nicht definiert -- $5C Nicht definiert -- $5D Nicht definiert -- $5E Nicht definiert -- $5F Nicht definiert VK_NUMPAD0 $60 Numerisches Tastenfeld, Taste 0 VK_NUMPAD1 $61 Numerisches Tastenfeld, Taste 1 VK_NUMPAD2 $62 Numerisches Tastenfeld, Taste 2 VK_NUMPAD3 $63 Numerisches Tastenfeld, Taste 3 VK_NUMPAD4 $64 Numerisches Tastenfeld, Taste 4 VK_NUMPAD5 $65 Numerisches Tastenfeld, Taste 5 VK_NUMPAD6 $66 Numerisches Tastenfeld, Taste 6 VK_NUMPAD7 $67 Numerisches Tastenfeld, Taste 7 VK_NUMPAD8 $68 Numerisches Tastenfeld, Taste 8 VK_NUMPAD9 $69 Numerisches Tastenfeld, Taste 9 VK_MULTIPLY $6A Multiplikationstaste VK_ADD $6B Additionstaste VK_SEPARATOR $6C Trenntaste VK_SUBTRACT $6D Subtraktionstaste VK_DECIMAL $6E Dezimaltrenntaste VK_DIVIDE $6F Divisionstaste VK_F1 $70 F1 Taste VK_F2 $71 F2 Taste VK_F3 $72 F3 Taste VK_F4 $73 F4 Taste VK_F5 $74 F5 Taste VK_F6 $75 F6 Taste VK_F7 $76 F7 Taste VK_F8 $77 F8 Taste VK_F9 $78 F9 Taste VK_F10 $79 F10 Taste VK_F11 $7A F11 Taste VK_F12 $7B F12 Taste VK_F13 $7C F13 Taste VK_F14 $7D F14 Taste VK_F15 $7E F15 Taste VK_F16 $7F F16 Taste VK_F17 $80 F17 Taste VK_F18 $81 F18 Taste VK_F19 $82 F19 Taste VK_F20 $83 F20 Taste VK_F21 $84 F21 Taste VK_F22 $85 F22 Taste VK_F23 $86 F23 Taste VK_F24 $87 F24 Taste -- $88 Nicht belegt -- $89 Nicht belegt -- $8A Nicht belegt -- $8B Nicht belegt -- $8C Nicht belegt -- $8D Nicht belegt -- $8E Nicht belegt -- $8F Nicht belegt VK_NUMLOCK $90 NUM LOCK Taste VK_SCROLL $91 SCROLL LOCK Taste
Delphi-Quellcode:
machen (*Bin aber nicht sicher*)
Ord(I)
|
Re: Kasten mit Pfeiltasten bewegen
![]() Zitat:
|
Re: Kasten mit Pfeiltasten bewegen
Zitat:
|
Re: Kasten mit Pfeiltasten bewegen
args, ich glaub, ich lass des jetzt und probier damit später rum, wenn ich dann die echte oberfläche mit directx bastel.
eigtl hatte ich 4 buttons. oben, links, rechts, unten. hab y-achse umgekehrt, also y+1 ist oben. nicht, dass sich wer wundert. weil es geht mir u.a. um echte x/y-koordinaten und die solln schon umgekehrt sein.
Delphi-Quellcode:
irgendwie tun nur die ersten beiden buttons -.- oben und links. und ich raffs ned Oo
procedure TForm1.Button3Click(Sender: TObject);
begin y:=y+1; end; procedure TForm1.Button4Click(Sender: TObject); begin x:=x-1; end; procedure TForm1.Button5Click(Sender: TObject); begin x:=x+1; end; procedure TForm1.Button6Click(Sender: TObject); begin y:=y-1; end; / das mit ord hat an sich geklappt, wurde zumindest von delphi angenommen, aber ich glaub, es war immernoch der start-button, der sich angesprochen gefühlt hat.. ich muss ma was ohne buttons und so machen und dann schaun, weils dann ja tun müsste.. |
Re: Kasten mit Pfeiltasten bewegen
Gibt in der Codelib auch ein Artikel darüber!
|
Re: Kasten mit Pfeiltasten bewegen
1. hab ich in der codelib nix gefunden.
2. ich hab jetzt selbst was neues geschrieben. buttonlos. timage, die sich bewegen soll mit taste drücken/loslassen. und ich hab mich eigtl stark an dem boxprogramm orientiert. aber wenn ich tasten drück, passiert nix. dann hab ich in den timer gesetzt, dass sich bewegen soll, dann tuts. also an sich ist nix falsch, es wird nur ned aktiviert.
Delphi-Quellcode:
image heißt link, weil soll n held sein x)
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) link: TImage; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormKeyRelease(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private-Deklarationen } public x, y :integer; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key=VK_left then x:=-1; if key=VK_right then x:=1; if key=VK_up then y:=-1; if key=VK_down then y:=1; end; procedure TForm1.FormKeyRelease(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key=VK_left then x:=0; if key=VK_right then x:=0; if key=VK_up then y:=0; if key=VK_down then y:=0; end; procedure TForm1.Timer1Timer(Sender: TObject); begin link.left:=link.left+1; if link.Top>425 then link.Top:=-24; if link.Left>425 then link.Left:=-24; if link.Top<-24 then link.Top:=425; if link.Left<-24 then link.Left:=425; link.Top:=link.Top+y; link.Left:=link.Left+x; end; end. mit diesem
Delphi-Quellcode:
bewegt sichs halt generell. daran sieht man halt, dasses an sich tun müsste.
link.left:=link.left+1;
und die 425 sind halt die bildgrenzen, damits nicht ins nix laufen kann.. kann mir nun wer sagen, worans liegt? |
Re: Kasten mit Pfeiltasten bewegen
Liste der Anhänge anzeigen (Anzahl: 1)
Vieleicht kannst du damit was anfangen.
|
Re: Kasten mit Pfeiltasten bewegen
Ich nehme an, es soll sowas wie ein Spiel werden? Dann empfehle ich eher GetAsyncKeystate:
Delphi-Quellcode:
So gibt es dann nicht die Verzögerungen nach dem Drücken der Taste. :dance:
procedure TForm1.Timer1Timer(Sender: TObject);
begin if GetAsyncKeystate(VK_LEFT) < 0 then begin // Taste [<] gedrückt. // GetAsyncKeystate(VK_LEFT) = -1 Shape1.Left := Shape1.Left - 2; end; ... end; |
Re: Kasten mit Pfeiltasten bewegen
Dann steuerst du das Spiel aber auch weiter, wenn es garnicht den Fokus hat.
|
Re: Kasten mit Pfeiltasten bewegen
okay, mit GetAsyncKeystate tuts, dankesehr ^^
weiß trotzdem einer, woran des davor gelegen hat? an sich müsste die andere methode doch auch gehen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 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