Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TAstatur (https://www.delphipraxis.net/61849-tastatur.html)

Frosch 27. Jan 2006 08:14


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!

Schaedel 27. Jan 2006 08:21

Re: TAstatur
 
Bemühe bitte das nächste mal die Suche...
Schau mal unter den Begriffer Virtualkeys ,OnKeydown und OnKeypress nach

ps: Herzlich Willkommen

Sascha_OW 27. Jan 2006 13:54

Re: TAstatur
 
Mach doch einfach OnKeyPress und dann:
Delphi-Quellcode:
If Ord(Key) = x then Image1.Top := Image1.Top - 25;
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

Frosch 27. Jan 2006 18:55

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?

3_of_8 27. Jan 2006 19:02

Re: TAstatur
 
Oder machs mit nem Timer und GetAsyncKeyState(VK_UP)<0.

Frosch 27. Jan 2006 19:15

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:

Delphi-Quellcode:
If Ord(Key) = x then Image1.Top := Image1.Top - 25;

Müsste ich hier jetzt anstelle des X den Virtuellen TAstencode für die Taste einsetzen?


--------------------------------------

Zitat:

ps: Herzlich Willkommen
Danke und Hallo an alle :hi:

3_of_8 27. Jan 2006 19:36

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.

Frosch 27. Jan 2006 20:42

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.

3_of_8 27. Jan 2006 20:48

Re: TAstatur
 
Klick auf deine Form. Gehe unter Ereignisse und klicke doppelt auf OnKeyDown.

Schreib dann rein:

if key=VK_UP then blubb;

hanselmansel 27. Jan 2006 20:49

Re: TAstatur
 
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
If Key = VK_Up then
  ShowMessage('wuppdi!');
end;
MfG,

hanselmansel

3_of_8 27. Jan 2006 20:51

Re: TAstatur
 
Das kommt mir irgendwie bekannt vor.

Es gäbe noch die Möglichkeit mit GetAsyncKeyState, aber die ist leicht komplizierter.

Frosch 27. Jan 2006 21:04

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?

3_of_8 27. Jan 2006 21:07

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.

Frosch 27. Jan 2006 21:16

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!

3_of_8 27. Jan 2006 21:18

Re: TAstatur
 
Genau das macht das Ding doch eh.

inherited 27. Jan 2006 21:44

Re: TAstatur
 
genau so funktioniert es im moment. taste nach oben drücken->wandert nach oben
loslassen->hört auf zu wandern

gfjs 28. Jan 2006 05:51

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

Airblader 28. Jan 2006 08:39

Re: TAstatur
 
Zitat:

Zitat von 3_of_8
Genau das macht das Ding doch eh.

Nein, das KeyDown wird nur beim Drücken einmalig ausgeführt, soweit ich weiß.

@gjs/Frosch

Am besten einen Timer nehmen und reinschreiben:

Delphi-Quellcode:
procedure TForm1....;
begin
   if GetASyncKeyState(VK_UP) < 0 then
      Image1.Top := Image1.Top - 1;
end;
air

3_of_8 28. Jan 2006 10:01

Re: TAstatur
 
Stimmt, du hast Recht.

GetAsyncKeyState habe ich auch schon mal beiläufig erwähnt.

Frosch 28. Jan 2006 15:32

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"

3_of_8 28. Jan 2006 15:42

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.

dino 15. Jul 2006 16:37

Re: TAstatur
 
dieses ganze VK_
wie heißt das dann für die ganzen anderen Knöpfe?
wo finde ich die Liste?

Christian Seehase 15. Jul 2006 16:41

Re: TAstatur
 
Moin Dino,

Zitat:

Zitat von Dino
wo finde ich die Liste?

in der Delphi Hilfe unter "virtuelle Tastencodes"

dino 15. Jul 2006 16:43

Re: TAstatur
 
und was ist a
und was A?
wenn nicht key='a'

Esc ist key=VK_Escape

Christian Seehase 15. Jul 2006 16:48

Re: TAstatur
 
Moin Dino,

Zitat:

Zitat von dino
und was ist a
und was A?

Du darfst nicht Zeichen (a, A) und Taste (A) vermischen.
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 ;-))

dino 15. Jul 2006 16:52

Re: TAstatur
 
danke
und tut mir leid, dass ich mit der Hilfe nicht klar komme

jokerfacehro 23. Jul 2006 11:14

Re: TAstatur
 
hey

wenn du keycodes erfahren willst schreib einfach in onkeydown:
Delphi-Quellcode:
ShowMessage(IntToStr(Key));
und schon kriegste die jeweilige zahl

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

Martin K 23. Jul 2006 11:26

Re: TAstatur
 
Zitat:

Zitat von jokerfacehro
wenn du onkeydown nutzt wird der inhalt solange ausgefürht bis du wieder loslässt
onkeypress führt alles nur einmal aus

Falsch.
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 07:57 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