RichTextBox

jjmiller Messages postés 3 Date d'inscription dimanche 30 janvier 2005 Statut Membre Dernière intervention 5 février 2006 - 5 févr. 2006 à 14:37
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 - 6 févr. 2006 à 10:13
J'utilise un RichTextBox pour afficher le flot de données dans une appli Tcp Client. La propiété MacLenght est à 0 pour ne pas limiter la taille du buffer. Par contre je voudrais le limiter à n KOctects et lorsque que cette limite serait atteinte d'effacer les 1ere lignes du flot afin de conserver les n KOctets allant de la derniere ligne affichée à la n KOctets précédent. Y aurait il un moyen de réaliser cela sans nuire à la vitesse d'affichage sachant que le flot de données est important(serveur Tcp sur une carte à base de PPC750).
Merçi d'avance

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
5 févr. 2006 à 15:36
Salut
Beau problème bien expliqué (ça change)
Il y a une solution simple :
A chaque fois que tu insères du texte, tu testes la nouvelle longueur :
Sachant que chaque caractère est un octet, il suffit de compter le nombre de caractères avec
Len(maRichTextBox.Text) ' ou .TextRTF si tu sauvegardes aussi le format.
et de faire la sauvegarde avec
SaveFile "c:\mon fichier.txt", RichTextLib.LoadSaveConstants.rtfText ' ou rtfRTF si tu veux garder les couleurs et autres caractéristiques

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)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
5 févr. 2006 à 15:42
lol, hors sujet ! que je suis con.
je ne me rappelais plus que tu voulais supprimer les premières lignes :
Quand tu fais ton test avec Len(...), il te suffit te compter les caractères et de faire des opérations :
LongMax = 20000 ' taille en octets
If Len(RTB1.Text) > LongMax Then
RTB1.SelStart = 0 ' début
RTB1.SelLength = Len(RTB1.Text) - LongMax
RTB1.SelText = vbNullString
End If

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)
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 48
6 févr. 2006 à 02:43
salut,

voici également un exemple qui me parraît être plus rapide.

(exemple avec TxtBox, pareil pour RTB)






Option Explicit

Const LENB_MAX As Long = 12&

Const LENB_SOUST As Long = 4&

'

Private Sub Text1_Change()

If LenB (Text1.Text) > LENB_MAX Then
Text1.Text = RightB$(Text1.Text, LENB_MAX - LENB_SOUST)

Text1.SelStart = Len(Text1.Text)

End If

End Sub




<small> Coloration
syntaxique automatique [AFCK]</small>



++

PCPT [AFCK]
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
6 févr. 2006 à 10:13
Jack tu fais 2 len(RTF): Stocker la quantité reçue dans une variable
pour savaoir à l' avance combien il fait, et effacer les n premiers
quand il faut.



recus=recus+bytes_total

if recus > max

recus=recus-max

.selstart=0

.sellength=recus

.seltext = ""

endif

et ça repart
0
Rejoignez-nous