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
TMemo: Text einfügen aber NICHT zur letzten Zeile springen..
- Niesi
- Lazarusforum e. V.
- Beiträge: 334
- 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
Wenn Text z. B. mit
an das Ende der Stringliste angefügt wird, dann steht da natürlich auch der Cursor.
Du kannst ihn aber danach positionieren, mit
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
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 ...
-
- Beiträge: 6194
- 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
Anstelle von FreePascal verwende ich immer Lazarus., vor allem wen es sich um LCL-Komponenten handelt.Und es hilft auch immer, in die Suchmaschine Deiner Wahl z. B. "FreePascal tMemo Cursor" einzugeben ...
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: TMemo: Text einfügen aber NICHT zur letzten Zeile spring
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).
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).
-
- 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
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
Michael Springwald
Re: TMemo: Text einfügen aber NICHT zur letzten Zeile spring
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.