Locker un gadget à gauche, à droite, en bas, en haut, centrer horizontalement ou verticalement et redimensionner des gadgets sans se lancer dans des calculs pour chacun de ces gadgets, c'est ce que vous propose LockResize.pbi.
■ UseLockGadget()
Syntaxe
UseLockGadget()
Description
Active LockResize. Il n'y a aucun paramètre à spécifier.
■ LockGadget()
Syntaxe
LockGadget(Window.i, Gadget.i, LockLeft.b, LockTop.b, LockRight.b, LockBottom.b, [[HorizontalCenter.b = #False], [VerticalCenter.b = #False]])
Description
Fixe les bords d'un gadget sur une fenêtre. Chaque gadget locké est mémorisé dans une liste chaînée.
Paramètres
Window et Gadget représentent la Fenêtre et le Gadget concernés.
LockLeft, LockTop, LockRight et LockBottom prennent les valeurs #True ou #False en fonction des bords du gadget que vous voulez locker.
HorizontalCenter et VerticalCenter part défaut sont à #False. Ces deux paramètres permettent de centrer un gadget horizontalement et/ou verticalement sur la fenêtre.
Exemple
Le bouton #Valid de la fenêtre #Mainform est Locké en bas de la fenêtre et centré horizontalement
Code : Tout sélectionner
LockGadget(#Mainform, #Valid , #False, #False, #False, #True, #True)
Syntaxe
UnLockGadget(Window.l, Gadget.l=#True)
Description
Unlock un ou tous les gadget d'une fenêtre.
Window et Gadget représentent la fenêtre et le gadget concerné.
Exemple
Code : Tout sélectionner
UnLockGadget(#MainForm, #Nom)
Code : Tout sélectionner
UnLockGadget(#MainForm)
Syntaxe
FreeLockGadget()
Description
Libère la zone mémoire allouée pour la mémorisation des gadget lockés.
Note : Cette zone mémoire est libérée quand le programme se termine.
■ Include : LockResize.pbi.
Code : Tout sélectionner
;LockResizeGadget.pbi Version 2.00
;
;Create : 07 Aout 2012
;Update : 19 Septembre 2017
;
;OS : Window, Linux (En principe), OSx (En principe)
;PB 4.51, --> 5.61
;
;
;Contributors
; Falsam
;
; Licence : Use As You Like
;
Declare __ResizeWindow()
;
; Initialisation
Procedure UseLockGadget()
Structure Gadget
Window.i
Gadget.i
DeltaLeft.i
DeltaTop.i
DeltaRight.i
DeltaBottom.i
Width.i
Height.i
LockLeft.b
LockTop.b
LockRight.b
LockBottom.b
HorizontalCenter.b
VerticalCenter.b
EndStructure
Global NewMap Windows()
Global NewList LockGadgets.Gadget()
EndProcedure
;
;Fixe (#True) ou pas (#False) les bords d'un gadget sur une fenêtre.
;Centre (#True) ou pas (#False) un gadget horizontalement et/ou verticalement.
Procedure LockGadget(Window.i, Gadget.i, LockLeft.b, LockTop.b, LockRight.b, LockBottom.b, HorizontalCenter.b = #False, VerticalCenter.b = #False)
BindEvent(#PB_Event_SizeWindow, @__ResizeWindow())
AddElement(LockGadgets())
With LockGadgets()
\Gadget = Gadget
\Window = window
\LockLeft = Lockleft
\LockTop = Locktop
\LockRight = Lockright
\LockBottom = LockBottom
\HorizontalCenter = HorizontalCenter
\VerticalCenter = VerticalCenter
\DeltaLeft = GadgetX(Gadget)
\DeltaTop = GadgetY(Gadget)
\DeltaRight = WindowWidth(Window) - GadgetX(Gadget) - GadgetWidth(Gadget)
\DeltaBottom = WindowHeight(Window) - GadgetY(Gadget) - GadgetHeight(Gadget)
\Width = GadgetWidth(Gadget)
\Height = GadgetHeight(Gadget)
EndWith
EndProcedure
;
; Unlock un ou tous(Gadget.l=#True) les gadget d'une fenetre
Procedure UnlockGadget(Window.l, Gadget.l=#True)
ForEach LockGadgets()
If LockGadgets()\Window = Window
If LockGadgets()\Gadget = Gadget Or Gadget=#True
DeleteElement(LockGadgets())
EndIf
EndIf
Next
EndProcedure
;
; Redimensionne les gadgets mémorisés dans la liste.
Procedure __ResizeGadgets(Window.i)
Protected Gadget.i, X.i, Y.i, W.i, H.i
ForEach LockGadgets()
If LockGadgets()\Window = Window
With LockGadgets()
Gadget = \Gadget
X = WindowWidth(window) - \DeltaRight - \Width
Y = WindowHeight(window) - \DeltaBottom - \Height
W = #PB_Ignore
H = #PB_Ignore
If \LockRight = #False
X = #PB_Ignore
EndIf
If \LockBottom = #False
Y = #PB_Ignore
EndIf
If \LockLeft = #True
X = \DeltaLeft
EndIf
If \LockTop = #True
Y = \DeltaTop
EndIf
If \LockRight = #True
W = WindowWidth(Window) - X - \DeltaRight
EndIf
If \LockBottom = #True
H = WindowHeight(Window) - Y - \DeltaBottom
EndIf
If \HorizontalCenter = #True
X = (WindowWidth(Window) - \Width)/2
EndIf
If \VerticalCenter = #True
Y = (WindowHeight(Window) - \Height)/2
EndIf
ResizeGadget(Gadget, X, Y, W, H)
EndWith
EndIf
Next
EndProcedure
Procedure __ResizeWindow()
__ResizeGadgets(EventWindow())
EndProcedure
;
; Détruit la Liste et libère toutes les ressources associées
Procedure FreeLockGadget()
ResetList(LockGadgets())
EndProcedure
LockResize.zip V2.0 (Source 4Ko)
■Exemple.
Code : Tout sélectionner
EnableExplicit
IncludeFile "LockResize.pbi"
Enumeration
#Mainform
#Test1
#Test2
#Test3
#Test4
#Test5
#Test6
EndEnumeration
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget
Procedure Start()
OpenWindow(#Mainform, 0, 0, 500, 400, "Demo LockResizeGadget", WindowStyle)
WindowBounds(#Mainform, 300, 400, #PB_Ignore, #PB_Ignore)
StringGadget(#Test1, 10, 10, 300, 20, "")
ListIconGadget(#Test2, 10, 35, 300, 300,"Col1", 100)
ListViewGadget(#Test3, 320, 10, 100, 325)
ComboBoxGadget(#Test4, 10, 350, 410, 22)
ButtonGadget(#Test5, 430, 10, 50, 22, "Test")
TextGadget(#Test6, 180, 380, 160, 22, "Lock with LockResizeGadget")
SmartWindowRefresh(#Mainform, #True)
LockGadget(#Mainform, #Test1, #True, #True, #True, #False)
LockGadget(#Mainform, #Test2, #True, #True, #True, #True)
LockGadget(#Mainform, #Test3, #False, #True, #True, #True)
LockGadget(#Mainform, #Test4, #True, #False, #True, #True)
LockGadget(#Mainform, #Test5, #False, #True, #True, #False)
LockGadget(#Mainform, #Test6, #False, #False, #False, #True, #True)
EndProcedure
UseLockGadget()
Start()
Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow