Code : Tout sélectionner
; Exemple de recherche d'élément dans une ListIconGadget
; La recherche s'effectue soit à partir de l'index 0
; soit à partir de la sélection
; soit à partir du String Gadget
; A noter: La recherche est sensible à la casse
; By Nico
Structure LVFINDINFO
flags.l
psz.s
lParam.l
pt.POINT
vkDirection.l
EndStructure
Procedure Recherche(handle.l, ValeurRecherche.s, depart.l)
find.LVFINDINFO
find\flags=#LVFI_PARTIAL
find\psz= ValeurRecherche
index.l=SendMessage_(handle, #LVM_FINDITEM, depart, find)
SetGadgetItemState(4, index, 1)
NbItem = CountGadgetItems(4)
;Message pour récupérer la hauteur d'un item
SendMessage_(handle, #LVM_GETITEMRECT, 0, @prc.RECT)
;Message pour scroller tout au début (item*hauteur)
SendMessage_(handle, #LVM_SCROLL, 0, -NbItem*(prc\bottom-prc\top))
;Message pour scroller sur l'élément recherché
SendMessage_(handle, #LVM_SCROLL, 0, index*(prc\bottom-prc\top))
ProcedureReturn index
EndProcedure
If OpenWindow(0,100,200,380,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Recherche ListIcon Example")
If CreateGadgetList(WindowID())
StringGadget(0, 10, 10, 360, 20, "Entrez un ou plusieurs caractères pour la recherche sur la colonne Valeur", #PB_String_ReadOnly|#PB_String_BorderLess)
ButtonGadget(1, 210, 50, 140, 20, "Rechercher depuis le début")
ButtonGadget(2, 210, 30, 140, 20, "Suivant")
StringGadget(3, 20, 40, 150, 20, "")
hlist.l=ListIconGadget(4,20,80,330,100,"Valeur",100,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(4,1,"Donnée",178)
For x= 0 To 120
AddGadgetItem(4,-1,Str(x)+Chr(10)+"Donnée "+Str(x))
Next x
For x= 0 To 120
AddGadgetItem(4,-1,Str(x)+Chr(10)+Str(x))
Next x
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_EventGadget
Select EventGadgetID()
Case 1 ;rechercher depuis le début
Texte$ = GetGadgetText(3)
ElementTrouve= Recherche(hlist, Texte$, -1)
Case 2 ;suivant
Texte$ = GetGadgetText(3)
ElementTrouve= Recherche(hlist, Texte$, ElementTrouve)
If ElementTrouve < 0
MessageRequester("Info", "Valeur non trouvée")
EndIf
Case 3 ;rechercher depuis le String Gadget
Texte$ = GetGadgetText(3)
If EventType() <> #PB_EventType_Focus
If selection=#False
ElementTrouve= Recherche(hlist, Texte$, -1)
EndIf
EndIf
selection=#False
Case 4 ;retrouve l'index courant pour continuer la recherche
;à partir de l'élément sélectionné
If EventType() = #PB_EventType_LeftClick
#LVM_GETHOTITEM= $1000+61
ElementTrouve.l=SendMessage_(hlist, #LVM_GETHOTITEM, 0, 0)
Texte$ = GetGadgetText(4)
SetGadgetText(3, Texte$)
selection=#True
EndIf
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
EndIf
EndIf