aiko74
Messages postés22Date d'inscriptionmercredi 16 février 2005StatutMembreDernière intervention17 novembre 2005
-
13 nov. 2005 à 20:00
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 2019
-
18 nov. 2005 à 23:02
[vb6]
Bonjour,
Je voudrais traiter le texte entré dans un textbox qui sera ensuite envoyer dans un document. Chaque ligne ne dois pas depassé 73 caracteres.J'aimerais eviter de couper les mots en deux donc mettre un saut de ligne au dernier espace avant le 73ème caractere de chaque lignes.
Je ne sais pas trop qoa utiliser ... selectionner les 73 premier avec Mid puis chercher le dernier espace avec InstrRev et fire plein de boucles . Peut etre y a t'il un moyen plus simple...
Merci
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 14 nov. 2005 à 02:37
Salut
Non, c'est bien ça : Chercher l'espace (avec InstrRev) qui apparait avant le 73ème caractère de ta chaine. Il n'y a guère mieux.
Autre chose : si le texte a une police proportionnelle (genre Arial), la largeur d'un texte ne dépend plus du comptage des caractères. Il faut résonner en Twips (unité de taille) des caractères.
Indices :
Me.TextLength("Codes-Sources") renvoie la longueur en twips de ce texte --> A comparer à ton TextBox.Width
Me = la Form en cours, mais fonctionne aussi avec une PictureBox.
Pour faire de bons calculs, il faut avoir mis les bons paramètres dans Me (ou PictureBox).Font ...
Mais pour la césure (coupure) de mots, il faudra de toute façon écrire la première partie (que tu prennes 73 caractères ou que tu calcules le texte à prendre en compte en fonction de sa longueur graphique)
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 15 nov. 2005 à 02:30
Option Explicit
Dim Lmax As Long
Private Sub Form_Load()
Text1 = "Bonjour," & vbCrLf
Text1 = Text1 & "Je voudrais traiter le texte
entré dans un textbox qui sera ensuite envoyer dans un document. Chaque
ligne ne dois pas depassé 73 caracteres. J'aimerais eviter de couper
les mots en deux donc mettre un saut de ligne au dernier espace avant
le 73ème caractere de chaque lignes. Je ne sais pas trop quoi utiliser
..." & vbCrLf
Text1 = Text1 & vbCrLf
Text1 = Text1 & "selectionner les 73 premiers
avec Mid puis chercher le dernier espace avec InstrRev et faire plein
de boucles. Peut etre y a t'il un moyen plus simple..."
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 16 nov. 2005 à 12:52
ha bon c'est possible j'ai pas tout testé.
je te donne l'autre méthode, , plus originaleplus fiable.
TextBox1 a une ScrollBar vertical et un BorderStyle à 1.
TextBox2 ne sert qu'à récupérer le résultat, doit être suffisamment
large pour recevoir les lignes, mais pas obligatoire ça peut être
directement une String.
Option Explicit
Dim Lmax As Long
Private Sub Form_Load()
' exemple de Texte
Text1 = "Bonjour," & vbCrLf
Text1 = Text1 & "Je voudrais traiter le texte entré dans un textbox qui sera ensuite envoyer "
Text1 = Text1 & "dans un document. Chaque ligne ne dois pas depassé 73 caracteres. J'aimerais "
Text1 = Text1 & "eviter de couper les mots en deux donc mettre un saut de ligne au dernier "
Text1 = Text1 & "espace avant le 73ème caractere de chaque lignes. Je ne sais pas trop quoi "
Text1 = Text1 & "utiliser ..." & vbCrLf
Text1 = Text1 & vbCrLf
Text1 = Text1 & "selectionner les 73 premiers avec Mid puis chercher le dernier espace avec "
Text1 = Text1 & "InstrRev et faire plein de boucles. Peut etre y a t'il un moyen plus simple..."
Lmax = 73
End Sub
Private Sub Command1_Click()
Dim s As String
Dim i As Integer
Dim j As Integer
Dim Lg As Integer
' c'est Vb qui fait tout le travail
' donc plus d'erreur de découpage
' mettre les mesures en pixels
Me.ScaleMode = 3
' la longueur dépend de la police utilisée
Text1.Font = "Courier New"
Text1.FontSize = 8
Me.Font = "Courier New"
Me.FontSize = 8
' il faut ajouter 17 pour la Scrollbar Vertical et 4 pour les bordures
Lg = Me.TextWidth(String$(Lmax, "A")) + 17 + 4
' ajouter une fin de ligne à la textBox si n'existe pas
' pour permettre de sélectionner la dernière ligne
If Right$(Text1.Text, 2) <> vbCrLf Then Text1.Text = Text1.Text & vbCrLf
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 15 nov. 2005 à 23:00
comme tu as surement remarqué, la TextBox fait exactement ce que tu
demandes, et de façon naturelle, elle coupe ses lignes soit à un
espace, soit à une fin de ligne, et s'il n'y a rien il y a "troncation
obligatoire".
il suffirait d'adapter la taille de la TextBox, et d'aller rechercher
les Lignes comme elles sont en ajoutant une fin de ligne où il n'y en a
pas.