vervollständigt und nicht jeder einzelne Buchstabe. Ich benutze PureBasic 3.94 auf Windows XP Professional.
Hier ist der Beispielcode:
Code: Alles auswählen
Declare AutocompleteComboBox(ComboBox.l)
Enumeration
#Window_Helpverwalt
#Eingaben
#v_abt
EndEnumeration
If OpenWindow(#Window_Helpverwalt, 20,100,1000,850, #PB_Window_SystemMenu | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered ,"Helpdeskeintrag verwalten")
If CreateGadgetList(WindowID())
PanelGadget(#Eingaben,10, 5,930,700)
;-Panel 1 Daten
AddGadgetItem(#Eingaben, 1, "Daten")
ComboBoxGadget(#v_abt, 120, 180, 230, 100, #PB_ComboBox_Editable)
AddGadgetItem(#v_abt,-1,"Verbrauchsabrechnung")
AddGadgetItem(#v_abt,-1,"Einkauf")
AddGadgetItem(#v_abt,-1,"Technik")
;- Ereignisschleife
Repeat
Ende = 0
EventID.l = WaitWindowEvent()
Select EventID.l
Case #PB_EventCloseWindow
Ende = 1
Case #PB_EventGadget
;MessageRequester("active_item.l",Str(Active_Item))
Select EventGadgetID()
Case #v_abt : AutocompleteComboBox(#v_abt)
EndSelect
EndSelect
Until Ende = 1
EndIf
CloseWindow(#Window_Helpverwalt)
EndIf
Procedure AutocompleteComboBox(ComboBox.l)
;- autocomplete specified combobox
Shared LenTextSave.l
Shared GadgetSave.l
; get text entered by user
TextTyped.s = UCase(GetGadgetText(ComboBox))
LenTextTyped.l = Len(TextTyped)
; skip if same gadget and same length or shorter text (backspace?)
If ComboBox = GadgetSave And LenTextTyped <= LenTextSave
LenTextSave = LenTextTyped
ElseIf LenTextTyped
GadgetSave = -1
; search combo contents for item that starts with text entered
MaxItem.l = CountGadgetItems(ComboBox) - 1
For Item.l = 0 To MaxItem
If TextTyped = UCase(Left(GetGadgetItemText(ComboBox, Item, 0), LenTextTyped))
; found matching item
; set combo state
SetGadgetState(ComboBox, Item)
; select added text only
hComboEdit.l = ChildWindowFromPoint_(GadgetID(ComboBox), 5, 5)
SendMessage_(hComboEdit, #EM_SETSEL, LenTextTyped, -1)
; save gadget number and text length for next pass
LenTextSave = LenTextTyped
GadgetSave = ComboBox
; exit For loop
Item = MaxItem
EndIf
Next
EndIf
EndProcedure
Wenn man das Panel entfernt funktioniert das Autocomplete.
Vielleicht hat ja jemand von euch eine Idee, wie man es im Panelgadget nutzen kann.
