|
Etat Windev avec police dynamique ? |
Débuté par mlion, 23 jan. 2017 12:40 - 2 réponses |
| |
| | | |
|
| |
Membre enregistré 326 messages Popularité : +15 (19 votes) |
|
Posté le 23 janvier 2017 - 12:40 |
Bonjour, J'ai cherché dans la documentation et dans les forums comment adapter dynamiquement la taille d'une police en fonction du contenu du champ à imprimer et de la largeur de la Zone Je n'ai pas trouvé. J'ai donc fait rapidement ce bout de code qui permet de modifier la taille (ici un titre d'état mais le code est adaptable à d'autres champs) en fonction de la longueur de celui-ci. Je n'ai fait la modification de police qu'en tenant compte de la largeur sans me soucier de la hauteur (là aussi il faudrait tester la hauteur). Je passe d'une police de 48 à 8 via des pas + ou - grands. J'utilise la fonction ilargeurtexte avec ipolice mais non utilisables dans un état Windev donc je suis aussi obligé d'utiliser PoliceCrée utilisable dans un état ! (pas simple). Voilà le code mis dans mon état :
TITREDOC = gMon_titre
iCréePolice(1,48,iGras,"Trebuchet MS") iCréePolice(2,45,iGras,"Trebuchet MS") iCréePolice(3,40,iGras,"Trebuchet MS") iCréePolice(4,35,iGras,"Trebuchet MS") iCréePolice(5,30,iGras,"Trebuchet MS") iCréePolice(6,25,iGras,"Trebuchet MS") iCréePolice(7,20,iGras,"Trebuchet MS") iCréePolice(8,15,iGras,"Trebuchet MS") iCréePolice(9,12,iGras,"Trebuchet MS") iCréePolice(10,10,iGras,"Trebuchet MS") iCréePolice(11,8,iGras,"Trebuchet MS")
Mapolice_1 est une Police = PoliceCrée("Trebuchet MS",48,iGras) Mapolice_2 est une Police = PoliceCrée("Trebuchet MS",45,iGras) Mapolice_3 est une Police = PoliceCrée("Trebuchet MS",40,iGras) Mapolice_4 est une Police = PoliceCrée("Trebuchet MS",35,iGras) Mapolice_5 est une Police = PoliceCrée("Trebuchet MS",30,iGras) Mapolice_6 est une Police = PoliceCrée("Trebuchet MS",25,iGras) Mapolice_7 est une Police = PoliceCrée("Trebuchet MS",20,iGras) Mapolice_8 est une Police = PoliceCrée("Trebuchet MS",15,iGras) Mapolice_9 est une Police = PoliceCrée("Trebuchet MS",12,iGras) Mapolice_10 est une Police = PoliceCrée("Trebuchet MS",10,iGras) Mapolice_11 est une Police = PoliceCrée("Trebuchet MS",8,iGras)
Malargeur est un entier Trace("largeur boite = " + TITREDOC..Largeur) POUR i = 1 A 11 Malargeur = iLargeurTexte(iPolice(i) + gMon_titre) SI Malargeur < TITREDOC..Largeur - 2 ALORS Trace("i = " + i + " " + Malargeur) TITREDOC..Police = {"Mapolice_"+i,indVariable} SORTIR FIN FIN
Question : Je trouve cela un peu lourd -> y a t-il plus simple que mon code ou pas ? N'est-ce pas étonnant que PCSoft n'ait pas une fonction déjà existante ?
Merci de vos lumières.
Michel. |
| |
| |
| | | |
|
| | |
| |
Posté le 23 janvier 2017 - 15:04 |
Bonjour
non, il n'y a pas de fonction existante.
Mets simplement ton code dans une procédure globale avec le nom du champ et la chaine en paramètre, et tu as créé la fonction en question.
Cordialement
-- Fabrice Harari Consultant WinDev, WebDev et WinDev Mobile International
A votre disposition : WXShowroom.com, WXReplication (open source) et maintenant WXEDM (open source)
Plus d'information sur http://fabriceharari.com
Le 1/23/2017 à 6:40 AM, mlion a écrit :
Bonjour, J'ai cherché dans la documentation et dans les forums comment adapter dynamiquement la taille d'une police en fonction du contenu du champ à imprimer et de la largeur de la Zone Je n'ai pas trouvé. J'ai donc fait rapidement ce bout de code qui permet de modifier la taille (ici un titre d'état mais le code est adaptable à d'autres champs) en fonction de la longueur de celui-ci. Je n'ai fait la modification de police qu'en tenant compte de la largeur sans me soucier de la hauteur (là aussi il faudrait tester la hauteur). Je passe d'une police de 48 à 8 via des pas + ou - grands. J'utilise la fonction ilargeurtexte avec ipolice mais non utilisables dans un état Windev donc je suis aussi obligé d'utiliser PoliceCrée utilisable dans un état ! (pas simple). Voilà le code mis dans mon état : TITREDOC = gMon_titre
iCréePolice(1,48,iGras,"Trebuchet MS") iCréePolice(2,45,iGras,"Trebuchet MS") iCréePolice(3,40,iGras,"Trebuchet MS") iCréePolice(4,35,iGras,"Trebuchet MS") iCréePolice(5,30,iGras,"Trebuchet MS") iCréePolice(6,25,iGras,"Trebuchet MS") iCréePolice(7,20,iGras,"Trebuchet MS") iCréePolice(8,15,iGras,"Trebuchet MS") iCréePolice(9,12,iGras,"Trebuchet MS") iCréePolice(10,10,iGras,"Trebuchet MS") iCréePolice(11,8,iGras,"Trebuchet MS")
Mapolice_1 est une Police = PoliceCrée("Trebuchet MS",48,iGras) Mapolice_2 est une Police = PoliceCrée("Trebuchet MS",45,iGras) Mapolice_3 est une Police = PoliceCrée("Trebuchet MS",40,iGras) Mapolice_4 est une Police = PoliceCrée("Trebuchet MS",35,iGras) Mapolice_5 est une Police = PoliceCrée("Trebuchet MS",30,iGras) Mapolice_6 est une Police = PoliceCrée("Trebuchet MS",25,iGras) Mapolice_7 est une Police = PoliceCrée("Trebuchet MS",20,iGras) Mapolice_8 est une Police = PoliceCrée("Trebuchet MS",15,iGras) Mapolice_9 est une Police = PoliceCrée("Trebuchet MS",12,iGras) Mapolice_10 est une Police = PoliceCrée("Trebuchet MS",10,iGras) Mapolice_11 est une Police = PoliceCrée("Trebuchet MS",8,iGras)
Malargeur est un entier Trace("largeur boite = " + TITREDOC..Largeur) POUR i = 1 A 11 Malargeur = iLargeurTexte(iPolice(i) + gMon_titre) SI Malargeur < TITREDOC..Largeur - 2 ALORS évite que le titre soit tronqué ?! Trace("i = " + i + " " + Malargeur) TITREDOC..Police = {"Mapolice_"+i,indVariable} SORTIR FIN FIN Question : Je trouve cela un peu lourd -> y a t-il plus simple que mon code ou pas ? N'est-ce pas étonnant que PCSoft n'ait pas une fonction déjà existante ? Merci de vos lumières. Michel. |
| |
| |
| | | |
|
| | |
| |
Posté le 19 octobre 2020 - 14:35 |
La fonction ci-dessous renvoie faux tant que la police est trop grande pour que le texte rentre dans la zone Elle fonctionne dans tous les cas.
Le call se fait comme cela
TANTQUE PAS cPrint.Check_TaillePolice("LIBELLE_ETAT", LIBELLE_ETAT) LIBELLE_ETAT..PoliceTaille FIN
PROCÉDURE PUBLIQUE GLOBALE Check_TaillePolice(pe_NomChamp est une chaîne, pe_Texte est une chaîne)
ol_txt est un string ol_txt = pe_Texte
ol_strSize est un SizeF dynamique
//Regular 0 Texte Normal. //Bold 1 Texte gras. //Italic 2 Texte italique. //Underline 4 Texte souligné. //Strikeout 8 Texte barré d'une ligne à mi-hauteur.
// Reste à gérer le style (italique gras ...) vl_val est un entier SI {pe_NomChamp, indChamp}..PoliceGras ALORS vl_val += 1 FIN SI {pe_NomChamp, indChamp}..PoliceItalique ALORS vl_val += 2 FIN SI {pe_NomChamp, indChamp}..PoliceSoulignée ALORS vl_val += 4 FIN SI {pe_NomChamp, indChamp}..PoliceBarrée ALORS vl_val += 8 FIN
ol_font est un System.Drawing.Font dynamique
SELON vl_val CAS 0 ol_fnt est un System.Drawing.Font({pe_NomChamp, indChamp}..PoliceNom, {pe_NomChamp, indChamp}..PoliceTaille) ol_font <- ol_fnt CAS 1 ol_fnt est un System.Drawing.Font({pe_NomChamp, indChamp}..PoliceNom, {pe_NomChamp, indChamp}..PoliceTaille, FontStyle.Bold) ol_font <- ol_fnt CAS 2 ol_fnt est un System.Drawing.Font({pe_NomChamp, indChamp}..PoliceNom, {pe_NomChamp, indChamp}..PoliceTaille, FontStyle.Italic) ol_font <- ol_fnt CAS 3 ol_fnt est un System.Drawing.Font({pe_NomChamp, indChamp}..PoliceNom, {pe_NomChamp, indChamp}..PoliceTaille, FontStyle.Bold | FontStyle.Italic) ol_font <- ol_fnt CAS 4 ol_fnt est un System.Drawing.Font({pe_NomChamp, indChamp}..PoliceNom, {pe_NomChamp, indChamp}..PoliceTaille, FontStyle.Underline) ol_font <- ol_fnt CAS 5 ol_fnt est un System.Drawing.Font({pe_NomChamp, indChamp}..PoliceNom, {pe_NomChamp, indChamp}..PoliceTaille, FontStyle.Underline | FontStyle.Bold) ol_font <- ol_fnt CAS 6 ol_fnt est un System.Drawing.Font({pe_NomChamp, indChamp}..PoliceNom, {pe_NomChamp, indChamp}..PoliceTaille, FontStyle.Underline | FontStyle.Italic) ol_font <- ol_fnt CAS 7 ol_fnt est un System.Drawing.Font({pe_NomChamp, indChamp}..PoliceNom, {pe_NomChamp, indChamp}..PoliceTaille, FontStyle.Bold | FontStyle.Italic | FontStyle.Underline) ol_font <- ol_fnt CAS 8 ol_fnt est un System.Drawing.Font({pe_NomChamp, indChamp}..PoliceNom, {pe_NomChamp, indChamp}..PoliceTaille, FontStyle.Strikeout) ol_font <- ol_fnt CAS 9 ol_fnt est un System.Drawing.Font({pe_NomChamp, indChamp}..PoliceNom, {pe_NomChamp, indChamp}..PoliceTaille, FontStyle.Strikeout | FontStyle.Bold) ol_font <- ol_fnt CAS 10 ol_fnt est un System.Drawing.Font({pe_NomChamp, indChamp}..PoliceNom, {pe_NomChamp, indChamp}..PoliceTaille, FontStyle.Strikeout | FontStyle.Italic) ol_font <- ol_fnt CAS 11 ol_fnt est un System.Drawing.Font({pe_NomChamp, indChamp}..PoliceNom, {pe_NomChamp, indChamp}..PoliceTaille, FontStyle.Strikeout | FontStyle.Bold | FontStyle.Italic) ol_font <- ol_fnt CAS 12 ol_fnt est un System.Drawing.Font({pe_NomChamp, indChamp}..PoliceNom, {pe_NomChamp, indChamp}..PoliceTaille, FontStyle.Strikeout | FontStyle.Underline) ol_font <- ol_fnt CAS 13 ol_fnt est un System.Drawing.Font({pe_NomChamp, indChamp}..PoliceNom, {pe_NomChamp, indChamp}..PoliceTaille, FontStyle.Strikeout | FontStyle.Underline | FontStyle.Bold) ol_font <- ol_fnt CAS 14 ol_fnt est un System.Drawing.Font({pe_NomChamp, indChamp}..PoliceNom, {pe_NomChamp, indChamp}..PoliceTaille, FontStyle.Strikeout | FontStyle.Underline | FontStyle.Italic) ol_font <- ol_fnt CAS 15 ol_fnt est un System.Drawing.Font({pe_NomChamp, indChamp}..PoliceNom, {pe_NomChamp, indChamp}..PoliceTaille, FontStyle.Strikeout | FontStyle.Underline | FontStyle.Italic | FontStyle.Bold) ol_font <- ol_fnt FIN
ol_Format est un StringFormat() ol_Format.Trimming = StringTrimming.Word
ol_pd est un PrintDocument dynamique = allouer un PrintDocument(); ol_g est un Graphics <- ol_pd.PrinterSettings.CreateMeasurementGraphics(); ol_g.PageUnit = GraphicsUnit.Millimeter
ol_strSize <- ol_g.MeasureString(ol_txt, ol_font, {pe_NomChamp, indChamp}..Largeur, ol_Format)
RENVOYER ol_strSize.Height <= {pe_NomChamp, indChamp}..Hauteur |
| |
| |
| | | |
|
| | | | |
| | |
|