Seite 1 von 1
OptionGadget per Tastatur
Verfasst: 09.01.2007 10:57
von uweb
Hallo,
bei z.B. mehreren CheckboxGadgets kann der Anwender die doch per Tabulatur ansteuern und per Leertaste auswählen. Das gleiche bekomme ich mit OptionGadgets (z.B. das Beispiel aus der Hilfe) nicht hin.
Gibt es da einen Trick ?
Verfasst: 09.01.2007 11:45
von Hartmut
Hallo,
was meinst du genau mit OptionGadgets ?
In einer Combobox kann man z.B. mit Cursor (rauf und runter) zwischen den Werten wechseln.
Verfasst: 09.01.2007 12:09
von Kiffi
> was meinst du genau mit OptionGadgets ?
na, halt OptionGadgets eben
In anderen Sprachen heißen die u.a. RadioButtons.
> Combobox kann man z.B. mit Cursor (rauf und runter) zwischen den
> Werten wechseln.
Grüße ... Kiffi
Verfasst: 09.01.2007 12:14
von uweb
Ich habe es für den Moment mit AddKeyboardShurtcut gelöst.
So reagiere ich auf die Up- bzw Down-Taste und wechsle entsprechend das aktive Gadget wenn es eines der betroffenen OptionGadgets ist.
Irgendwie habe ich aber das Gefühl, das ist nicht der optimale Weg.
Verfasst: 09.01.2007 12:31
von edel
Das Problem liegt AFAIK bei den Flags ws_group und ws_tabstop.
Ob es da Abhilfe gibt weiss ich allerdings nicht , da muesstest du
warten bis jemand eine Lösung postet oder mal Google fragen.
Verfasst: 09.01.2007 12:56
von uweb
Danke fuer nichts.
stimmt nicht ganz. Nun weiß ich immerhin, daß ich mich vorläufig damit nicht weiter beschäftigen brauche.
Eine Notlösung habe ich ja.
Also doch : DANKE !
Verfasst: 09.01.2007 19:56
von Fluid Byte
Ich habe es für den Moment mit AddKeyboardShurtcut gelöst.
So reagiere ich auf die Up- bzw Down-Taste und wechsle entsprechend das aktive Gadget wenn es eines der betroffenen OptionGadgets ist.
Irgendwie habe ich aber das Gefühl, das ist nicht der optimale Weg.
Soweit ich weiss ist dieses Problem mit dem jetzigen Stand von PB unlösbar.
Ein kleiner Exkurs:
Die Funktionalität auf du hier anspielst nennt sich "Dialog Box Keyboard Interface" welches es einem erlaubt die Controls und das Fenster selber mittels der Tastatur zu kontrollieren. Wie man es von "handelsüblichen" Windows-basierten Anwedungen kennt.
Eine komplette Liste aller verwendeten Tasten, Tastenkombination sowie ausführliche Details findest du hier:
http://msdn2.microsoft.com/en-us/librar ... oard_iface
Wie der Name schon sagt ist dieses Verhalten eigentlich nur Dialogen vorbehalten aber mit dem Befehl IsDialogMessage_() ist es möglich dieses auch für reguläre Fenster zu aktivieren. Allerdings hat das einen kleinen Nachteil weil das normale Eingabeverhalten ein wenig beeinträchtigt wird (wie genau steht auf MSDN).
Der eigentliche Knackpunkt ist folgender:
Der Befehl IsDialogMessage_() verlangt einen Pointer zu einer MSG Structure welche alle Nachrichten-spezifischen Informationen eines Threads enthält. Also genau wie die Nachrichten die man mittels eines Callbacks abfängt. Mit reiner WinAPI würde das so ausehen:
Code: Alles auswählen
lpMsg.MSG
While GetMessage_(lpMsg,0,0,0)
If IsDialogMessage_(result,lpMsg) = 0
TranslateMessage_(lpMsg)
DispatchMessage_(lpMsg)
EndIf
Wend
Und so das Gegenstück mit nativen PB Befehlen:
Code: Alles auswählen
Repeat
EventID = WaitWindowEvent()
Until EventID = #PB_Event_CloseWindow
Das Behandlen von TranslateMessage_() und DispatchMessage_() würde in diesem Fall WaitWindowEvent() übernemen. Allerdings selbst wenn es mir gelingen würde PB's internen Message-Queue in Echtzeit abzufangen und zu bearbeiten (was mir selbst mit diversen WindowHooks nur bedingt gelungen ist) und den Pointer zur MSG Structure bekommen, müsste ich immer noch einen IF/ENDIF Block hinzufügen und das ist absolut unmöglich. Dazu müsste man PB's Quellcode modfizieren.