I needed an autocompleting ComboBox and found a tip posted by Saboteur. I simplified his code by using "GetGadgetItemText()". I also made the routine accept the gadget number of the ComboBox to be completed, so it can be used for any number of ComboBoxes.
Code: Select all
;- autocomplete specified combobox
Procedure AutocompleteComboBox(ComboBox.l)
; get text entered by user
TextTyped.s = UCase(GetGadgetText(ComboBox))
LenTextTyped.l = Len(TextTyped)
; done if no text entered
If LenTextTyped
; 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
MyPoint.POINT
hComboEdit.l = ChildWindowFromPoint_(GadgetID(ComboBox), MyPoint);5, 5)
SendMessage_(hComboEdit, #EM_SETSEL, LenTextTyped, -1)
; exit For loop
Item = MaxItem
EndIf
Next
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 300, 300, "Autocompletion", #PB_Window_SystemMenu|#PB_Window_TitleBar)
; If CreateGadgetList(WindowID(0))
ComboBoxGadget(0, 10, 10, 200, 100, #PB_ComboBox_Editable)
AddGadgetItem(0, -1, "Autocomplete")
AddGadgetItem(0, -1, "Bernard")
AddGadgetItem(0, -1, "Car")
AddGadgetItem(0, -1, "Explorer")
AddGadgetItem(0, -1, "Fantastic")
AddGadgetItem(0, -1, "General protection error")
AddGadgetItem(0, -1, "Purebasic")
AddGadgetItem(0, -1, "Purepower")
AddGadgetItem(0, -1, "Purevisual")
AddGadgetItem(0, -1, "Question")
AddGadgetItem(0, -1, "Zas")
; EndIf
EndIf
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
If EventGadget() = 0
AutocompleteComboBox(0)
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow
EndEric

