Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Tasten druck! (https://www.delphipraxis.net/3166-tasten-druck.html)

Bluescreen 26. Feb 2003 16:41


Tasten druck!
 
Hallo,

ich hab da mal wieder ne Frage: Wie kann ich durch einen Tastendruck z.B. Enter ein Ereigniss (z.B. OnClick) auslösen?

Touchdown 26. Feb 2003 16:45

Bei den meisten visuellen Komponenten passiert dies automatisch, da ist es eher ein Problem dies nicht ausführen zu wollen (TCheckbox z.B).

Ansonsten kannst du in OnKeyDown ja einfach auf deine onclick-Prozedure verweisen.

Haegar 26. Feb 2003 16:45

da gibts beim button eine eigenschaft.
"default"...die auf true stellen. dann wird bei selektierter komponente das on-click ausgelöst (mit enter-taste).......bei reaktion auf escape-taste musst du die cancel-eigenschaft auf true setzen!!

gruss haegar

Daniel B 26. Feb 2003 16:53

Hallo,

stelle im OI, für Form1, das KeyPreview auf True.
Schreibe folgendes im KeyDown:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = 13 then
    Button1Click(Sender);
end;
Wird nun also Enter gedrückt, so wird z.B. die OnClick-Prozedur eines Buttons ausgelöst.

Grüsse, Daniel :hi:

Bluescreen 26. Feb 2003 17:02

Danke! Werde es gleich mal ausprobieren! Bin ja immer erstaunt wie schnell man hier super Antworten bekommt! Weiter so!

flomei 27. Feb 2003 13:25

Wie krieg ich denn raus welche Nummer eine Taste hat???

Zum Beispiel "a". Kann man das berechnen oder :wiejetzt:

Thx!
MfG Florian

nailor 27. Feb 2003 13:27

kann man.
Delphi-Quellcode:
ord(a)

Luckie 27. Feb 2003 13:36

Dann nimm aber besser gleich OnKeyPress. da bekommst du die Taste al Char geliefert.

nailor 27. Feb 2003 13:37

dgeht die enter-Taste denn dabei?

Luckie 27. Feb 2003 13:38

#13

Aber was spricht dagegen auf Enter in OnKeyDown zu reagieren und auf die anderen tasten in OnKeyPress? :roll:

nailor 27. Feb 2003 13:40

Dass es unpraktisch ist!

Luckie 27. Feb 2003 13:50

Wie so unpraktisch? :wiejetzt:

Auf ein OnChange von einem Edit reagierts du doch auch nicht in einem OnClick von einem Button.

Ganz im Gegenteil, dadurch wird der Code, denke ich, übersichtlicher.

nailor 27. Feb 2003 16:01

Ich finde, wenn man auf Tastatur-Eingaben generell mit OnKeyDown reagiert, ist es am übersichtlichsten.

flomei 28. Feb 2003 18:56

Zitat:

Zitat von Nailor
kann man.
Delphi-Quellcode:
ord(a)

:wiejetzt: Wo soll ich den Code den hinschreiben??? Versteh ich nicht.

Gibt es das nicht auch in einfach? Noch besser wäre, irgendwer könnte hier nen Code reinsetzen der ein TImage um 5 Pixel nach links (oder rechts) bewegt. (Mit Erklärungen?!? *bettel*)

Thx!

MfG Florian

phlux 28. Feb 2003 19:12

Meinst du die Position vom TImage??
Delphi-Quellcode:
  TImage.Left := TImage.Left + 5;
Ist aber wahrscheinlich nciht das was du meinst, ist zu trivial :mrgreen:

nailor 28. Feb 2003 23:15

Setz bei der Form KeyPreview auf true.

Dann teste im OnKeyDown der Form, ob key = vk_left. Wenn ja verschieb das Bild nach links (und eventuell setz noch key auf #0).

Für andere Tasten schau dir mal die Funktionen ord() und chr() an, und die Hilfe zu "Virtual Key Codes".

Daniel B 28. Feb 2003 23:19

Zitat:

Zitat von Nailor
die Hilfe zu "Virtual Key Codes".

http://www.delphipraxis.net/internal...highlight=vkup

Grüsse, Daniel :hi:

flomei 2. Mär 2003 13:29

Hab jetzt schon alles mögliche ausprobiert aber nix funktioniert.

Kann mir mal bitte einer ein Beispiel geben dass folgendes bewirkt:

Druck auf Taste "a" ---> TImage bewegt sich nach links.
Druck auf Taste "s" ---> TImage bewegt sich nach rechts.

Das mit dem Bewegen hab ich mit
Code:
Image1.Left:= Image1.Left +/-5
gelöst. Funktioniert auch wenn ich das mit Buttons mache, aber sonst nicht.

Ob das Mit OnKeyDown oder mit OnKeyPress gemacht wird ist mir egal.

Thx again!

MfG Florian

Christian Seehase 2. Mär 2003 14:27

Moin Florian,

ich vermute mal stark, dass Du es im OnKeyDown mit

if key = ord('a') then

bzw.

if key =ord('s') then

versucht hast.

Wenn Du statt a A nimmst und statt s S funktioniert's (zumindest bei mir)

flomei 3. Mär 2003 10:53

Gut. So funktioniert es! Wie kann ich eine Begrenzung festlegen?
Zum Beispiel so, dass das TImage nicht mehr als 200 Pixel verschoben werden kann?
Noch ein Problem: Ich hab oben in meiner Form ein paar RadioButtons die zur Auswahl einer Farbe dienen. Mit meinem OnKeyDown Ereignis änder ich aber nur die Buttons, nicht das Image. Ich hab die Buttons jetzt erstmal abgeschaltet, dann bewegt sich auch das Image. Vielleicht kann man das Frame irgendwie vom Rest der Form trennen?!?

Warum der ganze Aufwand hier??? Ich sag es euch: Ich programmiere nämlich grade mein erstes kleines (schlechtes?!) Spiel. Es wird ähnlich wie das Superball Spiel bei SAT1. Nur das man die Bälle anschiessen muss anstatt ihnen auszuweichen.
Mal schauen was ich hinkrieg. :wink:

MfG Florian

Daniel B 3. Mär 2003 15:50

Hallo,
Zitat:

Zitat von flomei
Gut. So funktioniert es! Wie kann ich eine Begrenzung festlegen?
Zum Beispiel so, dass das TImage nicht mehr als 200 Pixel verschoben werden kann?

Das dürfte weniger schwierig werden. Du merkst Dir beim Start des Programmes die aktuelle Position des Image, also Top und Left, dies kannst Du mit globalen Variablen machen. Oder, wenn Du weisst dass das Image immer an der gleichen Stelle ist, dann weisst Du es ja auch so schon.
So, jedes mal wenn Du das Image bewegst, mit Buttons oder sonst was, dann rechnest Du den momentanen Wert und den in der globalen Variable aus. Ist der Unterschied grösser als 200 Pixel, dann Diablest Du die Button zum weiter verscheiben.

Grüsse, Daniel :hi:

flomei 4. Mär 2003 06:58

Beispiel?!? Das krieg nicht hin. Zumindest nicht alleine. Das hört sich auc h ziemlich kompliziert an. Könnte man das nicht mit unsichtbaren keineahnungwasmandanimmt Komponenten machen.

Thx!

MfG Florian

Daniel B 4. Mär 2003 14:44

Zitat:

Zitat von flomei
Beispiel?!? Das krieg nicht hin.

Du willst es nur nicht selber machen! ;)
Also, die globale Variable heisst MyImage.
Setze ein ein Formular ein Image ganz oben links, also mit x und y auf 0. Dann brachst Du noch einen Button und folgenden Code. Ist jetzt nur für nach rechts.
Delphi-Quellcode:
var
  Form1: TForm1;
  MyImage: Integer;

implementation
{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  MyImage := 0;
  MyImage := Image1.Left;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Image1.Left < 20 then
  begin
    Image1.Left := Image1.Left + 1;
  end
  else
  begin
    Button1.Enabled := False;
  end;
end;
Da machst Du halt für alle vier Richtungen. Musst halt nur aufpassen, wann Du welche Buttons wieder Enablen musst.

Grüsse, Daniel :hi:

flomei 5. Mär 2003 10:34

Wenn mein Rechner wieder heile ist probier ich das aus. Aber der Lüfter ist kaputt und deshalb ist er in Reparatur. Heute nachmittag hole ich ihn ab und dann kann ich endlich weiter machen. :coder:
Thx!

MfG Florian :hi:

P.S.: Ich kann das wirklich nicht. Wenn ich wüsste wie das geht würd ich wohl kaum fragen, oder DanielB??? :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 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