Redimensionnement de formulaire

Jean-Yves FOCK-HOON

L'objectif de cette note technique est de montrer l'utilisation des nouvelles commandes « Formulaire » en 4D 2004. Une nouvelle commande : REDIMENSIONNER FENETRE FORMULAIRE a été ajoutée, et la commande CHANGER COORDONNEES FENETRE a changé de comportement entre 4D 2003 et 4D 2004. ♪

- Titre : Redimensionnement de formulaire

- Auteur : Jean-Yves FOCK-HOON

- Parution : 1 juin 2006

- Licence : Ce document est issu de https://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Sommaire

- Un changement important

- Le constat

- La raison

- L'exemple

- Redimensionner ou ne pas redimensionner

- Redimensionner la fenêtre (CHANGER COORDONNEES FENETRE)

- Exemple 1

- Exemple 2

- Exemple 3

- Exemple 4

- Exemple 5

- Exemple 6

- Redimensionner la fenêtre (REDIMENSIONNER FENETRE FORMULAIRE)

- Exemple 7

- Déplacer une fenêtre

- Conclusion

- Télécharger la base exemple

Un changement important

Le constat

Il n'y a pas de meilleur moyen pour illustrer un problème que d'utiliser un exemple. Cette note technique est fournie avec une base très simple en 4D version 6.8. En lançant cette base exemple en menus créés, vous verrez une barre de menu « Version 6.8 » avec une seule ligne « Démonstration ». Si vous sélectionnez cette ligne, vous lancerez deux process. Le premier process visible est un process qui affiche une zone de défilement. Vous pouvez sélectionner une valeur et cliquer sur le bouton « Editer ». Ceci lancera un autre process, qui simule la saisie de données sur la valeur sélectionnée dans la zone de défilement. L'objectif de cet exemple est de montrer comment deux process interagissent quand ils viennent manipuler la taille des fenêtres. Si vous annulez la saisie de données après avoir augmenté la taille de la fenêtre, vous pouvez vouloir que le formulaire adopte la nouvelle dimension. C'est une technique très simple qui utilise les commandes COORDONNEES FENETRE et CHANGER COORDONNEES FENETRE.

La base de données en 4D 2004 fournie avec cette note technique a été construite à partir d'une base en 6.8. Si vous lancez le même test, vous pourrez constater que l'interface ne répond plus. Les objets ont été redimensionnés et le formulaire devient inutilisable.

La raison

Le comportement a changé avec la version 2004 et avec l'introduction de nouvelles commandes ainsi que la mise en place du système « pousseur ». Ces commandes ont été modifiées, voici pourquoi l'exemple en 6.8 ne fonctionne plus. Que peut-on faire pour simuler le comportement de la 6.8 ? Selon la documentation, on ne peut plus utiliser la commande CHANGER COORDONNEES FENETRE et l'on devrait utiliser la commande REDIMENSIONNER FENETRE FORMULAIRE :

« …Cette commande [CHANGER COORDONNEES FENETRE] n'affecte pas les objets du formulaire. Si la fenêtre contient un formulaire, les objets du formulaire ne sont pas déplacés ou redimensionnés par la commande (quelles que soient leurs propriétés). Seule la fenêtre est modifiée. Pour modifier une fenêtre de formulaire en tenant compte de ses propriétés de redimensionnement et des objets qu'elle contient, vous devez utiliser la commande REDIMENSIONNER FENETRE FORMULAIRE…. »

Dans les versions antérieures à 2004, CHANGER COORDONNEES FENETRE redimensionnait la fenêtre et les objets à l'intérieur de celle-ci. C'était un comportement basique et qui ne donnait pas assez de contrôle sur les fenêtres. Vous pouviez avoir besoin de redéfinir les limites de votre fenêtre sans rien redimensionner dans le dialogue. Avec 4D 2004, c'est maintenant possible. CHANGER COORDONNEES FENETRE vous permet de redéfinir la taille de la fenêtre et ne redimensionne pas le contenu de cette fenêtre.

L'exemple

Dans le menu « Version 2004 » vous pouvez sélectionner la ligne « Démonstration » qui simule ce qui se faisait dans les anciennes versions. Nous pouvons éditer et redimensionner les deux fenêtres qui resteront synchronisées et les objets ne disparaitront pas de l'écran. Voyons le code.

En version 6.8, vous aviez juste à saisir les coordonnées de la fenêtre, les stocker dans des variables interprocess et les appliquer à la nouvelle fenêtre. Le redimensionnement automatique faisait le reste.

En 2004, vous pouvez voir que d'autres lignes de code sont nécessaires :

code 4D

COORDONNEES FENETRE(<>LeftIn2004;<>TopIn2004;<>RightIn2004;<>BottomIn2004)
REDIMENSIONNER FENETRE FORMULAIRE(<>RightOut2004-<>LeftOut2004-<>RightIn2004+<>LeftIn2004;
<>BottomOut2004-<>TopOut2004-<>BottomIn2004+<>TopIn2004)
COORDONNEES FENETRE($NL1;$NT1;$NR1;$NB1)
CHANGER COORDONNEES FENETRE(<>LeftOut2004;<>TopOut2004;$NR1-$NL1+<>LeftOut2004;
$NB1-$NT1+<>TopOut2004)
CHANGER COORDONNEES FENETRE(<>LeftOut2004;<>TopOut2004;<>RightOut2004;<>BottomOut2004)

Analysons le code. Vous avez maintenant deux ensembles de variables, un pour les coordonnées de chaque fenêtre. Le calcul est un peu délicat. Si vous souhaitez augmenter la taille de la fenêtre A pour atteindre la taille de la fenêtre B, vous avez besoin de savoir de combien l'augmenter. C'est pourquoi vous devez avoir les coordonnées des deux fenêtres et pouvez ainsi calculer la différence. Ceci explique les paramètres un peu « complexes » utilisés avec la commande REDIMENSIONNER FENETRE FORMULAIRE.

Les lignes de code qui suivent peuvent être optimisées, mais elles ont été dupliquées pour une meilleure compréhension. L'utilisateur était dans la fenêtre A, et demande la fenêtre B. Il augmente la taille de la fenêtre et la déplace sur l'écran. Lorsqu'il est prêt à revenir sur la fenêtre A, il s'attend à retrouver la fenêtre A à la même place qu'il a laissé la fenêtre B. Nous avons vu comment calculer la taille de la fenêtre ; maintenant nous avons besoin de gérer ses mouvements. Pour déplacer une fenêtre, nous pourrions utiliser la commande COORDONNEES FENETRE et récupérer les mêmes coordonnées. Nous avons besoin de connaître la position courante de notre fenêtre et la nouvelle largeur de notre fenêtre après redimensionnement. C'est pourquoi nous utilisons la commande COORDONNEES FENETRE pour retrouver les coordonnées. À partir de ces coordonnées, nous pouvons calculer la largeur et la hauteur courante de la fenêtre. Avec le second jeu de variables, nous savons où se trouve la fenêtre B. Nous pouvons appliquer les mêmes coordonnées avec le premier CHANGER COORDONNEES FENETRE. Alors pourquoi le deuxième CHANGER COORDONNEES FENETRE ? Nous voulons que la fenêtre A soit à la même position que la fenêtre B. La fenêtre A a maintenant la même largeur et hauteur que la fenêtre B, mais pas la même position. Nous cherchons les nouvelles coordonnées ; ce sont les mêmes que la fenêtre B. Ainsi, il est inutile de les calculer à nouveau ; nous pouvons simplement utiliser les coordonnées de la fenêtre B ainsi les deux fenêtres ont la même taille.

Le code pourrait ressemblait à ceci :

code 4D

COORDONNEES FENETRE(<>LeftIn2004;<>TopIn2004;<>RightIn2004;<>BottomIn2004)
REDIMENSIONNER FENETRE FORMULAIRE(<>RightOut2004-<>LeftOut2004-<>RightIn2004+<>LeftIn2004;
<>BottomOut2004-<>TopOut2004-<>BottomIn2004+<>TopIn2004)
CHANGER COORDONNEES FENETRE(<>LeftOut2004;<>TopOut2004;$NR1-$NL1+<>LeftOut2004;
$NB1-$NT1+<>TopOut2004)

À la place du code suivant utilisé dans les anciennes versions :

code 4D

CHANGER COORDONNEES FENETRE(<>LeftOut68;<>TopOut68;<>RightOut68;<>BottomOut68)

Redimensionner ou ne pas redimensionner

4D 2004 introduit un nouveau concept, la possibilité de redimensionner une fenêtre de façon non proportionnelle. Dans les précédentes versions, vous pouviez redimensionner votre fenêtre et tous les objets à l'intérieur de cette fenêtre étaient redimensionnés en fonction de leurs propriétés. Il s'agit en fait de deux fonctionnalités utilisées avec la même commande. Vous pouvez vouloir programmer un redimensionnement de la fenêtre comme si l'utilisateur utilisait la case de redimensionnement de la fenêtre ou vous pouvez simplement vouloir augmenter la taille de la fenêtre pour montrer les objets qui sont en dehors des limites.

Redimensionner la fenêtre (CHANGER COORDONNEES FENETRE)

La commande CHANGER COORDONNEES FENETRE vous permet de redéfinir les coordonnées de la fenêtre. Ceci est très pratique si vous avez d'autres objets en dehors des limites de votre fenêtre et lorsque vous souhaitez étendre la taille de la fenêtre de façon à visualiser ces objets.

Exemple 1

Pour illustrer ce point, voyons l'exemple 1 dans le menu « Version 2004 ». Le dialogue utilise un formulaire où tous les objets ont des coordonnées fixes. Si vous cliquez sur les boutons « Taille 1 », « Taille 2 » ou « Taille 3 », vous pouvez voir que la taille de la fenêtre augmente. Les objets en dehors de la fenêtre sont maintenant visibles. Mais vous pouviez faire cela avec les anciennes versions ! Qu'y a-t-il donc de réellement nouveau ? Voyons le second exemple.

Nous avons ici un dialogue redimensionnable. On peut le redimensionner horizontalement. Dans le formulaire, la zone de défilement a été définie comme « Dimensionnement horizontal = Agrandir » dans la liste des propriétés. Lorsque vous augmentez la taille de la fenêtre, vous pouvez voir la zone de défilement s'agrandir. Ces objets ont une position fixe. Notez que la taille du formulaire est basée sur le bouton « Fermer ». Les autres objets sont en dehors du formulaire. Nous pouvons redimensionner manuellement notre dialogue, augmenter sa taille. Nos objets, à droite, ne sont toujours pas affichés. Ils sont poussés sur la droite, toujours en dehors de la partie visible du formulaire. Avec les précédentes versions, le redimensionnement aurait visualisé ces objets. Dans le dialogue, vous pouvez cliquer sur le bouton « Plus d'infos… ». Ce bouton retrouve les coordonnées courantes de la fenêtre et les augmente de 140 pixels (de façon à inclure les objets cachés dans la partie maintenant visible du formulaire) en utilisant la commande CHANGER COORDONNEES FENETRE. Nos objets sont désormais visibles. Nous pouvons continuer à redimensionner le dialogue et voir la zone de défilement se déplacer.

Exemple 2

Dans l'exemple 2, nous pouvons noter que le formulaire a une largeur mini à 190 et une largeur maxi à 500. Nous avons arbitrairement choisi 500 comme valeur maximum, mais nous avons choisi 190 comme minimum parce que le bouton « Fermer » est déplaçable horizontalement. Si nous réduisons trop le dialogue, le bouton « Fermer » est recouvert par le bouton « Plus d'infos… ». Si nous diminuons la largeur à 190 pixels et cliquons sur le bouton « Plus d'infos… », le formulaire aura désormais une largeur de 320 pixels. Nous pouvons maintenant réduire cela et voir notre bouton « Fermer » interférer avec le bouton « Défaut ». Ce problème est évité avec la largeur minimum.

C'est pourquoi nous utilisons la commande FIXER REDIMENSIONNEMENT FORMULAIRE HORIZONTAL dans la méthode-objet. Ceci nous permet de définir par programmation la largeur de la fenêtre. Étendues ou non, nous pouvons maintenant être certaines que le bouton « Fermer » n'interférera pas avec les autres boutons.

Exemple 3

Cet exemple est très simple et est un mélange des deux premiers. À partir du dialogue où tous les éléments ont une taille fixe, nous pouvons cliquer sur le bouton « Défaut/Plus d'infos… » pour augmenter ou pas la taille de la fenêtre.

La seule différence est que le formulaire a une taille fixée de façon à montrer tout ce qui est visible sur le formulaire. Mais nous allons montrer seulement la moitié du formulaire en exécutant la commande CHANGER COORDONNEES FENETRE durant l'événement formulaire Sur chargement.

Exemple 4

L'exemple 4 est un exemple qui vous montre ce que vous pouvez faire en manipulant les contraintes. Notre premier dialogue est très petit et peut être redimensionné verticalement jusqu'à 300 pixels comme défini dans l'événement formulaire Sur chargement de la méthode formulaire. Le redimensionnement horizontal n'est pas autorisé.

Avec le bouton « Plus d'infos… » vous pouvez voir que la taille de la fenêtre est basée sur la position de la zone de défilement. Nous avons retrouvé les coordonnées de l'objet et ajouté une marge (10) ou un offset (145) de façon à afficher les autres objets sur la droite. Si vous cliquez sur le bouton « Plus d'infos… », le dialogue est maintenant plus grand, comme souhaité. Le dialogue est maintenant redimensionnable horizontalement et verticalement, jusqu'à 500 pixels pour les deux.

Augmentez le dialogue pour utiliser 500 pixels verticalement et horizontalement, et cliquez sur le bouton « Défaut » pour revenir sur le petit dialogue. En suivant l'exécution de la méthode objet, un CHANGER COORDONNEES FENETRE est utilisé, basé sur la taille de la zone de défilement ; trop grande pour le petit dialogue dont les limites ont été définies par un FIXER REDIMENSIONNEMENT FORMULAIRE HORIZONTAL et un FIXER REDIMENSIONNEMENT FORMULAIRE VERTICAL.

C'est pourquoi un :

code 4D

REDIMENSIONNER FENETRE FORMULAIRE(0;0)

a été exécuté. Sans cette ligne de code, le dialogue restera trop large. Tant que vous interagissez avec lui, il sera redimensionné. Si vous exécutez la ligne de code REDIMENSIONNER FENETRE FORMULAIRE(0;0), 4D redessinera la fenêtre et le dialogue sera affiché dans ses limites, c'est-à-dire avec le maximum de valeurs allouées.

Exemple 5

La commande CHANGER COORDONNEES FENETRE est si puissante qu'elle peut rendre votre interface inutilisable si elle est mal utilisée avec le redimensionnement de formulaire et le déplacement d'objets. Avec le dialogue de l'exemple 5, si vous cliquez sur les boutons, le dialogue restera correct tant que vous ne redimensionnez pas la fenêtre. Si vous redimensionnez la fenêtre et cliquez sur un des boutons comme le bouton « Taille 1 » pour réduire la largeur de la fenêtre, la largeur des objets perd alors tout contrôle. Comme vous pouvez le voir, il n'est plus possible de voir tous les carrés colorés. Bien sûr, vous pouvez toujours les manipuler par programmation. Cliquez sur le bouton « Initialiser » et les objets seront à nouveau affichés comme auparavant. Vous pouvez réinitialiser leur position en utilisant la commande DEPLACER OBJET.

Il est fortement recommandé de vérifier les propriétés de vos formulaires et de vos objets. Tous doivent être compatibles. Vous devez être prudent lorsque vous définissez ces paramètres. Soyez certain que les limites du formulaire sont bien appropriées. Pour cela, sélectionnez l'option « Affichez les limites » dans le menu contextuel de votre formulaire. Ceci affichera la taille réelle du formulaire à afficher basé sur la taille réelle courante de la fenêtre. Par défaut, le formulaire contiendra tous les objets tant que le paramétrage par défaut est « Taille automatique ». Vous pouvez limiter la taille du formulaire en la basant sur un objet spécifique ou simplement en indiquant une taille fixe. Si vous pensez que le formulaire sera redimensionné, vous pouvez définir les objets comme déplaçables et redimensionnables si nécessaire. Si ces objets sont en dehors de la partie visible du formulaire, vérifiez bien qu'ils n'interféreront pas avec les autres objets après le redimensionnement du formulaire. Si votre formulaire n'a pas été crée pour être redimensionné, ne choisissez pas les propriétés « déplacer » ou « agrandir » pour les objets.

Une des choses les plus importantes à définir est des valeurs valides pour la hauteur et largeur mini et maxi. Ne gardez pas les valeurs par défaut, 0 à 32000 ; sinon, si le formulaire est redimensionné, votre interface deviendra inutilisable.

Exemple 6

Cet exemple illustre le dernier point.

Notre formulaire possède quelques objets qui peuvent être déplacés et agrandis. Il y a aussi un rectangle avec une taille fixe. Si nous sélectionnons la ligne de menu « Exemple 6 », un petit dialogue est affiché avec 4 boutons. Le premier affiche le formulaire avec la commande Creer fenetre formulaire, c'est-à-dire en utilisant l'exacte largeur et hauteur du formulaire. Si vous cliquez sur ce bouton, vous pouvez voir que le dialogue est affiché avec tous les objets affichés au bon endroit. Tel que défini sur le formulaire. Si vous cliquez sur le second ou le troisième bouton, vous afficherez le même formulaire dans une fenêtre plus grande ou plus petite. Si vous vérifiez la fenêtre avec la taille la plus petite, vous pouvez voir que des tailles d'objets ont diminué, mais, le texte statique « Sélectionnez une valeur » affiché sur la gauche du formulaire ne se trouve plus là. En fait, il a été déplacé ; il est maintenant en dehors de la fenêtre visible. C'est parce que le texte statique a été défini comme « déplaçable ». Le dernier mot de ce texte, « valeur » est à plus de 300 pixels sur la gauche du coin en bas à droite de la fenêtre. Si vous redimensionnez la fenêtre et la rendait plus petite, dans ce cas, une largeur de 300 pixels, notre texte statique est aussi déplacé vers la gauche. Ainsi les coordonnées du mot « valeur » deviendront d'environ -60. Le texte statique « Cliquez sur Fermer » est aussi en dehors de l'écran. Ainsi une bordure a été définie pour cette chaîne. Vous pouvez clairement voir le bord de cette chaîne. En augmentant la taille de cette fenêtre, vous pourrez voir ces objets texte statiques à nouveau.

Redimensionner la fenêtre (REDIMENSIONNER FENETRE FORMULAIRE)

La commande REDIMENSIONNER FENETRE FORMULAIRE vous permet de redimensionner une fenêtre comme si vous redimensionnez manuellement la fenêtre par le coin en bas à droite.

Exemple 7

Cet exemple affiche un dialogue avec des objets déplaçables. Vous pouvez redimensionner le dialogue et voir les objets se déplacer. Ce dialogue a une taille minimum et maximum. L'objectif de ce dialogue est de montrer comment vous permettez à une fenêtre d'être redimensionnable et comment vous la redimensionnez par programmation. À partir de la taille de la fenêtre, vous pouvez définir les limites, jusqu'à la taille maximum du dialogue.

Si la taille atteint une valeur spécifique ou basée sur certaines autres conditions, vous pouvez aussi décider de bloquer ou inactiver le redimensionnement de la fenêtre. Vous pouvez utiliser les commandes FIXER REDIMENSIONNEMENT FORMULAIRE VERTICAL et FIXER REDIMENSIONNEMENT FORMULAIRE HORIZONTAL pour faire cela.

Si vous voulez autoriser le redimensionnement, passez « vrai » dans le premier paramètre, les valeurs définies dans le formulaire seront utilisées comme limites. Vous pouvez définir vos propres valeurs par programmation en 2e et 3e paramètres de ces commandes.

Si vous souhaitez invalider temporairement le redimensionnement, vous pouvez exécuter ces commandes avec « Faux » en premier paramètre.

Les deux commandes fonctionnent seulement si le formulaire a été défini comme redimensionnable dans l'éditeur de formulaire. Si le formulaire a une largeur et une hauteur fixe, les commandes ne fonctionneront pas du tout. Si vous voulez utiliser ces commandes, vérifiez bien que le formulaire n'a pas de taille prédéfinie. Si vous avez vraiment besoin d'avoir une valeur fixe et voulez toujours pouvoir utiliser ces commandes, calculez la valeur fixe et définissez-là comme valeur minimale et maximale.

Par exemple, si vous planifiez d'utiliser ces commandes pour redimensionner le formulaire horizontalement, mais demandez que le formulaire soit affiché avec une largeur fixe et interdisez le redimensionnement manuel, calculez la largeur requise. Si on présume que cette valeur est maintenant 447 (valeur requise pour le formulaire [MyTable]Dial7 form), définissez cette valeur en largeur minimum et largeur maximum. Si vous affichez le formulaire, vous verrez que la largeur ne peut pas être redimensionnée. Sinon, la commande FIXER REDIMENSIONNEMENT FORMULAIRE HORIZONTAL peut toujours être utilisée pour définir le redimensionnement horizontal.

Une fois que le redimensionnement horizontal et vertical a été défini et que nous avons maintenant nos limites, de combien un formulaire peut-il être redimensionné ? Comme vous pouvez le voir, on ne peut pas augmenter la taille de la fenêtre plus loin que la taille autorisée. Nous pouvons maintenant vérifier la commande REDIMENSIONNER FENETRE FORMULAIRE. Cette commande vous permet de redimensionner une fenêtre et déplace les objets et les augmente comme si vous agrandissiez manuellement la fenêtre. Réduisez la taille de la fenêtre et cliquez sur le bouton « Taille maximum ».

Ce bouton exécutera le code suivant :

code 4D

REDIMENSIONNER FENETRE FORMULAIRE(1000;1000)

Comme vous pouvez le voir, nous redimensionnons notre formulaire à 1 000 pixels ; sinon le dialogue affiché est toujours limité à 600 pixels. Cette commande se trouve bridée par cette limitation ; elle ne permet pas d'augmenter la taille de la fenêtre plus loin que permis.

Ceci est aussi vrai lorsque vous réduisez la taille de la fenêtre. Cliquez sur le bouton « Taille minimum ». La largeur et la hauteur seront diminuées de 1 000 pixels ; la taille de la fenêtre est maintenant le minimum autorisé. S'il n'y avait aucune limitation définie pour ce formulaire, le dialogue serait inutilisable. L'utilisateur n'aurait pas nécessairement trouvé un moyen de réduire la taille de la variable, ou pire, elle pourrait ne plus être visible.

Note :
si vous diminuez la taille d'un formulaire redimensionnable jusqu'à 10 pixels de largeur ou hauteur et ne pouvez pas redimensionner le dialogue à moins de 100 pixels, c'est parce que votre formulaire contient des objets non déplaçables. La largeur et la hauteur requises pour afficher des objets non déplaçables sont en fait la largeur et la hauteur minimums réelles pour cette fenêtre. Les valeurs minimum par exemple pour ce formulaire sont de 200. Si vous entrez 200 pour les deux valeurs minimums et les appliquez, vous verrez que vous ne pouvez pas redimensionner en dessous de 200 pixels. La largeur et la hauteur sont bloquées par la position des trois boutons et la position de la zone de groupe et le bouton pour la hauteur. Si tous les objets sont paramétrés à « déplaçables », vous pourrez redimensionner la fenêtre jusqu'à 200 pixels, comme souhaité.

Déplacer une fenêtre

La commande CHANGER COORDONNEES FENETRE vous permet de redéfinir les coordonnées de la fenêtre. Vous pouvez utiliser cela pour déplacer la fenêtre. Vous pouvez utiliser la commande COORDONNEES FENETRE pour retrouver les coordonnées de la fenêtre courante de façon à calculer ses largeurs et hauteurs. Vous pouvez alors calculer les prochaines coordonnées et utiliser la commande CHANGER COORDONNEES FENETRE. Ceci vous permettra de déplacer la fenêtre quand vous le souhaitez.

Conclusion

Cette note technique décrit la différence entre redimensionner une fenêtre aux objets pouvant s'agrandir et se déplacer, et redimensionner une fenêtre sans modifier la taille des objets contenus.

Télécharger la base exemple

Télécharger la base exemple.