Autocomplete bei Comboxgadgets
Verfasst: 11.09.2006 17:06
Hallo! Sorry, dass ich meine Anfrage noch einmal poste, aber es scheint, als wäre sie im Originalthread untergegangen.
Ich habe folgenden Code von Karl für PB4 angepasst:
Bei beiden Versionen (für 3.94 und 4.0) kann ich, solange das Gadget erkannt hat, dass man einen Eintrag aus der Liste eingeben möchte und diesen Eintrag markiert in das Gadget schreibt, die Delete- und Backspace-Taste nicht mehr verwenden. Das funktioniert erst wieder, wenn man etwas ins Gadget schreibt, das nicht in der Liste steht. Kann man das noch korrigieren?
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.
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.