ListIconGadget et Scrollbar

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
fd
Messages : 70
Inscription : mar. 15/mars/2005 21:41
Localisation : Savoie

ListIconGadget et Scrollbar

Message 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.
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message 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 
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Il y a une api pour cacher la Scrollbar:

Code : Tout sélectionner

ShowScrollBar_(GadgetID(#Li_1), #SB_VERT, #False)
fd
Messages : 70
Inscription : mar. 15/mars/2005 21:41
Localisation : Savoie

Message par fd »

la proposition de nico ne fonctionne pas ... je bidouille donc un container.
Merci
Répondre