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 wie mit Cursortasten navigieren? (https://www.delphipraxis.net/137989-wie-mit-cursortasten-navigieren.html)

himitsu 1. Aug 2009 17:00


wie mit Cursortasten navigieren?
 
Es handelt sich um den Dialog aus meinem himXML-Thread:
http://www.delphipraxis.net/internal...064535#1064535

Ich möchte praktisch mit den Pfeiltasten Hoch und Runter die Auswahl ändern können, nur komm ich an keine Tasten-Nachrichten. :cry:

Weder OnKeyDown/OnKeyUp in der Form oder im Button,
noch WM_KEYDOWN/WM_KEYUP via
Delphi-Quellcode:
Procedure WMKeyDown(Var Msg: TWMKeyDown); Message WM_KEYDOWN;
Procedure WMKeyUp (Var Msg: TWMKeyUp);  Message WM_KEYUP;
in der Form bringen etwas.
Auch KeyPreview auf True oder False liefert etwas.


Hab auch schon einige Threads zu sowas gefunden, aber die verwenden alle die schon probierten Tasten-Nachrichten, welche bei mir ja irgendwie nicht funktionieren. :gruebel:

PS: Als Einziges "tab"-aktives Element auf der Form, gibt es einen TButton, welcher den Fokus besitzt.

Im Prinzip möchte ich eigentlich nur die anderen Buttons wie eine TRadioGroup steuern ... nur halt mit Buttons statt RadioButtons. (ausgewähler ist gedrückt)



Ich wollte ja zuerst TButtons nehmen, aber die wollen ja nicht gedrückt bleiben
(da wäre aber die Auswahl einfacher gewesen)

Also hab ich jetzt erstmal TSpeedButtons genommen, nur verfügen diese über keinen TabStop und können auch keinen Fokus erhalten.


[add]
aktuell experimentiere ich mit einem unsichtbarem (ohne Border) Panel hinter jedem SpeedButton, welchem ich die WM_KEY...-Messages eingebaut hab .......... mal sehn was passiert, aber etwas umständlich find ich es schon. :?

jaenicke 1. Aug 2009 17:11

Re: wie mit Cursortasten navigieren?
 
Da gibt es CM_DIALOGKEY oder so, das ist eine der vielen internen Botschaften der VCL, damit sollte das gehen.

// EDIT:
Hier findest du eine Beschreibung einiger dieser Nachrichten: ;-)
http://mh-nexus.de/en/delphimessages.php

Gausi 1. Aug 2009 17:29

Re: wie mit Cursortasten navigieren?
 
Ob jaenickes Lösung klappt, weiß ich nicht (könnte aber gut sein). Alternativ könntest du mit der CM_WANTSpecialkey-Message arbeiten, wie z.B. in diesem Thread in der EE.

himitsu 1. Aug 2009 17:32

Re: wie mit Cursortasten navigieren?
 
hey danke :thumb: und ich wußte doch, daß ich vor kurzem irgendwie sowas schonmal gelesen hatte ... nur fand vorhin nix :?
(OK, hab auch nicht nach "Enter" gesucht und war suchend auf die Pfeiltasten fixiert)

dann in der DP nach Hier im Forum suchenCM_DIALOGKEY gesucht und nochmals in Delphi nach den Definitionen und schon kam was Funktionierendes raus, wozu ich mal nicht halb Delphi verbiegenverschaneln muß :stupid:
Delphi-Quellcode:
Procedure TOptionsSelectForm.CMDialogKey(Var Msg: TCMDialogKey);
  Var i, i2: Integer;

  Begin
    Case Msg.CharCode of
      VK_DOWN, VK_RIGHT: Begin
        i2 := -1;
        For i := ScrollBox1.ControlCount - 1 downto 0 do
          If TSpeedButton(ScrollBox1.Controls[i]).Down Then Begin
            i2 := i;
            Break;
          End;
        i2 := (i2 + 1) mod ScrollBox1.ControlCount;
        TSpeedButton(ScrollBox1.Controls[i2]).Down := True;
        ButtonClick(nil);
        ScrollBox1.ScrollInView(ScrollBox1.Controls[i2]);
      End;
      VK_UP, VK_LEFT: Begin
        i2 := 0;
        For i := ScrollBox1.ControlCount - 1 downto 0 do
          If TSpeedButton(ScrollBox1.Controls[i]).Down Then Begin
            i2 := i;
            Break;
          End;
        i2 := (i2 - 1 + ScrollBox1.ControlCount) mod ScrollBox1.ControlCount;
        TSpeedButton(ScrollBox1.Controls[i2]).Down := True;
        ButtonClick(nil);
        ScrollBox1.ScrollInView(ScrollBox1.Controls[i2]);
      End
      Else Inherited;
    End;
  End;
[add]
mit CM_DIALOGKEY funktioniert's ... es kommt vom Code her auch etwa auf's Selbe wie CM_WANTSPECIALKEY hinaus :)


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