AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

wie mit Cursortasten navigieren?

Ein Thema von himitsu · begonnen am 1. Aug 2009 · letzter Beitrag vom 1. Aug 2009
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#1

wie mit Cursortasten navigieren?

  Alt 1. Aug 2009, 17:00
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.

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.

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.359 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: wie mit Cursortasten navigieren?

  Alt 1. Aug 2009, 17:11
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
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: wie mit Cursortasten navigieren?

  Alt 1. Aug 2009, 17:29
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.
The angels have the phone box.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#4

Re: wie mit Cursortasten navigieren?

  Alt 1. Aug 2009, 17:32
hey danke 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ß
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:07 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