Seite 1 von 1

Comboboxgadget AutocompleteComboBox

Verfasst: 21.04.2009 15:33
von progger
Der folgende Code von purearea.net funktioniert bei mir leider nicht mehr.
Verwendete Purebasic-Version: 4.30

Code: Alles auswählen

; English forum: http://www.purebasic.fr/english/viewtopic.php?t=7269&highlight=
; Author: ebs (updated for PB4.00 by blbltheworm)
; Date: 23. August 2003
; OS: Windows
; Demo: No

#NONE = -1 

;- autocomplete specified combobox 
Procedure AutocompleteComboBox(ComboBox.l) 
  Shared LenTextSave.l 
  Shared GadgetSave.l 
  
  ; get text entered by user 
  TextTyped.s = UCase(GetGadgetText(ComboBox)) 
  LenTextTyped.l = Len(TextTyped) 
  
  ; skip if same gadget and same length or shorter text (backspace?) 
  If ComboBox = GadgetSave And LenTextTyped <= LenTextSave 
    LenTextSave = LenTextTyped 
  ElseIf LenTextTyped 
    GadgetSave = #NONE 
    ; search combo contents for item that starts with text entered 
    MaxItem.l = CountGadgetItems(ComboBox) - 1 
    For item.l = 0 To MaxItem 
      If TextTyped = UCase(Left(GetGadgetItemText(ComboBox, item, 0), LenTextTyped)) 
        ; found matching item 
        ; set combo state 
        SetGadgetState(ComboBox, item) 
        ; select added text only 
        hComboEdit.l = ChildWindowFromPoint_(GadgetID(ComboBox), 5, 5) 
        SendMessage_(hComboEdit, #EM_SETSEL, LenTextTyped, -1) 
        ; save gadget number and text length for next pass 
        LenTextSave = LenTextTyped 
        GadgetSave = ComboBox 
        ; exit For loop 
        item = MaxItem 
      EndIf 
    Next 
  EndIf 
EndProcedure 

If OpenWindow(0, 0, 0, 300, 300, "Autocompletion", #PB_Window_SystemMenu|#PB_Window_TitleBar) 
  If CreateGadgetList(WindowID(0)) 
    ComboBoxGadget(0, 10, 10, 200, 100, #PB_ComboBox_Editable) 
    AddGadgetItem(0, -1, "Autocomplete") 
    AddGadgetItem(0, -1, "Bernard") 
    AddGadgetItem(0, -1, "Car") 
    AddGadgetItem(0, -1, "Explorer") 
    AddGadgetItem(0, -1, "Fantastic") 
    AddGadgetItem(0, -1, "General protection error") 
    AddGadgetItem(0, -1, "Purebasic") 
    AddGadgetItem(0, -1, "Purepower") 
    AddGadgetItem(0, -1, "Purevisual") 
    AddGadgetItem(0, -1, "Question") 
    AddGadgetItem(0, -1, "Zas") 
  EndIf 
EndIf 

Repeat 
  Event = WaitWindowEvent() 
  Select Event 
    Case #PB_Event_Gadget 
      If EventGadget() = 0 
        AutocompleteComboBox(0) 
      EndIf 
  EndSelect 
Until Event = #PB_Event_CloseWindow 

End

; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -
; EnableXP
Fehlermeldung: ChildWindowFromPoint_(): Incorrect number of parameters.

Kann mir jemand weiterhelfen? Vielen Dank.

Verfasst: 21.04.2009 15:41
von ts-soft

Code: Alles auswählen

; English forum: http://www.purebasic.fr/english/viewtopic.php?t=7269&highlight=
; Author: ebs (updated for PB4.00 by blbltheworm)
; Date: 23. August 2003
; OS: Windows
; Demo: No

#NONE = -1

;- autocomplete specified combobox
Procedure AutocompleteComboBox(ComboBox.l)
  Shared LenTextSave.l
  Shared GadgetSave.l

  ; get text entered by user
  TextTyped.s = UCase(GetGadgetText(ComboBox))
  LenTextTyped.l = Len(TextTyped)

  ; skip if same gadget and same length or shorter text (backspace?)
  If ComboBox = GadgetSave And LenTextTyped <= LenTextSave
    LenTextSave = LenTextTyped
  ElseIf LenTextTyped
    GadgetSave = #NONE
    ; search combo contents for item that starts with text entered
    MaxItem.l = CountGadgetItems(ComboBox) - 1
    For item.l = 0 To MaxItem
      If TextTyped = UCase(Left(GetGadgetItemText(ComboBox, item, 0), LenTextTyped))
        ; found matching item
        ; set combo state
        SetGadgetState(ComboBox, item)
        ; select added text only
        hComboEdit.l = ChildWindowFromPoint_(GadgetID(ComboBox), 5 | (5 << 32))
        SendMessage_(hComboEdit, #EM_SETSEL, LenTextTyped, -1)
        ; save gadget number and text length for next pass
        LenTextSave = LenTextTyped
        GadgetSave = ComboBox
        ; exit For loop
        item = MaxItem
      EndIf
    Next
  EndIf
EndProcedure

If OpenWindow(0, 0, 0, 300, 300, "Autocompletion", #PB_Window_SystemMenu|#PB_Window_TitleBar)
  ComboBoxGadget(0, 10, 10, 200, 20, #PB_ComboBox_Editable)
  AddGadgetItem(0, -1, "Autocomplete")
  AddGadgetItem(0, -1, "Bernard")
  AddGadgetItem(0, -1, "Car")
  AddGadgetItem(0, -1, "Explorer")
  AddGadgetItem(0, -1, "Fantastic")
  AddGadgetItem(0, -1, "General protection error")
  AddGadgetItem(0, -1, "Purebasic")
  AddGadgetItem(0, -1, "Purepower")
  AddGadgetItem(0, -1, "Purevisual")
  AddGadgetItem(0, -1, "Question")
  AddGadgetItem(0, -1, "Zas")
EndIf

Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
      If EventGadget() = 0
        AutocompleteComboBox(0)
      EndIf
  EndSelect
Until Event = #PB_Event_CloseWindow

End

; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -
; EnableXP

Verfasst: 21.04.2009 20:22
von progger
Vielen Dank für die schnelle Antwort.
Funktioniert!

Verfasst: 23.04.2009 17:12
von Andesdaf
das könnte ich auch mal gebrauchen... habs gleich ganz übersehen.