Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Memo mit SendMessage beschreiben
keyboardwizard - Mi 07.01.09 11:48
Titel: Memo mit SendMessage beschreiben
Hallo,
für einen RS232-Monitor muss ich die eingehenden Daten in einem Feld anzeigen.
Bislang mache ich das mit TMemo. Das geht solange gut, bis etwa 500 Zeilen im Memo drin sind. Danach fängt das Bild an zu ruckeln, weil das Scrollen so lange dauert. Von einem anderen Entwickler, dessen Programm einwandfrei läuft, habe ich die Kurz-Info: "Ich mache das mit SendMessage". Mehr weiß ich leider nicht.
Da die Delphi-Hilfe mich mal wieder nicht weiterbringt, hier die Frage: Wie gebe ich mit SendMessage eine Zeile an TMemo/TRichEdit zur Anzeige weiter?
Ich bin natürlich auch an anderen Lösungen interessiert. Es muss nur schön aussehen ;-)
Gruß
kbw
Moderiert von
Narses: Beitragsformatierung überarbeitet.
Xentar - Mi 07.01.09 12:23
Also ich hab mit TMemo bisher keine Probleme gehabt - zumindest nicht schon bei 500 Zeilen.
Wie befüllst du das denn im Moment?
Ich rate mal:
Delphi-Quelltext
1:
| Memo1.Text := Memo1.Text + 'blah'; |
?
Edit: Äh.. worum genau geht es jetzt? Um das Befüllen? Oder Scrollen? Oder Scrollen während im Hintergrund befüllt wird, oder wie oder was?
keyboardwizard - Mi 07.01.09 13:46
Das sieht so ähnlich aus:
Delphi-Quelltext
1:
| MemoIn.Lines.Add (Anzeigestring); |
Es kommen pro Sekunde etwa 8 Zeilen mit je 186 Zeichen über RS232 rein, die zeilenweise ausgegeben werden.
Ich bin mittlerweile dazu übergegangen, nach 250 Zeilen 50 Zeilen zu löschen, damit der Inhalt nicht zu groß wird.
Es hilft aber nix.
Gruß
kbw
Moderiert von
Narses: Delphi-Tags hinzugefügt
jaenicke - Mi 07.01.09 13:57
Warum nimmst du denn ein Memo? Nimm doch z.B. eine VirtualTreeView als ListView, dann hast du da keinerlei Probleme. Damit kannst du auch eine Million Einträge in einer Sekunde einfügen.
Rein zur Anzeige ist das sehr gut geeignet, weil die Komponente extrem schnell ist.
// EDIT:
Oder füge die neuen Zeilen am Anfang ein, dann muss nix gescrollt werden.
Yogu - Mi 07.01.09 13:59
Hallo,
mit
SendMessage könnte das ungefähr so aussehen: Du brauchst eine lokale String-Variable, die den Text beinhaltet, der nacher im Memo stehen soll. Dann übergibtst du ihn mit folgender Zeile an das Memo:
Delphi-Quelltext
1:
| Memo.Perform(WM_SETTEXT, PChar(Text), nil); |
(oder so ähnlich, ich habe gerade kein Delphi)
keyboardwizard - Mi 07.01.09 14:09
Hallo Sebastian, hallo YOGU,
das sind zwei gute Hinweise, die ich erstmal ausprobieren muss.
Vielen Dank soweit.
Gruß
kbw
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!