Page 1 sur 1

ListIconGadget et Scrollbar

Publié : mar. 13/mai/2008 16:30
par fd
Bonjour,

Je dispose de 2 listicongadgets justaposées (un peu comme la pose de volet sous excel).
Je souhaite en bougeant la scrollbar de droite faire bouger les lignes de la liste de gauche. Pour cela j'utilise :

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 

If GetActiveGadget() = #Li_3
  SetListPos(#Li_1, GetListPos(#Li_3)+1)
EndIf
Peut-on aller plus loin et supprimer (ou masquer) la scrollbar de la liste de gauche ?
En utilisant #LVS_NOSCROLL, comme il n'y a plus de barre, il devient impossible de faire défiler même en forçant la position avec le code ci-dessus ... si quelqu'un à une idée ou déjà cherché, merci de son avis.

Publié : mar. 13/mai/2008 17:14
par Jacobus
Une astuce consiste à planquer la scrollbar sous un container qui sera plus petit que la listicon et donc à ne pas utiliser #LVS_NOSCROLL qui empêche le scrolling. Bon c'est clair qu'il y a mieux mais ça te dépannera le temps de trouver autre chose... :lol:

Code : Tout sélectionner

Enumeration
#Win
#Cont
#Li_1
#Li_2
EndEnumeration

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 

If OpenWindow(#Win,0,0,600,400,"Bi-Scroller",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(#Win))=0
  End 
Else
 
 ContainerGadget(#Cont, 5,20,290,350)
	 ListIconGadget(#Li_1,0,0,310,350,"Glop glop!",290,#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
 CloseGadgetList()
	 ListIconGadget(#Li_2,300,20,295,350,"Pas glop! Pas glop!",290,#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection) 
	 
	For a = 0 To 100
	 AddGadgetItem(#Li_1,-1,Str(a)+"- Ceci est un item")
	 AddGadgetItem(#Li_2,-1,Str(a)+"- Ceci est un item aussi")
	Next 
	
EndIf 

Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_Gadget 
      Select EventGadget() 
      
      Case #Li_2
	      If GetActiveGadget() = #Li_2
				  SetListPos(#Li_1, GetListPos(#Li_2)+1)
				EndIf

      EndSelect 
    Case #PB_Event_CloseWindow :Quit=1 
  EndSelect 
Until Quit=1 
End 

Publié : mar. 13/mai/2008 20:10
par nico
Il y a une api pour cacher la Scrollbar:

Code : Tout sélectionner

ShowScrollBar_(GadgetID(#Li_1), #SB_VERT, #False)

Publié : mer. 14/mai/2008 8:01
par fd
la proposition de nico ne fonctionne pas ... je bidouille donc un container.
Merci