Ici c'est la commande d'un SplitterGadget() autrement qu'avec la barre de séparation.
Voilà, si ça peut vous servir, faites en bon usage
Code : Tout sélectionner
;-TOP
;======================================
; SplitterScrolling(Gadget.i)
;
; Interaction de plusieurs gadgets
; Chacun des 4 gadgets commande les 3 autres
;
; Le programme consiste à commander un SplitterGadget() de plusieurs manières.
; et indirectement à commander TrackBarGadget() et SpinGadget() de plusieurs manières aussi.
;
; Jacobus 23/05/2026 PB 6.40
; Windows 11 64bits
;======================================
Enumeration
#WIN
#Bouton1
#Bouton2
#Separator
#Adjustmentbar
#TextSplit
#TextLevel
#TextSpinUnite
#SpinUnite
#TextSpinTen
#SpinTen
EndEnumeration
Procedure SplitterScrolling(Gadget.i)
; Dans cette procédure tous les gadgets vont être en interaction
; Pour adapter le pourcentage aux autres gadgets
; il est nécessaire de diviser la hauteur du SplitterGadegt() par 100
; Pour un splitter vertical il faudrait biensûr diviser la largeur par 100
Height = GadgetHeight(#Separator)
Unite.f = Height/100
UniteF$ = StrF(Unite, 2) ; important de prendre 2 chiffres après la virgule pour un ajustement précis
If Gadget = #Adjustmentbar
TrackbarLevel = GetGadgetState(#Adjustmentbar)
SetGadgetState(#Separator, TrackbarLevel * ValF(UniteF$)) ; on multiplie le niveau de la trackbar par l'unité obtenue
Splitlevel = GetGadgetState(#Separator)
SetGadgetText(#TextLevel, "Level = "+Str(TrackbarLevel) + " %")
SetGadgetText(#TextSplit, "Splitter position = "+Str(Splitlevel) + " pixels")
SetGadgetState(#SpinUnite, TrackbarLevel)
SetGadgetState(#SpinTen, TrackbarLevel)
ElseIf Gadget = #SpinUnite
Spinlevel = GetGadgetState(#SpinUnite)
SetGadgetState(#Separator, Spinlevel * ValF(UniteF$)) ; on multiplie le niveau du spingadget par l'unité obtenue
SetGadgetState(#SpinTen, Spinlevel)
Splitlevel = GetGadgetState(#Separator)
SetGadgetText(#TextLevel, "Level = "+Str(Spinlevel) + " %")
SetGadgetText(#TextSplit, "Splitter position = "+Str(Splitlevel) + " pixels")
SetGadgetState(#Adjustmentbar, Spinlevel)
ElseIf Gadget = #SpinTen
SpinTlevel = GetGadgetState(#SpinTen)
SetGadgetState(#Separator, SpinTlevel * ValF(UniteF$)) ; on multiplie le niveau du spingadget par l'unité obtenue
Splitlevel = GetGadgetState(#Separator)
SetGadgetText(#TextLevel, "Level = "+Str(SpinTlevel) + " %")
SetGadgetText(#TextSplit, "Splitter position = "+Str(Splitlevel) + " pixels")
SetGadgetState(#Adjustmentbar, SpinTlevel)
SetGadgetState(#SpinUnite, SpinTlevel)
ElseIf Gadget = #Separator
Splitlevel = GetGadgetState(#Separator)
SetGadgetState(#SpinUnite, Splitlevel/ValF(UniteF$)) ; par contre ici on est obligé de diviser la valeur du splittergadget par l'unité obtenue
SetGadgetState(#SpinTen, Splitlevel/ValF(UniteF$))
SetGadgetState(#Adjustmentbar, Splitlevel/ValF(UniteF$))
TrackbarLevel = GetGadgetState(#Adjustmentbar)
SetGadgetText(#TextLevel, "Level = "+Str(TrackbarLevel) + " %")
SetGadgetText(#TextSplit, "Splitter position = "+Str(Splitlevel) + " pixels")
EndIf
EndProcedure
If OpenWindow(#WIN, 0, 0, 300, 300, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(#Bouton1, 0, 0, 0, 0, "Bouton 1") ; Inutile de préciser la taille ou les coordonnées
ButtonGadget(#Bouton2, 0, 0, 0, 0, "Bouton 2") ; car elles seront déterminées automatiquement
SplitterGadget(#Separator, 5, 5, 290, 130, #Bouton1, #Bouton2, #PB_Splitter_Separator)
TrackBarGadget(#Adjustmentbar, 5, 140, 290, 20, 0, 100) ;de 0 à 100 pour établir un niveau de pourcentage
SetGadgetState(#Adjustmentbar, 50) ; mise à 50% au départ
TextGadget(#TextSpinUnite, 5, 170, 45, 20, "Unité :") ;les ajustements seront précis de 1 en 1
SpinGadget(#SpinUnite, 50, 170, 50, 20, 0, 100, #PB_Spin_Numeric) ;de 0 à 100 pour établir un niveau de pourcentage
SetGadgetState(#SpinUnite, 50)
TextGadget(#TextSpinTen, 120, 170, 45, 20, "Dizaine :") ;les ajustements seront moins précis mais plus rapide de 10 en 10
SpinGadget(#SpinTen, 170, 170, 50, 20, 0, 100, #PB_Spin_Numeric) ;de 0 à 100 pour établir un niveau de pourcentage
SetGadgetState(#SpinTen, 50)
TextGadget(#TextSplit, 5, 200, 290, 20, "Splitter position = ",#PB_Text_Border|#PB_Text_Center)
SetGadgetText(#TextSplit, "Splitter position = "+Str(GetGadgetState(#Separator))+ " pixels")
TextGadget(#TextLevel, 5, 225, 290, 20, "Level = ",#PB_Text_Border|#PB_Text_Center)
SetGadgetText(#TextLevel, "Level = "+Str(GetGadgetState(#Adjustmentbar))+ " %")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
; Case #Bouton1 : Debug "Bouton 1 cliqué !"
;
; Case #Bouton2 : Debug "Bouton 2 cliqué !"
Case #Separator : SplitterScrolling(#Separator)
Case #Adjustmentbar : SplitterScrolling(#Adjustmentbar)
Case #SpinUnite : SplitterScrolling(#SpinUnite)
Case #SpinTen ;{
SpinTen = GetGadgetState(#SpinTen)-1 ;on retire 1 du spin auto
If EventType() = #PB_EventType_Up ;Le bouton 'Haut' a été pressé.
SetGadgetState(#SpinTen, SpinTen + 10) ;on augmente de 10 pour avoir un pas d'une dizaine
ElseIf EventType() = #PB_EventType_Down ;Le bouton 'Bas' a été pressé.
SetGadgetState(#SpinTen, SpinTen - 10) ;on retire 10
EndIf
SplitterScrolling(#SpinTen) ;application du pourcentage
;}
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #WIN : Quit = 1
EndSelect
EndSelect
Until Quit = 1
End
EndIf