![]() |
Auf "Pfeil nach unten" reagieren
Hallo Windows Spezialisten,
ich habe eine neue Komponente von TPanel abgeleitet und möchte, dass diese auf die Pfeil Tasten reagiert. Dazu habe ich eine Methode geschrieben, die auf die Message WM_KEYDOWN reagiert.
Delphi-Quellcode:
Das funktioniert auch bei normalen Tasten, aber die Pfeiltasten führen dazu, dass der Focus auf das nächste Control weitergereicht wird. Wie kann ich erreichen, dass meine Komponente die Pfeiltastendrücke sieht?
procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
|
Re: Auf "Pfeil nach unten" reagieren
So wie ich das sehe, müstest du die Message schon von der Anwendung selbst abfangen lassen und dann "von Hand" an das Panel weiterleiten. Ich kann aber auch völlig falsch liegen :-?
|
Re: Auf "Pfeil nach unten" reagieren
Hallo Ultimator,
ich habe im Programm, dass die neue Komponente nutzt, KeyPreview des Formulars auf True gesetzt, und dann das OnKeyDown Event genutzt, um die Steuerung durchzuführen. Aber wenn z.B. nur ein Button auf dem Formular neben meiner Komponente ist, funktioniert es gar nicht. Packe ich eine Listbox dazu, erkennt das Programm dann, wenn der Fokus in der Listbox steht, die gedrückten Pfeil Tasten und die Steuerung funktioniert. Aber ich würde gerne, dass die Komponente selbst erkennt, wenn die Pfeil-Nach-Unten oder irgendeine andere Pfeiltaste gedrückt wurde. |
Re: Auf "Pfeil nach unten" reagieren
als erstes musst du einfach mal TabStop bei deiner Komponente auf True setzen damit diese mit der TabTaste angesprungen werden kann. Und dann noch folgendes in deiner Komponente einbauen
Delphi-Quellcode:
procedure FWMGETDLGCODE(var Msg : TWMGetDlgCode); message WM_GETDLGCODE;
[...] procedure TYourComponent.FWMGETDLGCODE(var Msg : TWMGetDlgCode); begin inherited; Msg.Result := Msg.Result or DLGC_WANTARROWS; end; |
Re: Auf "Pfeil nach unten" reagieren
Moin, moin
hatte mal ein Grid wo ich auf Funktionstasten reagieren mußte. Leider ist die Routine nicht für den ganzen Tastatursatz durchentwickelt (zuwenig Zeit). Sie hängt sich in die MessageLoop und Filtert die Erreignisse anhand der Kennzahl. Da wird überhaupt kein Fokus betrachtet. Denke, dass es Dir helfen kann, auch wenn Du die Codierung der Pfeiltasten noch ermitteln mußt.
Delphi-Quellcode:
Grüße nach Vulkan // Martin
interface
procedure CatchFormMsg (var Msg : TMessage); implemntation procedure TStringGrid.CatchFormMsg(var Msg : TMessage); var MyKeyCode : Word; MyShiftState : TShiftState; const Tick : extended = 0.00; const ms : extended = 100; begin if enabled then if (Msg.Msg = 45102 ) then { KeyPressed } begin begin ShortCutToKey( FKeyShortCut, MyKeyCode, MyShiftState); // Wie reagiert man auf Shift / STRG / Alt ? // // was mach tlparam - noch offen // if (Msg.lParam > -1 ) then if (Msg.wParam = MyKeyCode ) then begin if GetTickCount - Tick > ms then begin Click; Msg.Msg := 0; Msg.wParam := 0; end; Tick := GetTickCount; end; end; end; StoredWndProc(Msg); end; |
Re: Auf "Pfeil nach unten" reagieren
Vielen Dank Martin und an den Adeligen,
werde das gleich mal ausprobieren und mich dann noch einmal melden. |
Re: Auf "Pfeil nach unten" reagieren
Hallo SirThornberry,
der Tip hat super funktioniert. Nachdem ich meiner Komponente mit Hilfe deiner Procedur klar gemcht habe, dass sie auch die Pfeil-Tasten berücksichtigen soll, hat meine Prozedur
Delphi-Quellcode:
auch die Pfeiltasten erkannt und ich kann jetzt darauf reagieren.
procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
@Martin: Ich habe nicht verstanden, auf welche Message die Procedure CatchFormMsg reagiert!? Überschreibt Sie eine gleichnamige Procedure einer Basisklasse oder ist es eine Messageroutine? |
Re: Auf "Pfeil nach unten" reagieren
Moin, eigentlich zu Spätmoin,
Du bist schon auf der richtigen Fährte: Ist ein Messageroutine. Sie fängt unspezifisch jede Message an das Formular ein, wo die Komponente abgelegt ist. Aber wenn die "adlige Lösung" funktioniert, dann ist dies die besser zu dokumentierende. Gute Nacht // Martin |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 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