|
| [WD17] Définir la taille d'un libellé par programmation |
| Iniciado por rastam57, 29,may. 2012 12:19 - 16 respuestas |
| |
| | | |
|
| |
| Publicado el 29,mayo 2012 - 12:19 |
Bonjour,
J'ai, dans un état, un libellé multiligne qui peut contenir du texte d'une ou plusieurs lignes... Et parfois, tout ne rentre pas dans la zone du libellé. Sachant que je ne peux pas agrandir la zone du libellé, comment est-il possible de "jouer", par programmation, sur la taille des caractères (qui doit être comprise entre 9 et 12) ?
Merci par avance de votre retour d'expériences |
| |
| |
| | | |
|
| | |
| |
| Publicado el 29,mayo 2012 - 19:17 |
bonjour
passer le champ en auto extensible
ou jouer sur la police du champ par programmation avec nomduchamp..PoliceTaille
bon dev |
| |
| |
| | | |
|
| | |
| |
| Publicado el 29,mayo 2012 - 20:37 |
Bonjour,
Le champ est multiligne, mais je ne veux pas qu'il soit Auto Exsensible, car sa "position" ne doit pas changer. Le libellé est alimenté par programmation, il n'est pas fixe et peut contenir un texte court comme un texte assez long qui ne rentre pas complètement dans la zone du libellé à afficher. C'est dans ce cas que je voudrais arriver à réduire la taille des caractères jusqu'à que tout le texte puisse tenir dans la zone prévue du libellé. Bien sûr, la longueur du texte est raisonnable, et non pas infinie. Je suis désolé si je ne suis pas assez clair. Bon dev
digi12 a écrit dans le message de news <7534ecebc4be516c93f35260531d7040@news.pcsoft> :
bonjour
passer le champ en auto extensible
ou jouer sur la police du champ par programmation avec nomduchamp..PoliceTaille
bon dev |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 512 mensajes |
|
| Publicado el 29,mayo 2012 - 22:11 |
Bonjour rastam,
digi12 t'a donné la réponse.
Pour modifier la taille des caractères dans le champ concerné, tu dois utiliser sa propriété ..PoliceTaille : » http://doc.pcsoft.fr/fr-FR/?2510072&name=policetaille-propriete
Maintenant, pour savoir si le texte affiché dans le champ est bien totalement visible, tu peux utiliser la fonction TexteHauteur() qui te retourne le nombre de pixels nécessaire pour l'afficher.
Si ce nombre de pixels nécessaires est supérieur à la hauteur du champ, alors il faut diminuer la taille de la police.

-- Pour me contacter par courrier électronique, cliquez sur le lien ci-dessous (protection antispam): http://cerbermail.com/… |
| |
| |
| | | |
|
| | |
| |
| Publicado el 29,mayo 2012 - 23:56 |
rastam avait prétendu :
Bonjour,
J'ai, dans un état, un libellé multiligne qui peut contenir du texte d'une ou plusieurs lignes... Et parfois, tout ne rentre pas dans la zone du libellé. Sachant que je ne peux pas agrandir la zone du libellé, comment est-il possible de "jouer", par programmation, sur la taille des caractères (qui doit être comprise entre 9 et 12) ?
Merci par avance de votre retour d'expériences
gPoliceTaille() ne fonctionne pas ?
-- Laurent Loiseleux www.Ingelo.eu |
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,mayo 2012 - 12:10 |
Bonjour et merci pour vos réponses
Cependant, elles ne m'aident pas. En effet, pour du mailing, dans l'état que je crée, la zone de mon libellé doit être FIXE. La taille des caractères est fixée à 12. La plupart de temps, le texte (il s'agit d'un commentaire qui provient d'une base de données) à affecter dans le libellé s'insère sans problème. Dans ce cas, il n'y a aucun souci. Mais parfois, le texte est TROP LONG, et dans ce cas, pour pouvoir insérer le texte dans la zone du libellé, je dois "jouer" sur la taille des caractères...
Il y a donc des tests à effectuer pour savoir quelle est la taille des caractères à appliquer pour que le texte s'insère dans la zone du libellé.
Merci encore
Laurent.L a écrit dans le message de news <4fc503dd$1@news.pcsoft.fr> :
rastam avait prétendu : Bonjour,
J'ai, dans un état, un libellé multiligne qui peut contenir du texte d'une ou plusieurs lignes... Et parfois, tout ne rentre pas dans la zone du libellé. Sachant que je ne peux pas agrandir la zone du libellé, comment est-il possible de "jouer", par programmation, sur la taille des caractères (qui doit être comprise entre 9 et 12) ?
Merci par avance de votre retour d'expériences
gPoliceTaille() ne fonctionne pas ? -- Laurent Loiseleux www.Ingelo.eu |
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,mayo 2012 - 12:48 |
rastam a formulé ce mercredi :
Bonjour et merci pour vos réponses Cependant, elles ne m'aident pas. En effet, pour du mailing, dans l'état que je crée, la zone de mon libellé doit être FIXE. La taille des caractères est fixée à 12. La plupart de temps, le texte (il s'agit d'un commentaire qui provient d'une base de données) à affecter dans le libellé s'insère sans problème. Dans ce cas, il n'y a aucun souci. Mais parfois, le texte est TROP LONG, et dans ce cas, pour pouvoir insérer le texte dans la zone du libellé, je dois "jouer" sur la taille des caractères... Il y a donc des tests à effectuer pour savoir quelle est la taille des caractères à appliquer pour que le texte s'insère dans la zone du libellé. Merci encore Laurent.L a écrit dans le message de news <4fc503dd$1@news.pcsoft.fr> : rastam avait prétendu : Bonjour,
J'ai, dans un état, un libellé multiligne qui peut contenir du texte d'une ou plusieurs lignes... Et parfois, tout ne rentre pas dans la zone du libellé. Sachant que je ne peux pas agrandir la zone du libellé, comment est-il possible de "jouer", par programmation, sur la taille des caractères (qui doit être comprise entre 9 et 12) ?
Merci par avance de votre retour d'expériences
gPoliceTaille() ne fonctionne pas ? -- Laurent Loiseleux www.Ingelo.eu
Oui, j'avais bien compris, dans ce cas avez-vous essayé gPoliceTaille() : MonLibellé = gPoliceTaille(9) + "Commentaire" + gPoliceTaille(12)
-- Laurent Loiseleux www.Ingelo.eu |
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,mayo 2012 - 13:33 |
Merci Laurent,
La taille par défaut doit rester à 12. Je ne dois utiliser ta formule QUE dans le cas où Commentaire "ne rentre pas" dans MonLibellé avec une taille à 12.
Le problème est de comparer la taille de MonLibellé et celle de Commentaire pour savoir la taille à appliquer.
Merci encore Laurent pour tes lumières
Laurent.L a écrit dans le message de news <4fc5dc6e$1@news.pcsoft.fr> :
rastam a formulé ce mercredi : Bonjour et merci pour vos réponses Cependant, elles ne m'aident pas. En effet, pour du mailing, dans l'état que je crée, la zone de mon libellé doit être FIXE. La taille des caractères est fixée à 12. La plupart de temps, le texte (il s'agit d'un commentaire qui provient d'une base de données) à affecter dans le libellé s'insère sans problème. Dans ce cas, il n'y a aucun souci. Mais parfois, le texte est TROP LONG, et dans ce cas, pour pouvoir insérer le texte dans la zone du libellé, je dois "jouer" sur la taille des caractères... Il y a donc des tests à effectuer pour savoir quelle est la taille des caractères à appliquer pour que le texte s'insère dans la zone du libellé. Merci encore Laurent.L a écrit dans le message de news <4fc503dd$1@news.pcsoft.fr> : rastam avait prétendu : Bonjour,
J'ai, dans un état, un libellé multiligne qui peut contenir du texte d'une ou plusieurs lignes... Et parfois, tout ne rentre pas dans la zone du libellé. Sachant que je ne peux pas agrandir la zone du libellé, comment est-il possible de "jouer", par programmation, sur la taille des caractères (qui doit être comprise entre 9 et 12) ?
Merci par avance de votre retour d'expériences
gPoliceTaille() ne fonctionne pas ? -- Laurent Loiseleux www.Ingelo.euOui, j'avais bien compris, dans ce cas avez-vous essayé gPoliceTaille() : MonLibellé = gPoliceTaille(9) + "Commentaire" + gPoliceTaille(12) -- Laurent Loiseleux www.Ingelo.eu |
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,mayo 2012 - 15:41 |
Après mûre réflexion, rastam a écrit :
Merci Laurent,
La taille par défaut doit rester à 12. Je ne dois utiliser ta formule QUE dans le cas où Commentaire "ne rentre pas" dans MonLibellé avec une taille à 12. Et bien ça, je crois que on l'a tous compris depuis le début !!!
Le problème est de comparer la taille de MonLibellé et celle de Commentaire pour savoir la taille à appliquer. =JBO= t'a fournis un début de piste
> Merci encore Laurent pour tes lumières De rien, avec tout ça tu va y arriver !
-- Laurent Loiseleux www.Ingelo.eu |
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,mayo 2012 - 17:40 |
Je ferais comme ceci : - Prévoir un champ RTF autoextensible dans un BLOC non imprimé - Y placer le texte par programmation - Questionner pour connaître la ..HauteurFuture - Si < que la htr du champ réel -> OK, il suffit de transférer le contenu - Si > que la htr du champ réel : - sélectionner tout le texte dans le champ non imprimé - adapter la taille - re-questionner pour connaître la ..HauteurFuture avec police réduite - si OK : recopier ce contenu dans le champ réellement irmpimé - si pas OK : refaire un tour avec une taille de police encore + petite. - etc . J'espère que cela vous conviendra. |
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,mayo 2012 - 18:25 |
Bonjour et merci
Désolé !!! Effectivement, =JBO= m'a fourni TOUT ce qu'il fallait, mais je n'avais bien saisi. Cela fonctionne bien dans une fenêtre. Mais dans un état, la fonction TexteHauteur() me retourne toujours 0. Est-ce un bug ?
Laurent.L a écrit dans le message de news <4fc5f7c1$1@news.pcsoft.fr> :
Après mûre réflexion, rastam a écrit : Merci Laurent,
La taille par défaut doit rester à 12. Je ne dois utiliser ta formule QUE dans le cas où Commentaire "ne rentre pas" dans MonLibellé avec une taille à 12. Et bien ça, je crois que on l'a tous compris depuis le début !!! Le problème est de comparer la taille de MonLibellé et celle de Commentaire pour savoir la taille à appliquer. =JBO= t'a fournis un début de piste Merci encore Laurent pour tes lumières De rien, avec tout ça tu va y arriver ! -- Laurent Loiseleux www.Ingelo.eu |
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,mayo 2012 - 19:51 |
Pour être plus précis : - je ne parle pas de la fonction texteHauteur() qui ne convient pas à ce cas - je parle de la propriété ..HauteurFuture utilisable sur un champ autoextensible dans un état. Cette fonction est utilisée très régulièrement pour ajuster une hauteur identique pour plusieurs champs + ou - remplis ou encore pour voir si un champ va tenir sur la page ou passer à la page suivante (en partie si coupure autorisée).
Voici un extrait de l'aide PCSoft à ce sujet : La propriété ..HauteurFuture permet de connaître la hauteur d'un champ auto-extensible dans un état lorsque ce champ sera agrandi. Cette propriété permet notamment d'agrandir la taille d'un champ situé à coté d'un champ auto-extensible (cas d'un état fiche par exemple).
Puisque ton texte n'est pas formaté, il n'est même pas nécessaire d'utiliser un champ RTF Prévois un champ texte autoextensible dans une bloc non imprimé de l'état. Le code pourrait être ceci :
//momChampCaché est un champ texte autoextensible //La largeur du champ est identique à celle du champ réel (sinon la hauteur change aussi !) //on suppose que la police définie dans l'état est OK //mais on pourrait aussi varier la police pour une plus 'courte' en impression d'un même texte
iHtrFuture est un entier nTaille est un entier = 12 //la + grande police souhaitée momChampCaché..PoliceTaille = nTaille momChampCaché= REPETE("Texte à imprimer",50) //pour le test
BOUCLE iHtrFuture = MoiMême..HauteurFuture TRACE(iHtrFuture) //tu verras la hauteur diminuer au fur et à mesure SI iHtrFuture <= 30 ALORS //si la hauteur du champ réel est de 30 monChampReel..policeTaille = nTaille monChampReel = monChampCaché SORTIR FIN SI nTaille = 6 ALORS Info("Le texte est trop long, même en taille 6 points") //Imprimer ce qui peut l'être ??? monChampReel..policeTaille = 6 monChampReel = monChampCaché //une partie sera invisible ! //ou mettre une erreur et stopper l'état ??? à toi de voir FIN nTaille -- MoiMême..PoliceTaille = nTaille FIN J'ai testé pour être certain de ce que j'avance : y'a aucun souci ! Si tu exécutes ce code, tu verras dans la TRACE la hauteur future du champ caché diminuer au fur et à mesure de la diminution de la police affectée au champ caché. J'espère cette fois que tout sera OK pour toi. Bon boulot. |
| |
| |
| | | |
|
| | |
| |
| Publicado el 31,mayo 2012 - 19:40 |
Mais vraiment un GRAND merci, Christian
Effet, ton code fonctionne parfaitement !!!
Merci à tous les autres aussi pour leur concours
Bon dev à tous
Goblet Christian a écrit dans le message de news <8d82810603d86e6d8ab5d986d3a5a141@news.pcsoft> :
Pour être plus précis : - je ne parle pas de la fonction texteHauteur() qui ne convient pas à ce cas - je parle de la propriété ..HauteurFuture utilisable sur un champ autoextensible dans un état. Cette fonction est utilisée très régulièrement pour ajuster une hauteur identique pour plusieurs champs + ou - remplis ou encore pour voir si un champ va tenir sur la page ou passer à la page suivante (en partie si coupure autorisée).
Voici un extrait de l'aide PCSoft à ce sujet : La propriété ..HauteurFuture permet de connaître la hauteur d'un champ auto-extensible dans un état lorsque ce champ sera agrandi. Cette propriété permet notamment d'agrandir la taille d'un champ situé à coté d'un champ auto-extensible (cas d'un état fiche par exemple).
Puisque ton texte n'est pas formaté, il n'est même pas nécessaire d'utiliser un champ RTF Prévois un champ texte autoextensible dans une bloc non imprimé de l'état. Le code pourrait être ceci :
//momChampCaché est un champ texte autoextensible //La largeur du champ est identique à celle du champ réel (sinon la hauteur change aussi !) //on suppose que la police définie dans l'état est OK //mais on pourrait aussi varier la police pour une plus 'courte' en impression d'un même texte
iHtrFuture est un entier nTaille est un entier = 12 //la + grande police souhaitée momChampCaché..PoliceTaille = nTaille momChampCaché= REPETE("Texte à imprimer",50) //pour le test
BOUCLE iHtrFuture = MoiMême..HauteurFuture TRACE(iHtrFuture) //tu verras la hauteur diminuer au fur et à mesure SI iHtrFuture <= 30 ALORS //si la hauteur du champ réel est de 30 monChampReel..policeTaille = nTaille monChampReel = monChampCaché SORTIR FIN SI nTaille = 6 ALORS Info("Le texte est trop long, même en taille 6 points") //Imprimer ce qui peut l'être ??? monChampReel..policeTaille = 6 monChampReel = monChampCaché //une partie sera invisible ! //ou mettre une erreur et stopper l'état ??? à toi de voir FIN nTaille -- MoiMême..PoliceTaille = nTaille FIN J'ai testé pour être certain de ce que j'avance : y'a aucun souci ! Si tu exécutes ce code, tu verras dans la TRACE la hauteur future du champ caché diminuer au fur et à mesure de la diminution de la police affectée au champ caché. J'espère cette fois que tout sera OK pour toi. Bon boulot. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 512 mensajes |
|
| Publicado el 01,junio 2012 - 18:12 |
Bonjour à tous,
Juste un petit mot pour remercier Christian de sa contribution.
 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4 mensajes |
|
| Publicado el 07,marzo 2019 - 11:16 |
| bonjour les gars j'ai un jeune soucis. Comment je peux faire pour qu'il ait dans un mot de passe au moin une lettre majuscule que l'utilisateur peux mettre a n'importe quel position du mot de passe. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 326 mensajes |
|
| Publicado el 08,marzo 2019 - 09:43 |
Bonjour à tous.
Ayant été confronté au cas d’adaptation de la taille de la police d'un libellé en fonction de son contenu. Je n'ai trouvé aucune fonction Windev capable de faire une police dynamique ! J'ai donc développé une petite fonction qui fait le job en fonction de la police, de son type et du type de champ "fixes" ou multi ligne autoextensible.
ATTENTION pour les champs fixes : vérifier dans la description de l'état le retrait en mm en hauteur et largeur : dans mon cas j'ai 0.000 et 0.000 mais par sécurité je retire dans le calcul de la largeur et hauteur du champ 2mm car j'ai constaté qu'en ne le faisant pas il y quelques fois des libellés tronqués !
-> vous pouvez mettre cette fonction dans l'état -> si vous a avez une rubrique fixe par exemple "Rub_Client" : vous alimentez cette rubrique puis après vous lancez PL_PoliceDynamique(RUB_Client,"Arial",iGras,Faux) Automatiquement la police la plus grande possible sera mise -> pour un champ autoextensible passer le dernier paramètre à vrai
Bon dev.
Michel.
Procedure PL_PoliceDynamique(Mon_champ,Nom_style,monstyle,champ_multi_ligne)
Mapolice est une Police Malargeur est un entier Mahauteur est un entier dimension_police est un entier mon_numero_police est un entier
dimension_police = 70
SI champ_multi_ligne = Vrai ALORS BOUCLE Mapolice = PoliceCrée("ma_police",dimension_police,monstyle ) Mon_champ..Police = Mapolice SI Mon_champ..HauteurFuture <= Mon_champ..Hauteur ALORS RETOUR FIN dimension_police -= 1 FIN
SINON BOUCLE iCréePolice(mon_numero_police,dimension_police,monstyle ,Nom_style) Malargeur = iLargeurTexte(iPolice(mon_numero_police) + Mon_champ) Mahauteur = iHauteurTexte(iPolice(mon_numero_police) + Mon_champ) SI Malargeur < Mon_champ..Largeur -2 ET Mahauteur < Mon_champ..Hauteur -2 ALORS Mapolice = PoliceCrée("ma_police",dimension_police,monstyle ) Mon_champ..Police = Mapolice RETOUR FIN dimension_police -= 1 FIN FIN
|
| |
| |
| | | |
|
| | |
| |
Miembro registrado 326 mensajes |
|
| Publicado el 08,marzo 2019 - 09:49 |
Re Bonjour ! J'ai fait un "up" sur post de 2012 -> la faute à "HABSON10" et bien sur la mienne. La prochaine fois je regarderai la date du premier post !
En réponse à HABSON10 -> dans le principe tu parcours ta chaine pour voir si tu as une majuscule sinon tu peux aussi aller voir du côté des expressions régulières. Michel. |
| |
| |
| | | |
|
| | | | |
| | |
|