Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Auf "Pfeil nach unten" reagieren (https://www.delphipraxis.net/36488-auf-pfeil-nach-unten-reagieren.html)

MrSpock 20. Dez 2004 20:08


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:
procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
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?

Ultimator 20. Dez 2004 20:36

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 :-?

MrSpock 20. Dez 2004 22:10

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.

SirThornberry 20. Dez 2004 22:42

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;

mschaefer 21. Dez 2004 07:28

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:
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;
Grüße nach Vulkan // Martin

MrSpock 21. Dez 2004 13:04

Re: Auf "Pfeil nach unten" reagieren
 
Vielen Dank Martin und an den Adeligen,

werde das gleich mal ausprobieren und mich dann noch einmal melden.

MrSpock 21. Dez 2004 20:34

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:
procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
auch die Pfeiltasten erkannt und ich kann jetzt darauf reagieren.

@Martin: Ich habe nicht verstanden, auf welche Message die Procedure CatchFormMsg reagiert!? Überschreibt Sie eine gleichnamige Procedure einer Basisklasse oder ist es eine Messageroutine?

mschaefer 21. Dez 2004 21:50

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 09:02 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