TAB-Taste im Combobox-Gadget abfangen
-
- Beiträge: 15
- Registriert: 06.01.2005 12:58
- Wohnort: Stuttgart
TAB-Taste im Combobox-Gadget abfangen
Hallo,
ich suche nach einer Moeglichkeit, die TAB-Taste in einem Combobox-Gadget (mit #PB_ComboBox_Editable) abzufangen, um darauf reagieren zu koennen.
Es soll also kein Weiterspringen zum naechsten Gadget durchgefuehrt werden, sondern ich moechte zu einem beliebigen Gadget springen.
Kann mir da jemand einen Tipp geben?
Gruss
Thomas
ich suche nach einer Moeglichkeit, die TAB-Taste in einem Combobox-Gadget (mit #PB_ComboBox_Editable) abzufangen, um darauf reagieren zu koennen.
Es soll also kein Weiterspringen zum naechsten Gadget durchgefuehrt werden, sondern ich moechte zu einem beliebigen Gadget springen.
Kann mir da jemand einen Tipp geben?
Gruss
Thomas
Du hast ins falsche Unterforum gepostet, "Allgemein" wäre richtig gewesen.
Wenn du das mit einem Callback erledigen willst, ok. Dazu habe ich aber keine Lösung. Ich würds auf die Schnelle so machen:
Dieser Windows-API Befehl gibt einen Wert ungleich null zurück, wenn TAB gedrückt wurde. Dann kannst du damit anstellen, was du willst. 
Wenn du das mit einem Callback erledigen willst, ok. Dazu habe ich aber keine Lösung. Ich würds auf die Schnelle so machen:
Code: Alles auswählen
GetAsyncKeyState_(#VK_TAB)

PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
wenn du es damit löst, musst du allerdings bedenken,
dass der fokus zum zeitpunkt deiner reaktion bereits gewechselt HAT,
d.h. das aktuelle gadget ist nicht das betreffende Combobox,
wenn TAB im Combobox gedrückt wurde.
wenn du das per Callback löst, sollte das problem nicht bestehen.
auch ich hab keinen callback-code zur hand... kollege kommt gleich..
dass der fokus zum zeitpunkt deiner reaktion bereits gewechselt HAT,
d.h. das aktuelle gadget ist nicht das betreffende Combobox,
wenn TAB im Combobox gedrückt wurde.
wenn du das per Callback löst, sollte das problem nicht bestehen.
auch ich hab keinen callback-code zur hand... kollege kommt gleich..

Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 15
- Registriert: 06.01.2005 12:58
- Wohnort: Stuttgart
Hi,
mit meinem Callback bekomme ich nur #CBN_KillFocus hin.
Hier mein Beispiel:
Nun entsteht ein KillFocus ja nicht nur mit der Tab-Taste (z. B. auch beim Wechseln in ein anderes Fenster) und das ist mein Problem.
Gibt es da noch etwas zum Ausprobieren?
mit meinem Callback bekomme ich nur #CBN_KillFocus hin.
Hier mein Beispiel:
Code: Alles auswählen
Procedure Callback(hwnd, msg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select msg
Case #WM_COMMAND
;1. Combobox: Ich bekomme ein Killfocus mit der TAB-Taste ODER beim Wechseln mit der Mouse z. B. ins Gadget 2
If (wParam>>16) = #CBN_KILLFOCUS And lParam = GadgetID(1)
SetActiveGadget(0) ;1. Button
EndIf
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 270, 140, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
;1. Button
ButtonGadget(0, 10, 10, 100, 25, "Button 1")
;1. Combobox
ComboBoxGadget(1, 10, 70, 250, 100, #PB_ComboBox_Editable)
AddGadgetItem(1, -1, "ComboBox editable...") : AddGadgetItem(1, -1, "ComboBox editable...")
;2. Combobox
ComboBoxGadget(2, 10, 100, 250, 100)
For a = 1 To 5 : AddGadgetItem(2, -1,"ComboBox item " + Str(a)) : Next a
SetWindowCallback(@Callback())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Nun entsteht ein KillFocus ja nicht nur mit der Tab-Taste (z. B. auch beim Wechseln in ein anderes Fenster) und das ist mein Problem.
Gibt es da noch etwas zum Ausprobieren?
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Vielleicht den Tabstyle entfernen, mit diesem Code von GPI:
und im Callback bei #CBN_EDITCHANGE auf Chr(9) prüfen.
Code: Alles auswählen
Procedure GadgetNoTabJump(GadgetID); - Deactivate the possible to jump to the gadget with tab
;Needed, because i don't want a jump with tab
Style=GetWindowLong_(GadgetID,#GWL_STYLE)
SetWindowLong_(GadgetID,#GWL_STYLE,Style&((-1)-#WS_TABSTOP))
ProcedureReturn GadgetID
EndProcedure
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 15
- Registriert: 06.01.2005 12:58
- Wohnort: Stuttgart
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Thomas Kühn hat geschrieben:Das Ausschalten des Tabstyle funktioniert leider nicht bei einer Combobox mit #PB_ComboBox_Editable.
Code: Alles auswählen
Procedure GadgetNoTabJump(GadgetID); - Deactivate the possible to jump to the gadget with tab
;Needed, because i don't want a jump with tab
Style=GetWindowLong_(GadgetID,#GWL_STYLE)
SetWindowLong_(GadgetID,#GWL_STYLE,Style&((-1)-#WS_TABSTOP))
ProcedureReturn GadgetID
EndProcedure
If OpenWindow(0, 0, 0, 270, 140, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
ComboBoxGadget(0, 10, 10, 250, 100, #PB_ComboBox_Editable)
AddGadgetItem(0, -1, "ComboBox editable...")
GadgetNoTabJump(GadgetID(0))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 15
- Registriert: 06.01.2005 12:58
- Wohnort: Stuttgart
Probier mal ein 2. Gadget hinzuzufuegen, dann solltest Du sehen, dass es nicht funktioniert 
Parallel habe ich Deinen Vorschlag, es mit dem Aendern des Tabstyles zu probieren auch bei einer Combobox ohne #PB_ComboBox_Editable getestet. Ich bekomme im Callback mit #CBN_EDITCHANGE kein Ereignis zum Weiterverarbeiten.

Parallel habe ich Deinen Vorschlag, es mit dem Aendern des Tabstyles zu probieren auch bei einer Combobox ohne #PB_ComboBox_Editable getestet. Ich bekomme im Callback mit #CBN_EDITCHANGE kein Ereignis zum Weiterverarbeiten.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Geht wirklich nicht
Besorge Dir EasyVent.pbi: http://www.purebasic.fr/english/viewtopic.php?t=21136
Gruß
Thomas

Besorge Dir EasyVent.pbi: http://www.purebasic.fr/english/viewtopic.php?t=21136
Code: Alles auswählen
XIncludeFile "EasyVENT.pbi"
Procedure TabEvent(*sender.PB_Sender)
If *sender\wParam = #VK_TAB
Debug "Hallo"
ProcedureReturn 0
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, 0, 0, 270, 140, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
RemoveKeyboardShortcut(0, #PB_Shortcut_All)
ComboBoxGadget(0, 10, 10, 250, 100, #PB_ComboBox_Editable)
AddGadgetItem(0, -1, "ComboBox editable...")
SetEventHandler(GadgetID(0), #OnKeyUp, @TabEvent())
ComboBoxGadget(1, 10, 40, 250, 100)
For a = 1 To 5 : AddGadgetItem(1, -1,"ComboBox item " + Str(a)) : Next a
SetGadgetState(1, 2) ; wir setzen (beginnend bei 0) den dritten Eintrag als aktiven
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 15
- Registriert: 06.01.2005 12:58
- Wohnort: Stuttgart