Tmemo ohne Flackern nach unten Scrollen.. [gelöst]

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1452
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Tmemo ohne Flackern nach unten Scrollen.. [gelöst]

Beitrag von corpsman »

Servus zusammen,
ich bastle immer wieder Programme welche "logdaten" generieren die ich dem User zur Laufzeit anzeigen will.

Dazu setze ich eigentlich immer ein TMemo auf ein Formular und schreibe etwas in dieser Art:

Code: Alles auswählen

Procedure TForm1.AddLog(Const Value: String);
Begin
  memo1.lines.BeginUpdate;
  memo1.lines.Text := memo1.lines.Text + Value;
  memo1.lines.EndUpdate;
  memo1.SelStart := length(Memo1.Text);
  Application.ProcessMessages;
End;  
Das Problem ist nun wenn sich über die Zeit ein langer Log angesammelt hat, dann springt das Memo bei jeder Änderung immer zur 1. Zeile und dann wieder nach unten wegen meiner Selstart Zuweisung.

Kennt jemand einen Weg einen "Textlog" auf der Form zu realisieren der "Flüssig" scrollt ?
Zuletzt geändert von corpsman am Mi 11. Okt 2023, 06:12, insgesamt 1-mal geändert.
--
Just try it

Benutzeravatar
theo
Beiträge: 10334
Registriert: Mo 11. Sep 2006, 19:01

Re: Tmemo ohne Flackern nach unten Scrollen..

Beitrag von theo »

Ich würde vielleicht primär in eine StringList loggen und automatisch nur jew. die letzten paar Zeilen ins Memo kopieren.
Das ganze Log könnte man dann "on-demand" ins Memo laden.
Vllt. auch mit einem StringGrid probieren.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1452
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Tmemo ohne Flackern nach unten Scrollen..

Beitrag von corpsman »

Ist abhängig von der Textheight die bei mir zum Glück 1 mal beim Programmstart berechnet werden kann.


Code: Alles auswählen

Procedure TForm1.AddUnformatedLog(Const Value: String);
Var
  i, lineCount: Integer;
Begin
  LogStringList.BeginUpdate;
  LogStringList.Text := trim(LogStringList.Text + Value);
  LogStringList.EndUpdate;
  lineCount := trunc(Memo1.ClientRect.Bottom / LogFontHeight);
  memo1.lines.BeginUpdate;
  memo1.lines.Clear;
  For i := max(0, LogStringList.Count - lineCount) To LogStringList.Count - 2 Do Begin
    Memo1.Lines.Text := (Memo1.Lines.Text + LogStringList[i]) + LineEnding;
  End;
  memo1.lines.EndUpdate;
  memo1.SelStart := length(Memo1.Lines.Text);
  Application.ProcessMessages;
End; 
So gehts, aber glücklich bin ich nicht damit ..
--
Just try it

schoschy
Beiträge: 18
Registriert: Di 18. Okt 2022, 15:46

Re: Tmemo ohne Flackern nach unten Scrollen..

Beitrag von schoschy »

ich appende immer nur ins memo.
bei einer Anzahl im mittleren 5stelligen Bereich fängt dieses an Probleme zu machen, weshalb ich bei 20k Zeilen das memo leere.
wenn die Anzeige wichtig ist, kannst du diese ja in eine txt übergeben.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1452
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Tmemo ohne Flackern nach unten Scrollen..

Beitrag von corpsman »

@schoschy
Das append hat das flackern nicht, was cool ist, wenn ich Zeilenweise hinzufüge würde das auch schon reichen.
Da ich aber über einen Puffer aus einem TProcess lese kriege ich die Zeilenumrüche recht wirr, da werde ich mir wohl dennoch einen Puffer bauen müssen ...
--
Just try it

wp_xyz
Beiträge: 4781
Registriert: Fr 8. Apr 2011, 09:01

Re: Tmemo ohne Flackern nach unten Scrollen..

Beitrag von wp_xyz »

Ich würde, wenn es zu vermeiden ist, gar nicht mit Memo.Lines.Text arbeiten, denn es ist sehr aufwendig diesen Text bereitzustellen. Warum fügst du die neuen Zeilen nicht mit Memo.Lines.Add hinzu? Und das setzt auch gleich den Cursor hinter die letzte Zeile (zumindest bei mir auf Win)

schoschy
Beiträge: 18
Registriert: Di 18. Okt 2022, 15:46

Re: Tmemo ohne Flackern nach unten Scrollen..

Beitrag von schoschy »

ich appende gerne auch ganze header.
ist mir bisher noch nicht aufgefallen, dass hier Probleme bestehen.

https://lazarus-ccr.sourceforge.io/docs ... ppend.html
"It is a convenience method, and calls the Add method in the Lines member."

gibt aber auch mehrere add funktionen für memo.lines
addstrings würde mir spontan einfallen.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1452
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Tmemo ohne Flackern nach unten Scrollen.. [gelöst]

Beitrag von corpsman »

Also ich werde mir nun einen Stream bauen der nach "CTR" selektiert und dann via Append arbeiten, das ist der Konsens der Funktioniert und als "Beispiel" für zukünftige Projekte auch etwas taugt.

Danke für den Hinweis und die Diskussionen *g*
--
Just try it

Antworten