Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Ereignis, das beim Druck auf Richtungstasten reagiert (https://www.delphipraxis.net/67293-ereignis-das-beim-druck-auf-richtungstasten-reagiert.html)

Ogridi 12. Apr 2006 14:09


Ereignis, das beim Druck auf Richtungstasten reagiert
 
Hallo,

Ich suche nach einem Ereignis, dass ausgelöst wird, wenn der Nutzer auf eine der Richtungstasten drückt (links / rechts / oben / unten). Ich habe ein Frame implementiert und würde gern noch ne Tastatursteuerung dazu entwerfen; dazu brauch ich aber so ein Ereignis. Und das Standart-OnKeyDown-Event wird bei mir nicht ausgelöst, wenn ich auf eine dieser Tasten drücke. Genauso wenig leider die Message WM_KEYDOWN.

Weiß jemand Rat?

Ogridi

RavenIV 12. Apr 2006 14:41

Re: Ereignis, das beim Druck auf Richtungstasten reagiert
 
aus der Delphi-Hilfe (onKeyDown -> Siehe auch -> Die Verarbeitungsreihenfolge...) zu Delphi7:
Zitat:

Das Formular besitzt eine Eigenschaft KeyPreview, mit der Sie "globale" Tastaturereignisse abfangen können.
also musst du im Formular die Property "KeyPreview" auf TRUE setzen.

marabu 12. Apr 2006 18:29

Re: Ereignis, das beim Druck auf Richtungstasten reagiert
 
Hallo.

Wenn man dem Verweis auf KeyPreview folgt, dann erfährt man folgendes:

Zitat:

Die Einstellung bezieht sich nicht auf Navigationstasten (TAB, Pfeiltasten usw.), da diese keine Tastaturereignisse auslösen. Ähnliches gilt, wenn eine Schaltfläche den Fokus hat oder wenn dessen Eigenschaft Default den Wert true hat. Die Eingabetaste wird von KeyPreview nicht berücksichtigt, da diese kein Tastaturereignis auslöst.
Vermutlich ist es am einfachsten, wenn man die Ereignisbehandlung des Frames anpasst.

Grüße vom marabu

Hawkeye219 12. Apr 2006 18:53

Re: Ereignis, das beim Druck auf Richtungstasten reagiert
 
Hallo,

Vielleicht läßt sich Dein Problem mit Actions lösen. Lege eine Actionlist auf das Frame, füge vier Actions hinzu und trage in die Eigenschaft ShortCut der Actions jeweils eine der Richtungstasten ein. In der Behandlungsroutine OnExecute der Actions kannst Du nun die gewünschte Reaktion auf das Drücken der Richtungstasten programmieren.

Wenn Du das Frame im Formular benutzt, wirst Du feststellen, daß die Richtungstasten immer von der ActionList abgefangen werden. Um dies temporär abzuschalten, setzt Du die Eigenschaft State der Actionlist vorübergehend auf den Wert asSuspended.

Gruß Hawkeye

Ogridi 13. Apr 2006 11:47

Re: Ereignis, das beim Druck auf Richtungstasten reagiert
 
Danke erstmal für die zahlreichen Antworten. Leider komm ich damit aber noch nicht viel weiter :( .

Zitat:

also musst du im Formular die Property "KeyPreview" auf TRUE setzen.
Ich will doch innerhalb des Frames ein Ereignis bekommen. Wenn ich das auf true setze, wird das Ereignis doch gleich an die Form weitergeleitet und ich bekomme es dort, oder? Ich hab's aber auch mal ausprobiert, es funktioniert so leider wirklich nicht.


Zitat:

Vermutlich ist es am einfachsten, wenn man die Ereignisbehandlung des Frames anpasst.
Wie soll ich sie denn anpassen? Eine KeyPreview-Eigenschaft hat der Frame leider nicht.


Zitat:

Vielleicht läßt sich Dein Problem mit Actions lösen. Lege eine Actionlist auf das Frame, füge vier Actions hinzu und trage in die Eigenschaft ShortCut der Actions jeweils eine der Richtungstasten ein.
Da lässt sich bei mir aber keine Richtungstaste eintragen... :gruebel:


Ich verstehe auch nicht so wirklich, weshalb die Richtungstasten nicht als normale Tasten gelten. Sie verändern doch den Fokus gar nicht. Und genügend Steuerelemente (z.B. EditBox, ListBox, ScrollBar etc.) implementieren doch auch Funktionen dafür!

Hawkeye219 13. Apr 2006 11:57

Re: Ereignis, das beim Druck auf Richtungstasten reagiert
 
Zitat:

Zitat von Ogridi
Da lässt sich bei mir aber keine Richtungstaste eintragen...

Die Richtungstasten sind zwar nicht in der Auswahlliste enthalten, man kann sie aber direkt eingeben. Die vor Dir benötigten Namen sind "Links", "Rechts", "Nach oben", "Nach unten" (für eine deutsche Delphi-Version).

Gruß Hawkeye

Ogridi 13. Apr 2006 14:16

Re: Ereignis, das beim Druck auf Richtungstasten reagiert
 
Ich hab grade noch den Tip gekriegt, dass es eine WM_GETDLGCODE - Message gibt. Mit deren Rückgabewert kann man steuern, welche 'Spezial'-Tastaturereignisse an das Control weitergegeben werden.

Also nochmal für alle, die evtl. irgendwann mal mein Problem teilen:

Delphi-Quellcode:
procedure GetDlgCode(var Message : TMessage); message WM_GETDLGCODE;

...

procedure TFrame.GetDlgCode(var Message : TMessage);
begin

  Message.Result := DLGC_WANTARROWS;
 
end;
Wie gesagt, trotzdem vielen Dank für all die Vorschläge! Ist ja auf alle Fälle schonmal schön, dass sich jemand um einen kümmert ;).

@Hawkeye219: In meinem deutschsprachigen Delphi 5 geht das leider nicht; da muss ich mich für einen der Listeneinträge entscheiden...

marabu 13. Apr 2006 18:11

Re: Ereignis, das beim Druck auf Richtungstasten reagiert
 
Die deutsche Version von D5 enthält eine fehlerhafte Unit Consts. Die Literale sind "Nach oben", "Nach unten", "Rechts" und "Left". Wenn ich mich recht erinnere habe ich die Unit damals korrigiert und neu übersetzt.

Grüße vom marabu


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