![]() |
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? |
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. |
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 |
Hallo,
stelle im OI, für Form1, das KeyPreview auf True. Schreibe folgendes im KeyDown:
Delphi-Quellcode:
Wird nun also Enter gedrückt, so wird z.B. die OnClick-Prozedur eines Buttons ausgelöst.
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if Key = 13 then Button1Click(Sender); end; Grüsse, Daniel :hi: |
Danke! Werde es gleich mal ausprobieren! Bin ja immer erstaunt wie schnell man hier super Antworten bekommt! Weiter so!
|
Wie krieg ich denn raus welche Nummer eine Taste hat???
Zum Beispiel "a". Kann man das berechnen oder :wiejetzt: Thx! MfG Florian |
kann man.
Delphi-Quellcode:
ord(a)
|
Dann nimm aber besser gleich OnKeyPress. da bekommst du die Taste al Char geliefert.
|
dgeht die enter-Taste denn dabei?
|
#13
Aber was spricht dagegen auf Enter in OnKeyDown zu reagieren und auf die anderen tasten in OnKeyPress? :roll: |
Dass es unpraktisch ist!
|
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. |
Ich finde, wenn man auf Tastatur-Eingaben generell mit OnKeyDown reagiert, ist es am übersichtlichsten.
|
Zitat:
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 |
Meinst du die Position vom TImage??
Delphi-Quellcode:
Ist aber wahrscheinlich nciht das was du meinst, ist zu trivial :mrgreen:
TImage.Left := TImage.Left + 5;
|
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". |
Zitat:
![]() Grüsse, Daniel :hi: |
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:
gelöst. Funktioniert auch wenn ich das mit Buttons mache, aber sonst nicht.
Image1.Left:= Image1.Left +/-5
Ob das Mit OnKeyDown oder mit OnKeyPress gemacht wird ist mir egal. Thx again! MfG Florian |
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) |
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 |
Hallo,
Zitat:
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: |
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 |
Zitat:
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:
Da machst Du halt für alle vier Richtungen. Musst halt nur aufpassen, wann Du welche Buttons wieder Enablen musst.
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; Grüsse, Daniel :hi: |
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:05 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