Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Memo/Synedit Zeile hinzufügen ohne Zeilenumbruch (https://www.delphipraxis.net/148090-memo-synedit-zeile-hinzufuegen-ohne-zeilenumbruch.html)

gsh 22. Feb 2010 14:26


Memo/Synedit Zeile hinzufügen ohne Zeilenumbruch
 
Hallo Leute,

ich habe ein Programm das verschiedene LogFiles ausließt und mitverfolgt damit sofort neue Logeinträge angezeigt werden.
Aktuell schreibe ich die Daten wie folgt in das SynEdit:
Delphi-Quellcode:
vGUISynEdit.BeginUpdate;
vGUISynEdit.Text := vGUISynEdit.Text+NewText+#10;
vGUISynEdit.Perform(WM_VSCROLL, SB_BOTTOM, 0);
vGUISynEdit.EndUpdate;
Die Probleme die dabei entstehen sollten jedem klar sein:
* Der Text wird immer komplett ausgelesen und neu in die Kompo geschrieben (Problem wenn Logfile sehr groß)
* Das Textfeld merkt sich durch das neue einspielen nicht wo der User hingescrollt hat und springt somit immer an den Anfang (Workaround: WM_VSCROLL, SB_BOTTOM)

Viel schöner wäre natürlich ein hinzufügen der Zeile mit einem Lines.Add(NewText);. Dabei wird am schluss aber ein Zeilenumbruch eingefügt der unter umständen nicht im Log vorhanden ist.
Deswegen suche ich eine Möglichkeit nur den neuen Text hinzuzufügen ohne Zeilenumbruch.

Es kann auch eine andere Komponente sein. Solange diese Syntax Highliting unterstützt.

gsh 23. Feb 2010 11:39

Re: Memo/Synedit Zeile hinzufügen ohne Zeilenumbruch
 
*push*

himitsu 23. Feb 2010 11:45

Re: Memo/Synedit Zeile hinzufügen ohne Zeilenumbruch
 
Du fügst doch selber den Zeilenumbruch ein, also beschwer dich nicht über diesen.

Delphi-Quellcode:
vGUISynEdit.SelStart := -1; // -1 = Length(vGUISynEdit.Text)
vGUISynEdit.SelText := NewText;
vGUISynEdit.SelLength := 0;
oder
Delphi-Quellcode:
vGUISynEdit.BeginUpdate;
Try
  temp := vGUISynEdit.SelStart;
  vGUISynEdit.SelStart := -1;
  vGUISynEdit.SelText := NewText;
  vGUISynEdit.SelStart := temp;
Finally
  vGUISynEdit.Endpdate;
End;

gsh 23. Feb 2010 16:09

Re: Memo/Synedit Zeile hinzufügen ohne Zeilenumbruch
 
Hallo Himitsu
Zitat:

Zitat von himitsu
Du fügst doch selber den Zeilenumbruch ein, also beschwer dich nicht über diesen.

Du meinst wahrscheinlich das +#10 oder?. Dies existiert nur weil er sonst alles nur in einem zeile geschrieben hat. Keine Ahnung warum.
Das ist natürlich nicht schön und soll natürlich weg.

Zitat:

Zitat von himitsu
vGUISynEdit.SelStart := -1; // -1 = Length(vGUISynEdit.Text)

Mit -1 hat er angefangen die Zeilen oben einzufügen. Deswegen hab ich stattdessen Length(vGUISynEdit.Text) verwendet.

Mein Code sieht somit im Moment so aus:
Delphi-Quellcode:
  vGUISynEdit.BeginUpdate;
  vGUISynEdit.SelStart := Length(vGUISynEdit.Text);
  vGUISynEdit.SelText := NewText;
  vGUISynEdit.EndUpdate;
Jetzt hab ich aber noch Probleme damit das manche Zeilen nicht sichtbar sind. Erst wenn ich sie markiere dann werden alle sichtbar.
Außerdem hab ich das Problem das er die selektierung verliert bzw. mit dem Cursor immer nach unten springt. Ist ja auch ganz klar warum.
Wenn ich jetzt aber als Workaorund das hier machen:
Delphi-Quellcode:
  vGUISynEdit.BeginUpdate;
  OldCursorPosition := vGUISynEdit.SelStart;
  vGUISynEdit.SelStart := Length(vGUISynEdit.Text);
  vGUISynEdit.SelText := NewText;
  vGUISynEdit.SelStart := OldCursorPosition;
  vGUISynEdit.EndUpdate;
Damit springt der Cursor immer wieder auf seine alte Position zurück und somit auch die Ansicht. Bsp: Cursor oben, man will unten was nachlesen, scrollt runter, Dateiänderung somit springt der Cursor und dadurch die Anzeige wieder nach oben.

himitsu 23. Feb 2010 16:23

Re: Memo/Synedit Zeile hinzufügen ohne Zeilenumbruch
 
Joar, dann wirst du wohl auch noch die Position der ScrollBar speichern/zurücksetzen müssen.

Zitat:

Du meinst wahrscheinlich das +#10 oder?
Jupp, denn das fügt ja schließlich einen zusätzlichen Zeilenumbruch ein.

gsh 23. Feb 2010 17:18

Re: Memo/Synedit Zeile hinzufügen ohne Zeilenumbruch
 
Wie kann ich den die aktuelle Position der Scrollbars herausfinden?
Habe nur die Möglichkeit zum setzen gefunden: .ScrollBy

himitsu 23. Feb 2010 17:39

Re: Memo/Synedit Zeile hinzufügen ohne Zeilenumbruch
 
Das weiß ich jetzt auch nicht, aber vor Kurzem gab es mal wieder einen Thread, wo 2 Memos synchron gescrollt werden sollten ... dort dürfte sich das Nötige finden lassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz