TMemo: Text einfügen aber NICHT zur letzten Zeile springen..

Rund um die LCL und andere Komponenten
Antworten
hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

TMemo: Text einfügen aber NICHT zur letzten Zeile springen..

Beitrag von hubblec4 »

TMemo: Text einfügen aber NICHT zur letzten Zeile springen bzw. scrollen

Hallo Lazarus Gemeinde

Google findet natürlich einiges zu TMemo, Text einfügen, letzte Zeile, aber das ist nicht was ich in diesem Fall möchte.

Ich habe im Program ein TMemo in dem der output eines anderen Programms geloggt wird.

Hierbei erhalte ich einen String der Zeileumbrüche beinhaltet.
Ich habe dann einfach Memo.Text:=outputString; als Text gemacht und siehe da alle Zeilen wurden so im Memo angezeigt.

Wenn ich dann weiteren Text anhängen wollte habe ich das mit
With TMemo do Text:=Text+neuer_output; gemacht. Dabei wurde dann immer die erste Zeile selektiert.

Ich habe nun heraus gefunden das Memo.Lines.Add()/Append() gleich die letzte Zeile selektiert.

Wenn ein User in dem Memo rum-scrollen will soll weiterhin neuer Text angehängt werden aber NICHT mehr zur letzten Zeile gesprungen werden.

Habt ihr dazu eine Idee?

LG
hubble

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 331
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

Re: TMemo: Text einfügen aber NICHT zur letzten Zeile spring

Beitrag von Niesi »

Wenn Text z. B. mit

Code: Alles auswählen

MyMemo.Lines.Add('Irgendein Text ...');

an das Ende der Stringliste angefügt wird, dann steht da natürlich auch der Cursor.
Du kannst ihn aber danach positionieren, mit

Code: Alles auswählen

 
TextPos.x := 5;
TextPos.y := 6;
MyMemo.CaretPos := TexPos;
MyMemo.SetFocus;
 

TextPos ist ein tPoint, den setzt Du vorher z. B. auf TextPos.x := 5; TextPos.y := 6;
Dann sollte der Cursor da hinspringen.

Weiterhin kannst Du den Cursor auch mit SelStart, SelLength und SetFocus positionieren. Eigentlich wird der Text damit selektiert, aber bei SelLength := 0; gibt's keinen selektierten Text.

Und es hilft auch immer, in die Suchmaschine Deiner Wahl z. B. "FreePascal tMemo Cursor" einzugeben ...

Beste Grüße
Niesi
Zuletzt geändert von Niesi am Mo 24. Sep 2018, 12:49, insgesamt 1-mal geändert.
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: TMemo: Text einfügen aber NICHT zur letzten Zeile spring

Beitrag von Mathias »

Und es hilft auch immer, in die Suchmaschine Deiner Wahl z. B. "FreePascal tMemo Cursor" einzugeben ...
Anstelle von FreePascal verwende ich immer Lazarus., vor allem wen es sich um LCL-Komponenten handelt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: TMemo: Text einfügen aber NICHT zur letzten Zeile spring

Beitrag von hubblec4 »

Ich habe da schon bissl rumprobiert und mit SelLength.
Aber dabei geht es immer um den Curser der im Memo an einer bestimmten Stelle steht.
Diese Curser Position ändert sich NICHT wenn man mit der Mouse den Scrollbalken bewegt, und wenn nun neuer Text hinzukommt und ich wieder an die Cursor Position springe, ist das Nicht die aktuelle Anzeige die der Benutzer vorher hatte.

Ich habe es jetzt aber auch so gemacht das die Curser Position wiederhergestellt wird. Geht irgendwie nicht anders(im Moment).

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: TMemo: Text einfügen aber NICHT zur letzten Zeile spring

Beitrag von pluto »

Bei einem memo wird eigentlich "nur" Automatisch gescrollt, wenn der Cursor an der letzten Zeile steht. So kenne ich es unter Linux....
MFG
Michael Springwald

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: TMemo: Text einfügen aber NICHT zur letzten Zeile spring

Beitrag von hubblec4 »

OK, das müsste ich mal testen. Da ich unter Win7 programmiere ist es so, das die letzte Zeile automatisch angesteuert wird, egal wo der Curser sich befindet.

Antworten