Autor Beitrag
keyboardwizard
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 07.01.09 11:48 
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 user profile iconNarses: Beitragsformatierung überarbeitet.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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:
ausblenden 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?

_________________
PROGRAMMER: A device for converting coffee into software.
keyboardwizard Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 07.01.09 13:46 
Das sieht so ähnlich aus:

ausblenden 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 user profile iconNarses: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
Memo.Perform(WM_SETTEXT, PChar(Text), nil);					

(oder so ähnlich, ich habe gerade kein Delphi)
keyboardwizard Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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