Ich habe folgenden Code von Karl für PB4 angepasst:
Code: Alles auswählen
#comboTest = 0
Procedure cmbAutoComplete(WindowID, Message, wParam, lParam)
Protected comboWert.s, comboIndex.l, comboLang.l, comboStart.l, parameter.l
result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_COMMAND
Select lParam
Case GadgetID(0)
Select (wParam >> 16 & $FFFF)
Case #CBN_EDITUPDATE
comboWert = GetGadgetText(#comboTest)
comboIndex = SendMessage_(lParam, #CB_FINDSTRING, -1, @comboWert)
comboStart = Len(comboWert)
;Länge des eingegebenen Textes
If comboIndex >= 0
SendMessage_(lParam, #CB_SETCURSEL, comboIndex, 0)
comboLang = Len(GetGadgetText(#comboTest))
;Länge des gefundenen Textes
parameter = (comboLang << 16 & $FFFFFFFF) + comboStart
SendMessage_(lParam, #CB_SETEDITSEL, 0, parameter)
EndIf
EndSelect
EndSelect
EndSelect
ProcedureReturn result
EndProcedure
Procedure InitWindow()
;Window zeichnen und ComboBox aus einer externen Datei füllen (jede Zeile = ein Eintrag)
If OpenWindow(0, 0, 0, 400, 200, #PB_Window_SystemMenu, "Test")
If CreateGadgetList(WindowID(0))
ComboBoxGadget(#comboTest, 10, 10, 180, 150, #PB_ComboBox_Editable)
EndIf
ReadFile(0, "cmb.txt")
While ~Eof(0)
AddGadgetItem(0, -1, ReadString())
Wend
CloseFile(0)
EndIf
EndProcedure
InitWindow()
SetWindowCallback(@cmbAutoComplete())
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
End
Wie kann ich den Code so umstricken, dass ich quasi eine Prozedur habe "SetComboBoxGadgetAutoComplete(Gadget)" habe? Ich kenne mich mit den API-Sachen nicht so aus. Der obige Code ist ja nur ein bestimmtes Gadget gedacht.