![]() |
TAstatur
Hallo,
ich habe eine Frage zu der Tastaturprogrammierung. Wie kann ich es in Delphi programmieren, sodass man, wenn man z.B. den Pfeil nach oben gedrückt hält, sich ein Bild nach oben bewegt und wenn man ihn wieder los lässt, dass das Bild dann anhält. Genauer, in was für eine Prozedur man das ganze dann schreibt und wie die "Abfragenamen" für die einzelnen Tasten lauten. Danke im Vorraus! |
Re: TAstatur
Bemühe bitte das nächste mal die Suche...
Schau mal unter den Begriffer Virtualkeys ,OnKeydown und OnKeypress nach ps: Herzlich Willkommen |
Re: TAstatur
Mach doch einfach OnKeyPress und dann:
Delphi-Quellcode:
Ich weiss nicht genau ob das das ist was du suchst aber so habe ich das verstanden und geht auch sehr leicht das X durch den Wert ersetzen. Der einfachheit würde ich zur Steuerung asdw nehmen wie Counterstrike das auch macht
If Ord(Key) = x then Image1.Top := Image1.Top - 25;
|
Re: TAstatur
Danke schonmal für die Antworten.
Hab ich das Jetzt richtig verstanden, dass wenn man jetzt die Taste X drücken würde, das Bild nach oben laufen würde? |
Re: TAstatur
Oder machs mit nem Timer und GetAsyncKeyState(VK_UP)<0.
|
Re: TAstatur
Ich weiß gerade nicht, ob ich mich zu doof anstelle, oder ob ich mich viellecht falsch versteht.
Also ich kenne das aus VisualBasic so: If keycode = 36 then Image1 = Image1 +1 End If Jetzt weiß ich nur nicht, wie ich so eine Taste in Delphi abfrage. Was auf in Delphi dieses "keycode = 36"ist. Ich habe im Internet eine Liste gefunden mit "Virtuellen Tastencodes", die werden dann denke ich ja irgendwie in der Programmierung vorkommen müssen: Zitat:
-------------------------------------- Zitat:
|
Re: TAstatur
Nein, nein, nein. Das funktioniert nur bei Tasten mit ASCII-Codes.
Du musst das ganze bei OnKeyDown machen, nicht bei OnKeyPress, und dann auch ohne das Ord(). Aber dabei musst du darauf achten, dass deine Komponente auch den Fokus hat. |
Re: TAstatur
Ich glaub ich stell mich gerade verdammt doof an, habe es aber immer noch nicht verstanden.
Könnte mir jemand mal einfach nur die folgende deutsche Zeile nach Delphi übersetzen, dann wäre mir schon seh weitergeholfen. Wenn ich die Taste mit dem Pfeil nach oben drücke, dann... Vielen Dank nochmal und sry für den Aufwand. |
Re: TAstatur
Klick auf deine Form. Gehe unter Ereignisse und klicke doppelt auf OnKeyDown.
Schreib dann rein: if key=VK_UP then blubb; |
Re: TAstatur
Delphi-Quellcode:
MfG,
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin If Key = VK_Up then ShowMessage('wuppdi!'); end; hanselmansel |
Re: TAstatur
Das kommt mir irgendwie bekannt vor.
Es gäbe noch die Möglichkeit mit GetAsyncKeyState, aber die ist leicht komplizierter. |
Re: TAstatur
Super, das war eigentlich so gut wie alles, was ich wissen wollte. Dankeee!
Nur wenn ich es z.B. so haben will, das sich etwas bewegt, solange die Taste gedrückt ist, gehe ich dann unter keypress statt unter keydown? |
Re: TAstatur
Nein. Keypress funktioniert nur bei ASCII Codes. Das sagt dir zum Beispiel, ob es ein a oder ein A ist. Pfeil-Hoch Taste gibts da gar nicht.
Du musst KeyDown hernehmen. Und KeyDown wird auch ausgelöst, wenn du die Taste gedrückt hältst. |
Re: TAstatur
Also gibt es keine Möglichkeit ein (Fischertechnik-)Modell über Hochfahren zu lassen, solange man die TAste drückt und wenn man sie loslässt, dass das ganze dann anhält?
Schade. Naja, egal. Vielen Dank! |
Re: TAstatur
Genau das macht das Ding doch eh.
|
Re: TAstatur
genau so funktioniert es im moment. taste nach oben drücken->wandert nach oben
loslassen->hört auf zu wandern |
Re: TAstatur
Ich habe hier im Büro kein Delphi und kann's nicht ausprobieren, aber als Anfänger sehe ich das so:
onKeyDown reagiert auf das Drücken der Taste, dh. auch wenn ich die Taste gedrückt halte, sollte das Ereignis nur einmal ausgelöst werden. Wenn ich nun erreichen wollte, dass das Ereignis so lange ausgeführt wird, wie ich die Taste gedrückt halte, würde ich mit dem Tastendruck einen Timer starten, der im gewünschten Intervall (d.h. mit der gewünschten Geschwindigkeit) das Bild bewegt. In onKeyUp würde ich den Timer dann wieder disablen. Ich hoffe, ich liege da nicht total falsch?! mfg gfjs |
Re: TAstatur
Zitat:
@gjs/Frosch Am besten einen Timer nehmen und reinschreiben:
Delphi-Quellcode:
air
procedure TForm1....;
begin if GetASyncKeyState(VK_UP) < 0 then Image1.Top := Image1.Top - 1; end; |
Re: TAstatur
Stimmt, du hast Recht.
GetAsyncKeyState habe ich auch schon mal beiläufig erwähnt. |
Re: TAstatur
Sehe ich das richtig, dass wenn eine Taste nicht gerdückt ist bei 1 steht und wenn man dann drückt bei 0, oder aufjedenfall drunter, oder wieso "..._UP) < 0 then"
|
Re: TAstatur
Das 1. Bit ist gesetzt, wenn die Taste gedrückt ist.
Also hast du bei GetAsyncKeyState(VK_UP) wenn die Nach Oben Taste gedrückt ist folgendes Bitmuster: Das letzte Bit hat auch eine Bedeutung, aber das kannst du ignorieren. 1 0 0 0 0 0 0 1 Ansonsten: 0 0 0 0 0 0 0 0 Da das erste Bit immer das Vorzeichenbit ist, ist die Zahl negativ, wenn die Taste gedrückt wurde. |
Re: TAstatur
dieses ganze VK_
wie heißt das dann für die ganzen anderen Knöpfe? wo finde ich die Liste? |
Re: TAstatur
Moin Dino,
Zitat:
|
Re: TAstatur
und was ist a
und was A? wenn nicht key='a' Esc ist key=VK_Escape |
Re: TAstatur
Moin Dino,
Zitat:
Der virtual Keycode bezieht sich nur auf die Tasten. Ord('A') ist der VK für die Taste A (steht übrigens auch in der Hilfe ;-)) |
Re: TAstatur
danke
und tut mir leid, dass ich mit der Hilfe nicht klar komme |
Re: TAstatur
hey
wenn du keycodes erfahren willst schreib einfach in onkeydown:
Delphi-Quellcode:
und schon kriegste die jeweilige zahl
ShowMessage(IntToStr(Key));
wenn du onkeydown nutzt wird der inhalt solange ausgefürht bis du wieder loslässt onkeypress führt alles nur einmal aus so bitte schön |
Re: TAstatur
Zitat:
Auch bei OnKeyPress wird der Inhalt solange ausgeführt, wie die Taste gedrückt ist. Aber warum testet ihr sowas nicht einfach selbst aus, geht doch ganz fix :coder:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin Tag := Tag + 1; Caption := IntToStr(Tag); end;
Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin Tag := Tag + 1; Caption := IntToStr(Tag); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:41 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