Code
#Gdt_AutoComplete=999 ; The AutoComplete GadgetID
Structure AutoComplete
FocusGadgetID.i ; The current Gadget
EndStructure
Global AutoComplete.AutoComplete
Structure AutoCompleteGadgetList
GadgetID.i ; Gadget who Enable Autocomplete
*Function ; Pointer to Refresh Autocmplete Gadget function [No Impemented] ;See RefreshAutoComplete()
EndStructure
Global NewList AutoCompleteGadgetList.AutoCompleteGadgetList()
; Function ton Refresh AutoComplete Gadget
Procedure RefreshAutoComplete()
If IsGadget(#Gdt_AutoComplete)
Selecttxt.s=GetGadgetText(AutoComplete\FocusGadgetID)
ClearGadgetItems(#Gdt_AutoComplete)
Dim Selection.s(10)
Selection(0)="Cinema"
Selection(1)="histoire"
Selection(2)="Purebasic"
Selection(3)="Amiga"
Selection(4)="Aliens"
Debug Selecttxt
For z=0 To 9
Debug LCase(Selection(z))+"=?"+LCase(Selecttxt)
If FindString(LCase(Selection(z)),LCase(Selecttxt),-1)
AddGadgetItem(#Gdt_AutoComplete, -1,Selection(z))
EndIf
Next
SetGadgetState(#Gdt_AutoComplete,0)
EndIf
EndProcedure
Procedure InitAutoComplete(Window.i)
AddKeyboardShortcut(0, #PB_Shortcut_Down, 63999)
AddKeyboardShortcut(0, #PB_Shortcut_Up, 63998)
AddKeyboardShortcut(0, #PB_Shortcut_Return, 63997)
AddKeyboardShortcut(0, #PB_Shortcut_Tab, 63996)
EndProcedure
;Create the AutoComplete Gadget
Procedure AutoCompleteStart(Gadget)
AutoComplete\FocusGadgetID=Gadget
ListViewGadget(#Gdt_AutoComplete, GadgetX(Gadget), GadgetY(Gadget)+GadgetHeight(Gadget), GadgetWidth(Gadget),100)
RefreshAutoComplete()
EndProcedure
;Destory the AutoComplete Gadget
Procedure AutocompleteEnd()
FreeGadget(#Gdt_AutoComplete)
AutoComplete\FocusGadgetID=-1
EndProcedure
;Test if this gadget have autocomplete active
Procedure IsAutoCompleteGadget(GadgetID.l)
ForEach AutoCompleteGadgetList()
If AutoCompleteGadgetList()\GadgetID=GadgetID
ProcedureReturn #True
EndIf
Next
ProcedureReturn #False
EndProcedure
;Active autocomplete on Gadget,
Procedure AddAutoCompleteToGadget(GadgetID.l,*Function)
AddElement(AutoCompleteGadgetList())
AutoCompleteGadgetList()\GadgetID=GadgetID
AutoCompleteGadgetList()\Function=*Function
EndProcedure
Macro AutoCompeteEvent(EventID)
If IsAutoCompleteGadget(GetActiveGadget())
Select EventType()
Case #PB_EventType_Focus
If GetActiveGadget()<>AutoComplete\FocusGadgetID
AutoCompleteStart(EventGadget())
EndIf
Case #PB_EventType_LostFocus
If GetActiveGadget()<>#Gdt_AutoComplete
AutocompleteEnd()
EndIf
Case #PB_EventType_Change
If IsGadget(#Gdt_AutoComplete)=#False
AutoCompleteStart(GetActiveGadget())
EndIf
RefreshAutoComplete()
EndSelect
If EventType()= #PB_EventType_Change
RefreshAutoComplete()
EndIf
EndIf
If (GetActiveGadget()=#Gdt_AutoComplete Or IsAutoCompleteGadget(GetActiveGadget()) )And EventID = #PB_Event_Menu
Select EventMenu()
Case 63999 ; Down Key
SetGadgetState(#Gdt_AutoComplete,GetGadgetState(#Gdt_AutoComplete)+1)
Case 63998 ; Up Key
SetGadgetState(#Gdt_AutoComplete,GetGadgetState(#Gdt_AutoComplete)-1)
Case 63997 ; Enter Key
SetGadgetText(AutoComplete\FocusGadgetID,GetGadgetText(#Gdt_AutoComplete))
AutocompleteEnd()
Case 63996 ; Tab Key
SetGadgetText(AutoComplete\FocusGadgetID,GetGadgetText(#Gdt_AutoComplete))
AutocompleteEnd()
NextGadget=GetActiveGadget()+1
If IsGadget(NextGadget)
SetActiveGadget(NextGadget)
EndIf
EndSelect
EndIf
If EventID = #PB_Event_Gadget And EventGadget()=#Gdt_AutoComplete
SetGadgetText(AutoComplete\FocusGadgetID,GetGadgetText(#Gdt_AutoComplete))
EndIf
EndMacro
;#######
#WindowWidth = 390
#WindowHeight = 350
If OpenWindow(0, 100, 200, #WindowWidth, #WindowHeight, "PureBasic - Gadget Demonstration", #PB_Window_MinimizeGadget)
Top = 10
GadgetHeight = 24
Frame3DGadget(#PB_Any, 10, Top, 370, 290, "Player...") : Top+20
StringGadget(1, 20, 10, 200, GadgetHeight, "")
StringGadget(2, 20, 40, 200, GadgetHeight, "")
StringGadget(3, 20, 70, 200, GadgetHeight, "")
ButtonGadget(8, #WindowWidth-100, #WindowHeight-36, 80, 24, "Quit")
InitAutoComplete(0) ;initalise autocomplete on Window 0
AddAutoCompleteToGadget(1,@RefreshAutoComplete()) ; active Autocomplet on gadget 1
AddAutoCompleteToGadget(3,@RefreshAutoComplete()) ; Active Autocomplet on gadget 2
Repeat
EventID = WaitWindowEvent()
AutoCompeteEvent(EventID)
;#####################
If EventID = #PB_Event_Gadget
Select EventGadget()
Case 0
Case 2
Case 3
Case 8 ; Quit...
EventID = #PB_Event_CloseWindow
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf
End