Page 1 sur 1
Formater une phrase en plusieurs lignes
Posté : ven. 02 mars 2018 18:29
par walkson
Bonjour,
Je souhaite formater une phrase qui est d'une ligne (pas de retour de chariot) en plusieurs lignes pour pouvoir la lire dans un Tooltip()
J'ai essayé plusieurs méthodes dont la moins pire est celle-ci
#include <Array.au3>$a = "Monsieur Louis DUPONT a souhaité que lui soit transféré sur son compte titres, la quote-part lui revenant dans les titres ; il lui a été transféré à ce titre pour une valeur de 4501,32€"$regex = "([^" & Chr(32) & "]{1,50})+"$rep = StringRegExp($a,$regex,3)_ArrayDisplay($rep)Local $convert, $y = 1For $i = 0 To UBound($rep) - 1 $convert &= $rep[$i] & " " If $y = 8 Then $convert = $convert & @CRLF $y = 0 EndIf $y += 1NextToolTip($convert,150,400,"info",0,2)MsgBox(0,"",$convert)
Dans le cas présent, il y a une ligne tous les 8 mots
Je pense qu'il y a moyen de faire plus simple mais je ne trouve pas
Merci de votre aide
Re: Formater une phrase en plusieurs lignes
Posté : ven. 02 mars 2018 19:09
par orax
Code : Tout sélectionner
$a = "Monsieur Louis DUPONT a souhaité que lui soit transféré sur son compte titres, la quote-part lui revenant dans les titres ; il lui a été transféré à ce titre pour une valeur de 4501,32€"
$convert = _wrapByRegex(50, $a)
ToolTip($convert, 150, 400, "info", 0, 2)
MsgBox(0, "", $convert)
Func _wrapByRegex($n, $s)
Return StringRegExpReplace($s, "(.{1," & $n & "})(\s|$)", "\1" & @CRLF)
; ou comme ci-dessous pour garder l'espace avant le retour à la ligne
;Return StringRegExpReplace($s, "(.{1," & $n & "})(\s|$)", "\1\2" & @CRLF)
EndFunc ;==>_wrapByRegex
J'ai simplement copié un des codes en Javascript sur
https://rosettacode.org/wiki/Word_wrap#Simple_regex
Re: Formater une phrase en plusieurs lignes
Posté : sam. 03 mars 2018 09:28
par mdanielm
@orax
C'est une solution rudimentaire qui brille par sa simplicité mais comme tu peux voir ci dessous, il faudrait mesurer les caractères.
Etudie le code suivant:
$a = "Monsieur Louis DUPONT a souhaité que lui soit transféré sur son compte titres, la quote-part lui revenant dans les titres; il lui a été transféré à ce titre pour une valeur de 4501,32€"$convert = _wrapByRegex
(60, $a) ; J'ai mis 60 au lieu de 50ToolTip($convert, 150, 400, "info", 0, 2);$convert = _wrapByRegex(60, $a)$b = "Monsieur Louis DUPONT a souhaité que lui soit transféré sur" & @crlf & _
"son compte titres, la quote-part lui revenant dans les titres;" & @crlf & _
"il lui a été transféré à ce titre pour une valeur de 4501,32€"MsgBox(0, "", $b)Func _wrapByRegex
($n, $s) Return StringRegExpReplace($s, "(.{1," & $n & "})(\s|$)", "\1" & @CRLF) ; ou comme ci-dessous pour garder l'espace avant le retour à la ligne ;Return StringRegExpReplace($s, "(.{1," & $n & "})(\s|$)", "\1\2" & @CRLF)EndFunc ;==>_wrapByRegex
Re: Formater une phrase en plusieurs lignes
Posté : sam. 03 mars 2018 13:37
par walkson
Bonjour,
Merci pour vos réponses
C'est une solution rudimentaire qui brille par sa simplicité
et c'est bien ce qu'il me plait
Ce texte sera toujours court car il est un résumé du contenu d'un fichier. Il apparait au passage de la souris sur une listview avec d'autres infos
J'avais d'autres possibilités comme _StringSize() de Melba23 ou plus simplement
Global $Edit1 = GUICtrlCreateEdit("", 0, 0, 176, 100,BitOR($ES_MULTILINE,$WS_VSCROLL,$ES_READONLY))
GUICtrlSetData(-1, $a)
avec une GUI en $WS_POPUP (valable pour un texte long) mais je perdais en souplesse par rapport à un Tooltip()
La proposition d'Orax me convient parfaitement
Re: Formater une phrase en plusieurs lignes
Posté : sam. 03 mars 2018 19:59
par orax
mdanielm a écrit : ↑sam. 03 mars 2018 09:28[...] il faudrait mesurer les caractères.
La largeur qu'occupe chaque caractère (la
chasse) ? Le résultat me semble pourtant correct.
Code : Tout sélectionner
Monsieur Louis DUPONT a souhaité que lui soit transféré sur
son compte titres, la quote-part lui revenant dans les titres;
il lui a été transféré à ce titre pour une valeur de 4501,32€
Dans le texte suivant, la largeur d'une ligne fait, au maximum, 60 caractères.
Code : Tout sélectionner
Monsieur Louis DUPONT a souhaité que lui soit transféré sur
son compte titres, la quote-part lui revenant dans les
titres;
il lui a été transféré à ce titre pour une valeur de
4501,32€
J'admets que l'aspect n'est pas esthétique, mais c'est le résultat que j'attends.
Il y a quand même un problème avec l'expression régulière. Le code suivant n'affiche pas le résultat attendu, il y a deux retour à la ligne au lieu d'un seul.
Code : Tout sélectionner
$b = "Monsieur Louis DUPONT a souhaité que lui soit transféré sur" & @CRLF & _
"son compte titres, la quote-part lui revenant dans les titres;" & @CRLF & _
"il lui a été transféré à ce titre pour une valeur de 4501,32€"
$convert = _wrapByRegex(60, $b)
MsgBox(0, "", $convert)
Func _wrapByRegex($n, $s)
Return StringRegExpReplace($s, "(.{1," & $n & "})(\s|$)", "\1" & @CRLF)
EndFunc ;==>_wrapByRegex
Re: Formater une phrase en plusieurs lignes
Posté : sam. 03 mars 2018 23:19
par mikell
@orax
"(.{1," & $n & "})(\s+|$)"
Re: Formater une phrase en plusieurs lignes
Posté : dim. 04 mars 2018 00:09
par orax
Bien vu !
