Page 1 sur 1

Ascenseurs d'une ListIconGadget

Publié : dim. 11/sept./2011 14:16
par Vlad
Comment récupérer la position des ascenseurs dans une ListIconGadget ?
Je ne connais pas de solution.
Merci à l'avance de votre réponse.

Re: Ascenseurs d'une ListIconGadget

Publié : dim. 11/sept./2011 16:18
par falsam
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
 

Re: Ascenseurs d'une ListIconGadget

Publié : dim. 11/sept./2011 16:23
par falsam
Au cas ou tu voudrais maintenant forcer le scroller à une position, tu trouveras un exemple qui utilise l'API SetScrollPos_

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) 
SetWindowCallback(@Callback())

For i=1 To 100
  AddGadgetItem(#List, -1, "Item "+Str(i)) 
Next i 

;Utilisation de l'api SetScrollPos_
For i=1 To 50
  SetScrollPos_(GadgetID(#List), #SB_VERT, i, #True)
  SendMessage_(GadgetID(#List), #WM_VSCROLL, #SB_LINEDOWN,0)
  Delay(10)  
Next 
      
Repeat 
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      
    Case #PB_Event_CloseWindow
      SetWindowCallback(0) ;Annulation du callback
      End
      
  EndSelect      
ForEver
 

Re: Ascenseurs d'une ListIconGadget

Publié : mar. 13/sept./2011 10:53
par Le Soldat Inconnu