Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Kasten mit Pfeiltasten bewegen (https://www.delphipraxis.net/111991-kasten-mit-pfeiltasten-bewegen.html)

Spiderpig_GER_15 12. Apr 2008 22:34


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

Fussball-Robby 12. Apr 2008 22:38

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

Spiderpig_GER_15 12. Apr 2008 22:40

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)?

alleinherrscher 12. Apr 2008 22:42

Re: Kasten mit Pfeiltasten bewegen
 
Guck dir mal die Ereignisse

Delphi-Quellcode:
Form1.OnKeyDown
Form1.OnKeyPress
Form1.OnKeyUp
an.

Bei dem Ereignis OnKeyPress wird ein Charakter "Key" übergeben, der deiner Taste entspricht die du drückst:

Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin

end;
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

Fussball-Robby 12. Apr 2008 22:44

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.

Spiderpig_GER_15 12. Apr 2008 22:46

Re: Kasten mit Pfeiltasten bewegen
 
ah okay, das wolt ich genau gerade fragen xD

Spiderpig_GER_15 12. Apr 2008 22:48

Re: Kasten mit Pfeiltasten bewegen
 
sry for double post...

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin


end;
das bedeutet doch das er(mein laptop schatz) das ausführt sobald cih irgendeine taste drücke?
Wie mache ich es dann so das er nur dann die positionswerte von meinem rechteck verändere, wenn ich 'runter' drücke?

alleinherrscher 12. Apr 2008 22:49

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...

Spiderpig_GER_15 12. Apr 2008 22:57

Re: Kasten mit Pfeiltasten bewegen
 
ich nimms dir echt nicht übel, alleinherrscher

danke genau das wollte ich ja!!


THX :!: :!: :!:

:witch:

alleinherrscher 12. Apr 2008 22:59

Re: Kasten mit Pfeiltasten bewegen
 
Zitat:

Zitat von Spiderpig_GER_15
*drecksangeber grummel ^^*, nee scherz, danke genau das wollte ich ja!!

LOL sorry, so sollte das nicht rüberkommen :-)

Gute nacht :-)

Spiderpig_GER_15 12. Apr 2008 23:02

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

byte 1. Mai 2008 08:49

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..

Fussball-Robby 1. Mai 2008 09:51

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:

byte 1. Mai 2008 10:50

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.. ^^

Mikender 1. Mai 2008 11:26

Re: Kasten mit Pfeiltasten bewegen
 
Delphi-Quellcode:
 
  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
Ich glaube man kann Buchstaben auch mit
Delphi-Quellcode:
Ord(I)
machen (*Bin aber nicht sicher*)

himitsu 1. Mai 2008 12:05

Re: Kasten mit Pfeiltasten bewegen
 
Delphi-Referenz durchsuchenVirtual key codes

Zitat:

Virtual key codes allow you to represent keyboard values for non-alphanumeric keys. Windows defines special constants for each key the user can press. These constants can then be used to refer to the keystroke in Windows API calls or in an OnKeyUp or OnKeyDown event handler.

Most of the virtual key codes are defined in the Windows unit. Additional key codes may be defined in special-purpose Windows wrappers such as the imm unit. For alphabetic keys, you should use ord with an uppercase character, for example, ord( 'M' ).

To create a virtual key code for an alphanumeric value, use the Ord method. For example the virtual key code for ‘7’ is Ord(‘7’).

Nuclear-Ping 1. Mai 2008 13:13

Re: Kasten mit Pfeiltasten bewegen
 
Zitat:

Zitat von alleinherrscher
Hust ich will dir nicht deinen Drag bzw. Wunsch zum Ausprobieren klauen...aber ich habs mal fix programmiert...

Super. Das ist genau das was die Leute wollen und brauchen, um sich richtig mit Delphi auseinandersetzen zu können: Nur paar mal jammern "Ich kriegs nicht hin" und irgendwo findet sich einer, der ihnen das gibt, was sie wollen: Code zum Copy & Paste. Weiter so! :thumb:

byte 1. Mai 2008 14:37

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:
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;
irgendwie tun nur die ersten beiden buttons -.- oben und links. und ich raffs ned Oo

/ 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..

Larsi 1. Mai 2008 15:12

Re: Kasten mit Pfeiltasten bewegen
 
Gibt in der Codelib auch ein Artikel darüber!

byte 2. Mai 2008 17:45

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:
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.
image heißt link, weil soll n held sein x)
mit diesem
Delphi-Quellcode:
link.left:=link.left+1;
bewegt sichs halt generell. daran sieht man halt, dasses an sich tun müsste.
und die 425 sind halt die bildgrenzen, damits nicht ins nix laufen kann..
kann mir nun wer sagen, worans liegt?

Blackheart 2. Mai 2008 18:25

Re: Kasten mit Pfeiltasten bewegen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Vieleicht kannst du damit was anfangen.

Jakob Ullmann 2. Mai 2008 18:47

Re: Kasten mit Pfeiltasten bewegen
 
Ich nehme an, es soll sowas wie ein Spiel werden? Dann empfehle ich eher GetAsyncKeystate:

Delphi-Quellcode:
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;
So gibt es dann nicht die Verzögerungen nach dem Drücken der Taste. :dance:

Fussball-Robby 2. Mai 2008 18:49

Re: Kasten mit Pfeiltasten bewegen
 
Dann steuerst du das Spiel aber auch weiter, wenn es garnicht den Fokus hat.

byte 3. Mai 2008 11:07

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