Hallo,
ich möchte über ein String Gadget oder ein editierbares ComboBox Gadget die Eingabe des Benutzers zum Suchen in einer Datenbank nutzen. Alle Suchvorschläge möchte ich wie bei Google anzeigen lassen, sprich die Vorschläge unter dem Gadget anzeigen, wo der Bediener sie dann auswählen kann. Ich habe hier im Forum schon die Autocomplete Funktion für eine ComboBox gefunden, jedoch war es nicht ganz das, was ich suche.
Gruß x3n
Suchvorschläge anzeigen a la Google
Re: Suchvorschläge anzeigen a la Google
mh, das was Du beschreibst, nennt sich eigentlich Autocomplete. Beschreib
mal kurz, was der Code macht, den Du gefunden hast und was er nach Deinen
Vorstellungen machen sollte.
Grüße ... Kiffi
mal kurz, was der Code macht, den Du gefunden hast und was er nach Deinen
Vorstellungen machen sollte.
Grüße ... Kiffi
a²+b²=mc²
Re: Suchvorschläge anzeigen a la Google
Meinst du sowas?
Code: Alles auswählen
;Autor: mesozorn
EnableExplicit
Structure comboboxinfo
cbSize.l
rcItem.RECT
rcButton.RECT
stateButton.l
hwndCombo.l
hwndEdit.l
hwndList.l
EndStructure
Global cbinfo.comboboxinfo
Global oldcomboProc
Define tb
Procedure.i ComboAutoComplete(hWnd, uMsg, wParam, lParam)
Protected result
Protected acg
Protected spos.l
Protected epos.l
Protected matchesfound
Protected x
Protected match
Protected ks
Protected addchar$
Select uMsg
Case #WM_CHAR
acg=GetActiveGadget()
SendMessage_(hwnd, #EM_GETSEL, @spos.l, @epos.l)
matchesfound=0
For x=0 To CountGadgetItems(acg)-1
If LCase(Left(GetGadgetText(acg),spos)+LCase(Chr(wParam)))=LCase(Left(GetGadgetItemText(acg,x),spos+1)) And epos=Len(GetGadgetText(acg))
matchesfound+1:match=x
If matchesfound>1
Break
EndIf
EndIf
Next x
If matchesfound=1
ks=GetKeyState_(#VK_SHIFT)
If ks<2:addchar$=LCase(Chr(wparam))
Else
addchar$=UCase(Chr(wparam))
EndIf
SetGadgetText(acg,Left(GetGadgetText(acg),spos)+addchar$+Mid(GetGadgetItemText(acg,match),spos+2))
SendMessage_(hwnd, #EM_SETSEL, spos+1, epos+999)
result=0
Else
result = CallWindowProc_(oldcomboproc, hWnd, uMsg, wParam, lParam)
EndIf
Default
result = CallWindowProc_(oldcomboproc, hWnd, uMsg, wParam, lParam)
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ComboBoxGadget(1,10,10,200,20,#PB_ComboBox_Editable)
cbinfo\cbsize=SizeOf(comboboxinfo)
GetComboBoxInfo_(GadgetID(1),@cbinfo)
tb=cbinfo.comboboxinfo\hwndedit
oldcomboproc = SetWindowLongPtr_(tb, #GWL_WNDPROC, @ComboAutoComplete())
AddGadgetItem(1, -1, "12345")
AddGadgetItem(1, -1, "23/468")
AddGadgetItem(1, -1, "483~47")
AddGadgetItem(1, -1, "58237")
AddGadgetItem(1, -1, "58.772")
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Re: Suchvorschläge anzeigen a la Google
Ist nicht perfekt und nicht vollständig (halt grade aus den Fingern gesaugt).
Sollte deinem Wunsch aber näher kommen, als die AutoComplete-Codes.
Sollte deinem Wunsch aber näher kommen, als die AutoComplete-Codes.
Code: Alles auswählen
EnableExplicit
Global NewList Daten.s()
AddElement(Daten()):Daten() = "PureBasic ist super"
AddElement(Daten()):Daten() = "Google Such Gadget"
AddElement(Daten()):Daten() = "Das Gadget ist auch super"
AddElement(Daten()):Daten() = "Der faule braune Hund usw..."
Procedure getsearchresults(gadget.i, string.s)
Protected found.i
ClearGadgetItems(gadget)
ResetList(Daten())
While NextElement(Daten())
If FindString(LCase(Daten()),LCase(string),0)
AddGadgetItem(gadget,0,Daten())
found + 1
EndIf
Wend
If found>0
HideGadget(gadget,0)
EndIf
EndProcedure
Enumeration
#Window
EndEnumeration
Enumeration
#StringGadget
#ListViewGadget
EndEnumeration
Define event
OpenWindow(#Window,0,0,400,300,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
StringGadget(#StringGadget,5,5,300,20,"")
ListViewGadget(#ListViewGadget,5,25,300,200)
HideGadget(#ListViewGadget,1)
Repeat
event = WaitWindowEvent(20)
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case #StringGadget
Select EventType()
Case #PB_EventType_Change
If GetGadgetText(#StringGadget)=""
HideGadget(#ListViewGadget,1)
Else
getsearchresults(#ListViewGadget,GetGadgetText(#StringGadget))
EndIf
EndSelect
EndSelect
EndSelect
Until event = #PB_Event_CloseWindow
Re: Suchvorschläge anzeigen a la Google
Danke TomS!!
Das ist genau das, was ich gesucht habe. Vielen Dank nochmals für diese super schnelle Lösung!
P.S.: und dann soll nochmal jemand sagen, dass deutsche Forum sei keine Hilfe mehr..
Das ist genau das, was ich gesucht habe. Vielen Dank nochmals für diese super schnelle Lösung!
P.S.: und dann soll nochmal jemand sagen, dass deutsche Forum sei keine Hilfe mehr..
Re: Suchvorschläge anzeigen a la Google
Freaks Code ist perfekt (nur Windows):
http://www.purebasic.fr/english/viewtop ... toComplete
http://www.purebasic.fr/english/viewtop ... toComplete
Windows 11 - PB 6.03 x64
_________________________________
_________________________________