SplitterScrolling(Gadget.i)
Publié : sam. 23/mai/2026 10:54
Hello, voici un petit exemple d'interactions de plusieurs gadgets entre eux.
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
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