TreeGadget - Gérer la barre de défilement

Programmation d'applications complexes
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

TreeGadget - Gérer la barre de défilement

Message par Progi1984 »

Voilà, j'ai deux trees (PS : je sais que je vous fait chier avec mes treesgadgets :D ).

L'un,le 1, est rempli, L'autre, le 2, vide.
Le un est rempli de manière à ce qu'il y ait une barre de défilement.

Maintenant, je remplis le 2 avec le 1.

Comment puis je placer la barre de défilement exactement à l'endriot où elle était sur l'autre ?
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Ya pas un message pour ça ?
(j'ai pas Win32 là dc je peux pas t'aider...)
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Je pense que c'est avec SetScrollInfo_() ou un truc dans ce genre, mais suis pas sur !
AWEAR
Messages : 264
Inscription : ven. 28/oct./2005 8:20
Localisation : Mayotte ( 976 ), Océan Indien, France

Message par AWEAR »

Il faut utiliser :

Code : Tout sélectionner

position = Getscrollpos_(hwnd, type); on récupère la positon de la barre de défilement
;hwnd est le handle du treegadget ou l'on récupère la positon de la barre de défilement
; type est soit #SB_HORZ pour une barre de défilement horizontale, soit #SB_VERT pour une barre de défilement verticale, ce qui je pense est le cas ici

Setscrollpos_(hwnd, type, position, 15); on positionne la barre de tache à la position voulue
;hwnd est le handle du treegadget à modifier
;type est soit #SB_HORZ, soit #SB_VERT
Voilà normalement c'est ça..
Mais le problème c'est que (chez moi en tout cas), ça modifie bien la barre de défilement, mais pas le treegadget :(
La vie est une rose dont il faut accepter les épines, mais la mienne est fannée, arrosée par le goût de mes larmes. (Soprano)
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Pour un ListView, c'est comme ca :

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 
AWEAR
Messages : 264
Inscription : ven. 28/oct./2005 8:20
Localisation : Mayotte ( 976 ), Océan Indien, France

Message par AWEAR »

Mais lorsque tu place la barre de défilement sur le second tree gadget, est-ce que un élément est séléctionné sur le premier ?
Parce que sinon il suffit de faire :

Code : Tout sélectionner

 Setgadgetstate(#tree1, getgadgetstate(#tree2))
non ?
La vie est une rose dont il faut accepter les épines, mais la mienne est fannée, arrosée par le goût de mes larmes. (Soprano)
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Non, ca marche pas complètement

si ton item choisi se trouve à moitié sur le premier, il te le ramène à la première ligne sur le second
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Je suis pas sûr de bien comprendre, tu veux que les deux s'alignent sur l'action de l'utilisateur?
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Non, l'un est aligné par action de l'utilisateur et le second doit se placer au meme endroit que l'action sur mon action.
AWEAR
Messages : 264
Inscription : ven. 28/oct./2005 8:20
Localisation : Mayotte ( 976 ), Océan Indien, France

Message par AWEAR »

Bon ben voilà j'ai fait ce code (qui marche mais seulement dans ce cas là :?), si c'est comme ça que tu crée ton second treegadget, ou à peu près de la même façon, ben je pense que ça vaut le coup d'essayer, mais par contre, si tu veux changer de position plusieurs fois, ça ne marche pas..


OpenWindow (0, 0, 0, 500, 500, #PB_Window_SystemMenu | #PB_Window_ScreenCentered , "fenetre" ) ; ouvre la fenêtre
CreateGadgetList ( WindowID ()) ; crée une liste de gadget
z.l = TreeGadget (0, 50, 50, 150, 400) ; ajoute le premier treegadget
ButtonGadget (1, 0,0, 50, 50, "ok" ) ; ajoute un bouton pour créer le second treegadget
OpenLibrary (0, "user32.dll" ) ; j'ai que la démo alors on fait avec les moyens du bords
For x = 0 To 50
AddGadgetItem (0, - 1, Str (x)) ; ajoute les éléments au treegadget
Next
Repeat
event = WaitWindowEvent () ; attend un évenement
If event = #PB_Event_Gadget ; si c'est un évenement sur un gadget
If EventGadgetID () = 1 ; et que ce gadget est le bouton
CreateGadgetList ( WindowID ()) ; on crée une liste de gadget
y.l = TreeGadget (2, 300, 50, 150, 400) ; on ajoute le second treegadget
For x = 0 To 50
AddGadgetItem (2, -1, Str (x)) ; on le remplit
Next
pos.l = CallFunction (0, "GetScrollPos" , z, 1) ; on récupere la position sur le premier treegadget
CallFunction (0, "SetScrollPos" , y, 1, pos, 1) ; on l'applique sur le second treegadget
EndIf
EndIf
Until event = #PB_Event_CloseWindow ; quitte quand on clique sur la croix
La vie est une rose dont il faut accepter les épines, mais la mienne est fannée, arrosée par le goût de mes larmes. (Soprano)
Répondre