Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Welche Taste wurde gedrückt (https://www.delphipraxis.net/1613-welche-taste-wurde-gedrueckt.html)

nailor 13. Dez 2002 16:31


Welche Taste wurde gedrückt
 
hi!

mal wieder eine (hoffentlich einfache) frage:

gibts sowas wie keydown für die gesamte anwendung, so dass man alle Tastendrücke gemeldet kriegt, die in der anwendung gemacht werden???

Ach ja: Wenn ja, dann sagt auch was es da gibt :wink:

Christian Seehase 13. Dez 2002 16:54

Moin Kalle,

wenn Du Dich mit formularweit begnügen kannst:

Ein Formular hat die Eigenschaft KeyPreview. Wenn Du die im Objekt Inspektor auf true stellst, kannst Du das OnKeyDown Ereignis des Formulares verwenden.

nailor 13. Dez 2002 21:40

ja, kann ich!

danke für die hilfe. klappt wunderbar!

nailor 20. Dez 2002 14:08

noch eine frage: kann man den tastendruck auch irgendwie verschlucken? so dass nur die form den tastendruck mitkriegt, das aktive control aber nicht?

Minz 20. Dez 2002 14:20

Hätte da ne Idee, hab zwar noch nie sowas gemacht aber:

Störend ist es doch nur bei bestimmten Controls, oder?

Also z.B. bei einem Edit-Feld willst du zum Beispiel was eingeben
ohne das deine Form darauf reagiert. Wenn solche Controls aktiv sind, kannst du ja dann Preview auf false setzen und wenn du das Control verlässt wieder auf true.

Oder hab ich was falsch verstanden? :roll:

Oder du lässt im Control abfragen, welche Tasten gedrückt werden, und die die nur für die Form bestimmt sind, da schreibst du dann entsprechenden Code.

Gruß Minz

Christian Seehase 20. Dez 2002 15:05

Moin Minz,

ich würde mal sagen: umgekehrt.

Als erstes bekommt das Formular die Taste und kann dann "entscheiden" ob es diese selber verarbeiten muss, oder ignorieren kann.

I.d.R. wird man KeyPreview wohl für Sondertasten verwenden.
Ich hab' beispielsweise in meinen Formularen standardmässig KeyPreview auf true, und dann eine Routine, die auf ESC das Formular schliesst.

nailor 20. Dez 2002 15:13

chris hat recht, aber was machst du, wenn du zb bei "leertaste" was machen willst, aber dein focus auf einem button ist. dann wird erst das richtige getan und dann noch der button gedrückt. oder bei einem edit und einer buchstabentaste...

Christian Seehase 20. Dez 2002 15:44

Moin Nailor,

ein Zeichen, dass eine Anwendung empfängt, wird "ganz normal" zugeschickt und landet in der MessageQueue des ensprechenden Fensters.
Wenn Du ein bestimmtes Zeichen nur in der Formularroutine verarbeiten willst, und nicht in einem anderen Control könntest Du es, statt es einfach weiterzureichen auch aus der MessageQueue löschen.
Das hab' ich jetzt zwar nicht ausprobiert, aber es müsste der entsprechende Weg sein.

Für ein Beispiel kannst Du mal hier im Forum nach PeekMessage suchen.

nailor 20. Dez 2002 16:06

Guten Abend!

Ich werd mir mal die ganzen Artikel durchschaun, und hoffe, das sich mein Problem damit erledigt!

Nailor

Werner 20. Dez 2002 23:23

Hallo Nailor,

hier ein Beispiel, das Dein Problem m.E.
löst.

1. KeyPreview für das Formular auf true stellen

2. das Ereignis OnKeyPress auswerten

Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if key=#13 then key:= #0
  else if not (key in [#8, #46, #48 .. #57]) then key:= #0;
end;
RETURN (#13) wird über die Zuweisung key:= #0 unterdrückt.
Es werden nur die Zeichen
Backspace, Punkt und die Ziffern 0...9 durchgelassen.

Mit einer anderen Zuweisung als #0 kann man Zeichen auf ein
anderes umbiegen.

Statt einer Zeichenzuweisung kann man auch eine beliebige
Funktion/Prozedur aufrufen.
Delphi-Quellcode:
if key=#13 then TuWas;
Wird das gesendete Zeichen nicht gebraucht,
muss zusätzlich wieder die Zuweisung auf #0 erfolgen.
Delphi-Quellcode:
if key=#13 then
  begin
    TuWas;
    key:= #0;
  end;
Ich hoffe, das hilft Dir weiter.

Werner


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:20 Uhr.
Seite 1 von 2  1 2      

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