[Résolu]Auto-Resize ou redimensionnement fenetre

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
micam
Messages : 46
Inscription : ven. 27/avr./2012 15:29

[Résolu]Auto-Resize ou redimensionnement fenetre

Message 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
;
;}
Dernière modification par micam le mar. 21/août/2012 21:06, modifié 1 fois.
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Re: Auto-Resize ou redimensionnement fenetre

Message par jbernard13 »

Salut

tu as la libs de gnozal Pureresize qui facile a utiliser


http://gnozal.ucoz.com/
Jbernard13
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Auto-Resize ou redimensionnement fenetre

Message 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
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Auto-Resize ou redimensionnement fenetre

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
micam
Messages : 46
Inscription : ven. 27/avr./2012 15:29

Re: Auto-Resize ou redimensionnement fenetre

Message 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.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Auto-Resize ou redimensionnement fenetre

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Auto-Resize ou redimensionnement fenetre

Message par kernadec »

bonjour
petit essai pour le fun :D

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
;
;}

Dernière modification par kernadec le mar. 07/août/2012 7:26, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Auto-Resize ou redimensionnement fenetre

Message par falsam »

Bonjour Kernadec, tu as de la chance que #Web_0 soit le premier gadget:)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Auto-Resize ou redimensionnement fenetre

Message par kernadec »

bonjour falsam bien vu :mrgreen:
Corrigé
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Auto-Resize ou redimensionnement fenetre

Message par falsam »

Code : Tout sélectionner

redimenssionne(window, gadget)
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).
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Auto-Resize ou redimensionnement fenetre

Message 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 :D

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
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Auto-Resize ou redimensionnement fenetre

Message 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.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
micam
Messages : 46
Inscription : ven. 27/avr./2012 15:29

Re: Auto-Resize ou redimensionnement fenetre

Message 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.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Auto-Resize ou redimensionnement fenetre

Message 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

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
micam
Messages : 46
Inscription : ven. 27/avr./2012 15:29

Re: Auto-Resize ou redimensionnement fenetre

Message 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.
Répondre