Memo schneller befüllen
-
Hallo zusammen,
ich muss ein Memo in einer Schleife mit mehreren Memo->Lines->Add() Befehlen befüllen. Das wird jedoch etwas ausgebremst, da das Memo so ständig aktualisiert wird. Ich wäre auch zufrieden, wenn das Memo nur am Ende aktualisiert wird.
Momentan löse ich das so, dass ich ein zweites Memo unsichtbar dynamisch erzeuge. Dieses wird befüllt und am Ende mit Assign die Lines kopiert.:
TMemo* tmpMemo = new TMemo(Form1); tmpMemo->Visible = false; tmpMemo->WordWrap = false; tmpMemo->Parent = Form1; Schleife{ tmpMemo->Lines->Add(irgendwas); } Memo1->Lines->Assign(tmpMemo->Lines); delete tmpMemo;
Geht das auch eleganter?
Das original Memo unsichtbar machen finde ich keine gute Lösung.Gruß
Martin
-
Du kannst alle Zeilen in einen ostringstream schreiben und den dann an das Text Attribut des Memos zuweisen. Möglicherweise gibt´s da auch eine VCL Konforme Lösung über TStrings (z.B. TStringList).
#include <string> #include <iostream> #include <sstream> using namespace std; void TForm::FillMemo() { ostringstream oss; for( irgendwas ) { AnsiString Zeile = nochwas; oss << Zeile.c_str() << "\r\n"; } Memo->Text = oss.str().c_str(); }
-
Hallo
Numm statt dem versteckten TMemo eine TStringList als Zwischenspeicher. Ansonsten ist es in Ordnung.
bis bald
akari
-
Geht auch einfacher (IMHO)
Das hier verwende ich wenn ich ein Memo füllen muss und direkt auch ans Ende scrollen will.
pMemo->Lines->BeginUpdate(); pMemo->Clear(); for (int j = 0; j < iCnt; j++) { pMemo->Lines->Add("blubb"); } pMemo->Lines->EndUpdate(); pMemo->Perform(EM_LINESCROLL, 0 , pMemo->Lines->Count -1);
-
Hallo zusammen,
ich danke Euch allen für die konstruktiven Beiträge.
Die Sache mit BeginUpdate() und EndUpdate() war eigentlich genau das, was ich gesucht hatte.
Viele Grüße
Martin