Seite 1 von 1
Suchvorschläge anzeigen a la Google
Verfasst: 26.10.2010 15:42
von x3n
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
Re: Suchvorschläge anzeigen a la Google
Verfasst: 26.10.2010 16:04
von Kiffi
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
Re: Suchvorschläge anzeigen a la Google
Verfasst: 26.10.2010 16:08
von RSBasic
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
Verfasst: 26.10.2010 16:12
von TomS
Ist nicht perfekt und nicht vollständig (halt grade aus den Fingern gesaugt).
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
Verfasst: 26.10.2010 16:18
von x3n
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..
Re: Suchvorschläge anzeigen a la Google
Verfasst: 26.10.2010 17:47
von marco2007