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

Просмотров: 1822 | Дата: 28.03.2024 | Коментарии (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.