Inhalte aus RichTextBox löschen?

Hey,

ich habe eine Richtextbox für einen Chat Client, wo viel Text und Grafiken eingefügt werden. Habe jedoch das Problem, dass nach einer längeren Chatsession das System immer mehr an seine Grenzen getrieben wird. Dafür habe ich eine Funktion, die die Richtextbox wieder leert (ist aber unkomfortabel).

Ich hätte nun aber gerne, dass die ältesten Zeichen automatisch gelöscht werden. Zum Beispiel wenn enthaltene Zeichen die 2000 übersteigt, dann lösche die obersten 100 Zeichen, oder so.

Wie mach ich das am besten? Ich könnte mit SelStart den Cursor nach oben setzen und dann ganz explizit eine Anzahl an Zeichen markieren (SelLength) und sie durch nichts ersetzen. Das hätte aber den Nachteil, dass man das als Benutzer ja sieht und mitbekommt. Soll aber möglichst im Hintergrund passieren.

Hat jemand ne Idee?

Grüße
Lars

Hallo,

Hat jemand ne Idee?

wie wäre es damit?

Private Sub RichTextBox1\_Change()
 If Len(RichTextBox1.Text) \> 500 Then
 po = InStr(RichTextBox1.Text, vbCrLf)
 RichTextBox1.Text = Right(RichTextBox1.Text, Len(RichTextBox1.Text) - po)
 End If
End Sub

Danach mußt Du zwar den Cursor wieder an das Ende stellen, aber das wirst Du IMHO ohnehin nicht vermeiden können. Ob das schnell genug ist, mußt Du auch erst testet.

Gruß, Rainer

Hey Rainer,

danke erstmal, im Prinzip funktioniert das gut. Problem nur: Bei der Löschaktion gehen sämtliche Formatierungen verloren. Das hatte ich schon öfter, wenn ich versucht habe etwas aus einer RichTextBox zu löschen…

Lässt sich das vielleicht verhindern?

Gruß
Lars

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Lars,

danke erstmal, im Prinzip funktioniert das gut. Problem nur:
Bei der Löschaktion gehen sämtliche Formatierungen verloren.
Das hatte ich schon öfter, wenn ich versucht habe etwas aus
einer RichTextBox zu löschen…

Lässt sich das vielleicht verhindern?

oops, Du hast Recht. ich habe mal etwas gesucht und experimentiert … sieh Dir das mal an:

Private Sub Command1\_Click()
 po1 = InStr(RichTextBox1.TextRTF, "\uc1") + 5
 po2 = InStr(po1 + 4, RichTextBox1.TextRTF, "\par")
 RichTextBox1.TextRTF = Left(RichTextBox1.TextRTF, po1) \_
 + Right(RichTextBox1.TextRTF, Len(RichTextBox1.TextRTF) - po2)
End Sub

Da bleibt die Formatierung erhalten.

Gruß, Rainer

Private Sub Command1_Click()
po1 = InStr(RichTextBox1.TextRTF, „\uc1“) + 5
po2 = InStr(po1 + 4, RichTextBox1.TextRTF, „\par“)
RichTextBox1.TextRTF = Left(RichTextBox1.TextRTF, po1) _

  • Right(RichTextBox1.TextRTF, Len(RichTextBox1.TextRTF) -
    po2)
    End Sub

Da bleibt die Formatierung erhalten.

Gruß, Rainer

Hey Rainer,

super - du ahnst nicht, wielange ich an diesem Problem schon rumgebastelt hab :wink: Vielen Dank dafür.

Ja, was die Geschwindigkeit angeht - man es schon gemerkt, dass er da kurz nach oben und wieder zurück springt. Ich hab es jetzt dadurch gelöst, dass ich einfach eine zweite Textbox erstellt hab. Vor der ganzen Aktion wird der bestehende Text in die zweite Textbox kopiert und diese eingeblendet - diese verdeckt dann die ursprüngliche Textbox solange, bis die Änderungen an der ursprünglichen Textbox vorgenommen sind. Dann wird die zweite Textbox wieder ausgeblendet.

Als Benutzer sieht man das jetzt sehr sauber, kein Flimmern erkennbar :smile:

Grüße
Lars

Hallo Lars,

super - du ahnst nicht, wielange ich an diesem Problem schon
rumgebastelt hab :wink: Vielen Dank dafür.

Nichts zu danken. Du mußt Dir das noch einmal genau ansehen, den .TextRtf in eine Textbox kopieren. Nicht daß Du mit dem RTF Format doch noch Probleme bekommst. Die Formatierungsbefehle wirken, bis sie durch einen Gegenbefehl aufgehoben werden. Wenn Du den tag aus dem Text löschst, weil Du die Zeile löschst, der Tag aber nicht wieder aufgehoben wird, dann mußt Du Dir den Tag merken und wieder einfügen, sonst geht doch noch etwas an der Formatierung kaputt. Bis darauf, daß die Tags mit Backslash statt spitzen Klammern markiert werden, erinnert das aber stark an HTML, sieht recht übersichtlich aus. Das mußt Du nur ansehen, dann bekommst Du das hin.

Ja, was die Geschwindigkeit angeht - man es schon gemerkt,
dass er da kurz nach oben und wieder zurück springt. Ich hab
es jetzt dadurch gelöst, dass ich einfach eine zweite Textbox
erstellt hab. Vor der ganzen Aktion wird der bestehende Text
in die zweite Textbox kopiert und diese eingeblendet - diese
verdeckt dann die ursprüngliche Textbox solange, bis die
Änderungen an der ursprünglichen Textbox vorgenommen sind.
Dann wird die zweite Textbox wieder ausgeblendet.

Als Benutzer sieht man das jetzt sehr sauber, kein Flimmern
erkennbar :smile:

Verdoppelst Du damit die Zeit nicht noch? das rennt zwar nicht weg, aber darüber kannst Du noch einmal nachdenken, das geht IMHO schneller und auch ohne flimmern.

Gruß, Rainer

Flimmern unterdrücken
Hallo Lars,

ich habe den Beitrag gefunden.

http://www.wer-weiss-was.de/cgi-bin/forum/showarchiv…

Ich wußte doch, daß das etwas war, Alex hatte die Lösung. :smile:

Gruß, Rainer