Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour a tous,
je voulais savoir si il existait une méthode pour redimensionner et déplacer automatiquement tous les objets d'une window lorsque l'on change la taille de la fenêtre. Pour l'instant je fais tout à la main dans le resize mais c'est lourd!!
merci
Dernière modification par bga (17-02-2011 15:06:00)
Hors ligne
Regardes dans le code du projet d'exemple de PBNIRegex, il y a un "nv_auto_resizer" que j'ai mis au point il y a un moment. C'est moins lourds que du PFC et mais ça ne prend pas en compte les contrôles dans une datawindow.
Il faut ajouter du code générique dans ta fenêtre sur les events Open et Resize (je conseil de le faire niveau ancêtres sous forme de service désactivable via un boolean protected).
Ensuite Il suffit d'indiquer sur chaque contrôles que tu veux redimensionner si il doit être ancré à droite, gauche, haut ou bas en modifiant le tag.
ex:
pour etirer une datawindow dans les deux sens, tu metteras dans le tag "TBLR;".
T = Top
B = Bottom
L = Left
R = Right
; = permet de nettoyer le tag une fois parsé par nv_autoresizer, ainsi si tu l'utilses à d'autres fins, çà reste compatible.
Dernière modification par xlat (16-02-2011 11:08:54)
Hors ligne
j'ai telechargé le source mais j'arrive pas a ouvrir le pbw, je suis en PB11 :-(
c'est quoi du PFC?
merci
Hors ligne
PFC = Powerbuilder Foundation Class, un framework pour powerbuilder
Hors ligne
Petit tuto pour utiliser nv_auto_resizer :
sur l'objet de type window, il faut :
1) ajouter dans "Instance Variables" :
nv_auto_resizer inv_resizer boolean ib_resize_handler = false //pour (dés)activer rapidement le service
2) sur event Open ajouter :
if ib_resize_handler then inv_resizer = create nv_auto_resizer inv_resizer.initialize(this,this) end if
3) sur event Close ajouter :
if ib_resize_handler then if isvalid(inv_resizer) then destroy inv_resizer end if
4) sur event Resize :
if ib_resize_handler then this.setredraw(false) inv_resizer.event resize(sizetype, width, height) this.setredraw(true) end if
Ensuite, modifier les "tag" objets des visuels pour qu'ils débutent par les lettres TBLR et ; pour nettoyer le tag lors de l'appel "inv_resizer.initialize(this,this)".
Dernière modification par xlat (16-02-2011 15:04:11)
Hors ligne
Merci,
très simple d'utilisation une fois que tout est en place.
Ne pas oublier de recopier dans votre projet debug_message, hasmethod et bien sur nv_auto_resizer.
Merci
Hors ligne
Bonjour,
N'oublies pas le [RESOLU] dans le titre du topic.
Merci.
Hors ligne