Page 1 sur 2
[Résolu]Auto-Resize ou redimensionnement fenetre
Publié : lun. 06/août/2012 10:26
par micam
Bonjour,
Je voudrai redimensionner automatiquement un gadget avec le redimensionnement de la fenêtre, mais le résultat n'est pas fluide.
Dans le code ci-joint on voit dans le debugger que les dimensions du webgadget augmentent et diminuent un coup sur deux.
Si quelqu'un a une idée?
Merci de votre aide.
Code : Tout sélectionner
;{- Enumerations / DataSections
;{ Windows
Enumeration
#Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
#Web_0
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Global window, gadget, gadget_X, gadget_Y, gadget_W, gadget_H
Procedure redimenssionne(window, gadget)
window = SetActiveGadget(window)
gadget_X = GadgetX(gadget)
gadget_Y = GadgetY(gadget)
gadget_w = WindowWidth(gadget)-GadgetWidth(gadget)
gadget_H = WindowHeight(gadget)-GadgetHeight(gadget)
ResizeGadget(gadget, gadget_X, gadget_Y, gadget_W, gadget_H)
EndProcedure
Procedure OpenWindow_Window_0()
If OpenWindow(#Window_0, 450, 200, 400, 400, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
WebGadget(#Web_0, 20, 20, 200, 200, "about:WebGadget_0")
EndIf
EndProcedure
OpenWindow_Window_0()
;{- Event loop
Repeat
Event = WaitWindowEvent()
Select Event
; ///////////////////
Case #PB_Event_SizeWindow
redimenssionne(#Window_0,#Web_0)
Debug "Largeur = " + Str(gadget_W) + " Hauteur = " + Str(gadget_H)
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
If EventGadget = #Web_0
EndIf
; ////////////////////////
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #Window_0
CloseWindow(#Window_0)
Break
EndIf
EndSelect
ForEver
;
;}
Re: Auto-Resize ou redimensionnement fenetre
Publié : lun. 06/août/2012 10:37
par jbernard13
Salut
tu as la libs de gnozal Pureresize qui facile a utiliser
http://gnozal.ucoz.com/
Re: Auto-Resize ou redimensionnement fenetre
Publié : lun. 06/août/2012 12:09
par Ar-S
faits une recherche du coté des callback, ça devrait aider. Sinon c'est vrai que la lib de Gnozal peut s'avérer utile.
N'as tu pas fait une erreur ici ?
gadget_w = WindowWidth(gadget)-GadgetWidth(gadget)
gadget_H = WindowHeight(gadget)-GadgetHeight(gadget
Re: Auto-Resize ou redimensionnement fenetre
Publié : lun. 06/août/2012 12:33
par falsam
Bonjour. Dans ta méthode, Je pense que tu dois tenir compte de la largeur entre le bord droit de ton webgadget et le bord droit de la fenêtre. Cette largeur étant toujours fixe. Cette remarque s'applique aussi entre le bord bas du webgadget et le bas de ta fenêtre.
Code : Tout sélectionner
;{- Enumerations / DataSections
;{ Windows
Enumeration
#Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
#Web_0
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Global window, gadget, gadget_X, gadget_Y, gadget_W, gadget_H, Delta_W, Delta_H
Procedure redimenssionne(window, gadget)
;window = SetActiveGadget(window)
gadget_X = GadgetX(gadget) ;#Pb_Ignore c'est aussi bien
gadget_Y = GadgetY(gadget) ;#Pb_Ignore c'est aussi bien
gadget_w = WindowWidth(Window)-Delta_W
gadget_H = WindowHeight(Window)-Delta_H
;Largeur et hauteur minimum
If gadget_w < 60
gadget_w=60
EndIf
If gadget_h < 60
gadget_h=60
EndIf
ResizeGadget(gadget, gadget_X, gadget_Y, gadget_W, gadget_H)
EndProcedure
Procedure OpenWindow_Window_0()
If OpenWindow(#Window_0, 450, 200, 400, 400, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
WebGadget(#Web_0, 20, 20, 200, 200, "about:WebGadget_0")
EndIf
EndProcedure
OpenWindow_Window_0()
;Calcul du Delta entre le bord droit du Web Gadget et le bord droit de la fenetre
Delta_W=WindowWidth(#Window_0)-GadgetX(#Web_0)-GadgetWidth(#Web_0)
Delta_H=WindowHeight(#Window_0)-GadgetY(#Web_0)-GadgetHeight(#Web_0)
;{- Event loop
Repeat
Event = WaitWindowEvent()
EventWindow = EventWindow()
EventGadget = EventGadget()
EventType = EventType()
Select Event
; ///////////////////
Case #PB_Event_SizeWindow
redimenssionne(#Window_0, #Web_0)
Debug "Largeur = " + Str(gadget_W) + " Hauteur = " + Str(gadget_H)
Case #PB_Event_Gadget
If EventGadget = #Web_0
EndIf
; ////////////////////////
Case #PB_Event_CloseWindow
If EventWindow = #Window_0
CloseWindow(#Window_0)
Break
EndIf
EndSelect
ForEver
;
;}
On peut faire surement mieux
PS : J'ai tenu compte de la remarque d'Ar-s.
Re: Auto-Resize ou redimensionnement fenetre
Publié : lun. 06/août/2012 15:28
par micam
Bonjour Falsam,
ta solution marche très bien.
Une chose que je ne comprend pas :
Pourquoi as-tu mis le calcul du delta après OpenWindow() ?
OpenWindow_Window_0()
;Calcul du Delta entre le bord droit du Web Gadget et le bord droit de la fenetre
Delta_W=WindowWidth(#Window_0)-GadgetX(#Web_0)-GadgetWidth(#Web_0)
Delta_H=WindowHeight(#Window_0)-GadgetY(#Web_0)-GadgetHeight(#Web_0)
Merci.
Re: Auto-Resize ou redimensionnement fenetre
Publié : lun. 06/août/2012 15:35
par falsam
micam a écrit :
Pourquoi as-tu mis le calcul du delta après OpenWindow() ?
OpenWindow_Window_0()
et pourquoi pas ? ...... Ce calcul peut très bien se faire au sein de ta procédure d'ouverture de la fenêtre.
Code : Tout sélectionner
Procedure OpenWindow_Window_0()
If OpenWindow(#Window_0, 450, 200, 400, 400, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
WebGadget(#Web_0, 20, 20, 200, 200, "about:WebGadget_0")
EndIf
;Calcul du Delta entre le bord droit du Web Gadget et le bord droit de la fenetre
Delta_W=WindowWidth(#Window_0)-GadgetX(#Web_0)-GadgetWidth(#Web_0)
Delta_H=WindowHeight(#Window_0)-GadgetY(#Web_0)-GadgetHeight(#Web_0)
EndProcedure
Re: Auto-Resize ou redimensionnement fenetre
Publié : mar. 07/août/2012 7:06
par kernadec
bonjour
petit essai pour le fun
Cordialement
Code : Tout sélectionner
;{- Enumerations / DataSections
;{ Windows
Enumeration
#Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
#Web_0
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure OpenWindow_Window_0()
If OpenWindow(#Window_0, 450, 200, 400, 400, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
WebGadget(#Web_0, 20, 20, WindowWidth(#Window_0)/2, WindowHeight(#Window_0)/2, "about:WebGadget_0")
EndIf
EndProcedure
OpenWindow_Window_0()
;{- Event loop
Repeat
Event = WaitWindowEvent()
EventWindow = EventWindow()
EventGadget = EventGadget()
EventType = EventType()
Select Event
; ///////////////////
Case #PB_Event_SizeWindow
ResizeGadget(#Web_0, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_0)/2, WindowHeight(#Window_0)/2)
Case #PB_Event_Gadget
If EventGadget = #Web_0
EndIf
; ////////////////////////
Case #PB_Event_CloseWindow
If EventWindow = #Window_0
CloseWindow(#Window_0)
Break
EndIf
EndSelect
ForEver
;
;}
Re: Auto-Resize ou redimensionnement fenetre
Publié : mar. 07/août/2012 7:15
par falsam
Bonjour Kernadec, tu as de la chance que #Web_0 soit le premier gadget:)
Re: Auto-Resize ou redimensionnement fenetre
Publié : mar. 07/août/2012 7:27
par kernadec
bonjour falsam bien vu

Corrigé
Re: Auto-Resize ou redimensionnement fenetre
Publié : mar. 07/août/2012 7:36
par falsam
Je pense que Micam souhaitait une procédure pour redimensionner n'importe quel gadget et dans ce cas nos réponses ne sont pas tout à fait adéquates. (A part la solution de gnozal).
Re: Auto-Resize ou redimensionnement fenetre
Publié : mar. 07/août/2012 7:51
par kernadec
falsam
Je pense que Micam souhaitait une procédure pour redimensionner n'importe quel gadget et dans ce cas nos réponses ne sont pas tout à fait adéquates. (A part la solution de Gnozal).
C' est pas faux
pour ma part je n'utilise la lib de Gnozal que pour beaucoup de gadgets,
sinon pour moins de 10 je fais comme ça.
pour compléter :
Code : Tout sélectionner
ResizeGadget(#Web_0, WindowWidth(#Window_0)/20, WindowHeight(#Window_0)/20, WindowWidth(#Window_0)/2, WindowHeight(#Window_0)/2)
Cordialement
Re: Auto-Resize ou redimensionnement fenetre
Publié : mar. 07/août/2012 8:15
par Micoute
Je pense pour ma part, qu'il serait plus judicieux d'utiliser les layouts, il y a d'ailleurs un tuto à ce sujet.
Je crois qu'un avis de plus, ne peut pas faire de mal.
Re: Auto-Resize ou redimensionnement fenetre
Publié : jeu. 09/août/2012 22:20
par micam
Bonjour à tous, et merci pour vos commentaires.
Comme le disait justement jbernard13 plus haut, je pourrai utiliser la lib de gnozal, Pureresize.
Je n'essaie pas de réinventer la roue, mais comme tout débutant je fais quelques tests pour essayer de comprendre.
Comme l'a compris falsam "Je pense que Micam souhaitait une procédure pour redimensionner n'importe quel gadget"
c'est exactement ce que j'aimerai faire (redimenssionner un gadget ou repositionner, exemple un bouton, en bas à droite lors de l'agrandissement de la fenêtre).
Ma première question à falsam
"Pourquoi as-tu mis le calcul du delta après OpenWindow_Window_0()?" a été mal posée.
Je me demandai s'il est possible de mettre tous les paramètres dans la procédure "redimenssionne()" afin de n'utiliser qu'une ligne dans l'appel de "Case #PB_Event_SizeWindow" et rien de plus dans "Procedure OpenWindow_Window_0()".
Ci-dessous, ce que j'aimerai, mais qui ne marche pas :
Code : Tout sélectionner
Procedure redimenssionne(window, gadget)
;window = SetActiveGadget(window)
gadget_X = GadgetX(gadget) ;#Pb_Ignore c'est aussi bien
gadget_Y = GadgetY(gadget) ;#Pb_Ignore c'est aussi bien
;Calcul du Delta entre le bord droit du Web Gadget et le bord droit de la fenetre
Delta_W=WindowWidth(#Window_0)-GadgetX(#Web_0)-GadgetWidth(#Web_0)
Delta_H=WindowHeight(#Window_0)-GadgetY(#Web_0)-GadgetHeight(#Web_0)
gadget_w = WindowWidth(Window)-Delta_W
gadget_H = WindowHeight(Window)-Delta_H
;Largeur et hauteur minimum
If gadget_w < 60
gadget_w=60
EndIf
If gadget_h < 60
gadget_h=60
EndIf
ResizeGadget(gadget, gadget_X, gadget_Y, gadget_W, gadget_H)
EndProcedure
J'espère avoir été un peu plus clair cette fois.
Merci encore de votre aide.
Re: Auto-Resize ou redimensionnement fenetre
Publié : jeu. 09/août/2012 23:43
par Ar-S
Y'a qu'a tester..
Code : Tout sélectionner
Procedure redimenssionne(window, gadget)
;Calcul du Delta entre le bord droit du Web Gadget et le bord droit de la fenetre
Delta_W=WindowWidth(#Window_0)-GadgetX(#Web_0)-GadgetWidth(#Web_0)
Delta_H=WindowHeight(#Window_0)-GadgetY(#Web_0)-GadgetHeight(#Web_0)
;window = SetActiveGadget(window)
gadget_X = GadgetX(gadget) ;#Pb_Ignore c'est aussi bien
gadget_Y = GadgetY(gadget) ;#Pb_Ignore c'est aussi bien
;Calcul du Delta entre le bord droit du Web Gadget et le bord droit de la fenetre
Delta_W=WindowWidth(#Window_0)-GadgetX(#Web_0)-GadgetWidth(#Web_0)
Delta_H=WindowHeight(#Window_0)-GadgetY(#Web_0)-GadgetHeight(#Web_0)
gadget_W = WindowWidth(window)-Delta_W
gadget_H = WindowHeight(window)-Delta_H
;Largeur et hauteur minimum
If gadget_W < 60
gadget_W=60
EndIf
If gadget_H < 60
gadget_H=60
EndIf
ResizeGadget(gadget, gadget_X, gadget_Y, gadget_W, gadget_H)
EndProcedure
Re: Auto-Resize ou redimensionnement fenetre
Publié : ven. 10/août/2012 6:24
par micam
Bonjour,
Les valeurs de Delta_W et Delta_H doivent être une valeur fixe.
Si je les déclarent dans "Procedure OpenWindow_Window_0()" pas de problème.
Mais si je les déclarent dans ma procédure "Procedure redimenssionne(window, gadget)",
ça ne marche pas, et c'est normal, car la valeur change à chaque redimensionnement de la fenêtre.
L'idéal serai 2 constantes :
#Delta_W = WindowWidth(window)-GadgetX(gadget)-GadgetWidth(gadget)
et
#Delta_H = WindowHeight(window)-GadgetY(gadget)-GadgetHeight(gadget)
mais on ne peut pas créer une constante avec une valeur de variable.
La question reste posée.
Merci.