* * *    
Главная » Статьи » Код PB

Просмотров: 1964 | Дата: 03.07.2025 | Коментарии (0)

Автозаполнение



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










Сайт посвящён языку программирования PureBasic — коммерческий компилятор языка программирования, использующего синтаксис BASIC. Предназначен для создания кроссплатформенных приложений для AmigaOS, Linux, Microsoft Windows, Windows NT и Mac OS X. Разработан компанией Fantaisie Software.