Re: Auto-Resize ou redimensionnement fenetre
Publié : ven. 10/août/2012 10:12
Deux procédures à mettre dans un include ou une DLL ou dans ton code principale.
LockGadget()
Syntaxe
Procedure LockGadget(Window.i, Gadget.i, LockLeft.b, LockTop.b, LockRight.b, LockBottom.b)
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 coordonnées du gadget que vous voulez conserver.
ResizeGadgets()
Syntaxe
ResizeGadgets(Window.i)
Description
Redimensionne les gadgets de la liste contenant les gadgets lockés par la procédure précédente. Cette procédure est à placer dans une boucle évenementielle. Paramètres
Window.i représente la fenêtre concernée.
LockResizeGadget.pbi
je sais, j'ai dit deux procédures alors qu'une troisième se trouve en fin d'include. FreeLockGadget() permet de détruire cette liste pour gagner un peu de mémoire.
Exemple 1 : Redimensionner un gadget uniquement par le cotes droit
Exemple 2 : Redimensionne un gadget par le cotes droit et bas.
Exemple 3 : Plusieurs gadgets à redimensionner.
LockGadget()
Syntaxe
Procedure LockGadget(Window.i, Gadget.i, LockLeft.b, LockTop.b, LockRight.b, LockBottom.b)
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 coordonnées du gadget que vous voulez conserver.
ResizeGadgets()
Syntaxe
ResizeGadgets(Window.i)
Description
Redimensionne les gadgets de la liste contenant les gadgets lockés par la procédure précédente. Cette procédure est à placer dans une boucle évenementielle.
Code : Tout sélectionner
Repeat
Event = WaitWindowEvent(10)
WEvent = EventWindow()
Select Event
Case #PB_Event_SizeWindow
ResizeGadgets(WEvent) ;Redimentionne
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Window.i représente la fenêtre concernée.
LockResizeGadget.pbi
Code : Tout sélectionner
;LockResizeGadget.pbi Version 1.00
;
;Create : 07 Aout 2012
;Update : 07 Aout 2012
;
;OS : Window, Linux (En principe), OSx (En principe)
;PB 4.51, 4.60, 4.70
;
;
;Contributors
; Falsam
;
; Licence : Use As You Like
;
;- Private
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
EndStructure
Global NewList LockGadgets.Gadget()
;-Public
;
;Fixe (#True) ou pas (#False) les bords d'un gadget sur une fenêtre.
Procedure LockGadget(Window.i, Gadget.i, LockLeft.b, LockTop.b, LockRight.b, LockBottom.b)
AddElement(LockGadgets())
With LockGadgets()
\Gadget = Gadget
\Window = window
\LockLeft = Lockleft
\LockTop = Locktop
\LockRight = Lockright
\LockBottom = LockBottom
\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
;
; Redimensionne les gadgets enregistrés dans la liste.
Procedure ResizeGadgets(Window.i)
Protected Gadget.i, X.i, Y.i, W.i, H.i
If ListSize(LockGadgets()) > 0
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 \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
ResizeGadget(Gadget, X, Y, W, H)
EndWith
EndIf
Next
EndIf
EndProcedure
;
; Détruit la Liste et libère toutes les ressources associées
Procedure FreeLockGadget()
ResetList(LockGadgets())
EndProcedure
Exemple 1 : Redimensionner un gadget uniquement par le cotes droit
Code : Tout sélectionner
IncludeFile "LockResizeGadget.pbi"
Enumeration
#Mainform
#Test
EndEnumeration
Define.l Event, WEvent
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget
OpenWindow(#Mainform, 0, 0, 350, 150, "ResizeGadgets - Demo1 - Resize à droite", WindowStyle)
EditorGadget(#Test, 10, 10, 300, 100)
LockGadget(#Mainform, #Test, #True, #True, #True, #False)
Repeat
Event = WaitWindowEvent(10)
WEvent = EventWindow()
Select Event
Case #PB_Event_SizeWindow
ResizeGadgets(WEvent)
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Code : Tout sélectionner
IncludeFile "LockResizeGadget.pbi"
Enumeration
#Mainform
#Test
EndEnumeration
Define.l Event, WEvent
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget
OpenWindow(#Mainform, 0, 0, 350, 150, "ResizeGadgets - Demo1 - Resize à droite/bas", WindowStyle)
EditorGadget(#Test, 10, 10, 300, 100)
LockGadget(#Mainform, #Test, #True, #True, #True, #True)
Repeat
Event = WaitWindowEvent(10)
WEvent = EventWindow()
Select Event
Case #PB_Event_SizeWindow
ResizeGadgets(WEvent)
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Code : Tout sélectionner
EnableExplicit
IncludeFile "LockResizeGadget.pbi"
Enumeration
#Mainform
#Test1
#Test2
#Test3
#Test4
#Test5
EndEnumeration
Define.l Event, WEvent
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget
Procedure Open_MainForm()
OpenWindow(#Mainform, 0, 0, 500, 400, "Demo LockResizeGadget", WindowStyle)
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")
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)
EndProcedure
Open_MainForm()
Repeat
Event = WaitWindowEvent(10)
WEvent = EventWindow()
Select Event
Case #PB_Event_SizeWindow
ResizeGadgets(WEvent) ; Redimensionne
Case #PB_Event_CloseWindow
End
EndSelect
ForEver