Position de la barre de défilement

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Position de la barre de défilement

Message par Le Soldat Inconnu »

Ce code permet de connaître la position de la barre de défilment d'un listicongadget et également de changer la position de cette barre de défilment

Code : Tout sélectionner

Procedure.l GetListPos(Gadget.l)
  ProcedureReturn SendMessage_(GadgetID(Gadget), #LVM_GETTOPINDEX, 0, 0)
EndProcedure

Procedure.l SetListPos(Gadget.l, Position.l)
  Protected Pos.point
  SendMessage_(GadgetID(Gadget), #LVM_GETITEMPOSITION, Position - 1, Pos)
  SendMessage_(GadgetID(Gadget), #LVM_SCROLL, 0, Pos\y)
EndProcedure



;- Debut du test

Procedure Remplir()
  ; On rempli la liste
  For n = 0 To 50
    AddGadgetItem(1, -1, "Elément " + Str(n))
  Next
EndProcedure


If OpenWindow(0, 0, 0, 300, 300, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Scroll ListIconGadget")
  If CreateGadgetList(WindowID())
    ListIconGadget(1, 0, 0, 300, 250, "Elements", 275, #PB_ListIcon_FullRowSelect)
    
    ButtonGadget(2, 0, 260, 300, 25, "Actualiser")
    
    Remplir()
    
  Else
    End
  EndIf
Else
  End
EndIf

Repeat
  Event = WaitWindowEvent()
  
  If Event = #PB_EventGadget
    Select EventGadgetID() ; boutons, zone de texte, ...
      Case 2
        Pos = GetListPos(1)
        Debug "Premier élément visible = " + Str(Pos)
        ClearGadgetItemList(1)
        Debug "Liste vidée"
        remplir()
        Debug "Remplissage de la liste"
        SetListPos(1, Pos)
        Debug "on remet à la position d'origine"
    EndSelect
  EndIf
  
Until Event = #PB_EventCloseWindow
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]