Ma réponse se base sur une api Window, ce qui n'est pas compatible avec une solution cross-platform.
L'api est
GetScrollPos_
Inutile de la déclarer, c'est inclus dans Purebasic et s'emploie suivant la syntaxe suivante:
GetScrollPos_(GadgetID(Gadget.i), SbValue.i)
Gadget.i : Ton ListIconGadget
SbValue : #SB_VERT ou #SB_HORZ (Scroller Vertical ou Horizontal)
je ne sais pas si c'est la meilleurs solution mais le scroller n'étant pas gérer par la boucle évènementielle, tu devras détourner les évènements reçu par ta fenêtre à un CallBack. Cette procédure devra ensuite renvoyer les évènements à la boucle évènementielle.
Code : Tout sélectionner
Enumeration
#Mainform
#List
#SBScrollPos
EndEnumeration
Procedure CallBack(hWnd, Msg, wParam, lParam)
SetGadgetText(#SBScrollPos, "Scroll. Pos : "+Str(GetScrollPos_(GadgetID(#List), #SB_VERT)))
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(#Mainform,100,100,300,500,"ListIcon Beispiel",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
TextGadget(#SBScrollPos, 5, 10, 100, 20, "")
ListIconGadget(#List, 5, 50, 290,400,"Item",150,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
;Utilisation du callback
SetWindowCallback(@Callback())
For i=1 To 100
AddGadgetItem(#List, -1, "Item "+Str(i))
Next i
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Case #PB_Event_CloseWindow
SetWindowCallback(0) ;Annulation du callback
End
EndSelect
ForEver