AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Auf "Pfeil nach unten" reagieren

Auf "Pfeil nach unten" reagieren

Ein Thema von MrSpock · begonnen am 20. Dez 2004 · letzter Beitrag vom 21. Dez 2004
Antwort Antwort
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#1

Auf "Pfeil nach unten" reagieren

  Alt 20. Dez 2004, 21:08
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.

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?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Auf "Pfeil nach unten" reagieren

  Alt 20. Dez 2004, 21:36
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
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Auf "Pfeil nach unten" reagieren

  Alt 20. Dez 2004, 23:10
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Auf "Pfeil nach unten" reagieren

  Alt 20. Dez 2004, 23:42
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;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#5

Re: Auf "Pfeil nach unten" reagieren

  Alt 21. Dez 2004, 08:28
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
Martin Schaefer
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Auf "Pfeil nach unten" reagieren

  Alt 21. Dez 2004, 14:04
Vielen Dank Martin und an den Adeligen,

werde das gleich mal ausprobieren und mich dann noch einmal melden.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Auf "Pfeil nach unten" reagieren

  Alt 21. Dez 2004, 21:34
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

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?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#8

Re: Auf "Pfeil nach unten" reagieren

  Alt 21. Dez 2004, 22:50
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
Martin Schaefer
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 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