LIMITER LE NOMBRE DE LIGNES DANS UN TEXTBOX

Signaler
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45562-limiter-le-nombre-de-lignes-dans-un-textbox

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
En résumé, cette source est donc inutilisable dans un prog à distribuer. Il faut toujours tester ses codes avant de les publier en n'oubliant jamais qu'avec l'utilisateur le pire est toujours certain.

Ceci reste malgré tout faisable mais pas en modifiant la sélection ni toute autre méthode qui provoque en event EN_CHANGE.
Par WM_SETTEXT est une possibilité, Modifier le texte direct dans le buffer du textbox (EM_GETHANDLE) en est une autre.
Messages postés
2
Date d'inscription
mardi 29 janvier 2002
Statut
Membre
Dernière intervention
31 janvier 2008

Il n'y a pas forcément 4 retours chariots, c'est ailleurs pour ça que je fais appel à l'API. Pense au wordwarp, la textbox fait des retours à la ligne automatiques.

D'autre part je ne supprime pas ce qui dépasse la 4ème ligne, mais je supprime tous les caractères en trop de la dernière frappe de l'utilisateur. Ce qui fait que si tu insères du texte au milieu du texte déjà existant, et que ça te fait dépasser 4 lignes, ce sont tes derniers caractères insérés qui seront supprimés, et non pas la fin du texte.

Brunews, tu as raison, texte trop grand + récursion = dépassement de pile. Note que pour un "petit" copié collé ou pour une frappe classique, il n'y a pas ce problème.
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
Par ailleurs, je trouve un peu dommage de supprimer purement et simplement tout ce qui depasse la 4eme ligne.

Pourquoi ne pas supprimer que les retour chariots en trop.

Voici une suggestion qui corrige également le problème d'espace pile :

Private Sub Textbox1_Change()
Dim i As Integer
Dim i2 As Integer
If (SendMessageLong(Textbox1.hWnd, EM_NOMBRELIGNE, 0&, 0&) > 4) Then
'On passe les 4 premiers retour chariots
For i = 1 To 3
i2 = InStr(i2 + 1, Textbox1.Text, vbCrLf)
Next i
If i2 > 0 Then
'On remplace les retours chariots suivants par un caractere au choix
'Ici vbNullString pour supprimer sans remplacer
Textbox1.Text = Left(Textbox1.Text, i2) & Replace(Mid(Textbox1.Text, i2 + 1), vbCrLf, vbNullString)
End If
End If
End Sub
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
'Espace de pile doit venir du fait que le code est réentrant (récursion infinie.
Surement du au Text1_Change() qui se rappelle en boucle.
Afficher les 8 commentaires