¿Wie scrolle ich per Programm eine TMemo?
-
- Beiträge: 155
- Registriert: Mi 22. Aug 2007, 14:52
- OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 65719 Hofheim am Taunus
- Kontaktdaten:
¿Wie scrolle ich per Programm eine TMemo?
Ich möchte per Programm an das Ende einer TMemo-Komponente scrollen, so dass die letzte Zeile sichtbar ist. Das macht diese leider nicht automatisch, wenn ich z.B. per
Memo1.Lines.Add ('******* Fertig *******');
was hinzufüge. Meine Memo-Komponente zeigt was das Programm macht, und am Ende soll es "Fertig" anzeigen. Leider sieht man das nicht, weil es nicht automatisch ans Ende scrollt.
ScrollBars steht auf "ssAutoVertical", das funktioniert auch so wie man denkt.
Die ScrollBars von TMemo sind vom Typ TMemoScrollBar und deren Funktion GetVertScrollBar liefert einen TControlScrollBar und all diese kennen keine Methode "Scroll". Laut Lazarus-Hilfe gibt es einen Typ TCustomScrollBar der Scrollen kann und "weiss" was Top und Bottom bedeutet, ¿¿nur leider hat der nichts mit der Memo-Komponente zu tun??
Habe nichts in der Foren-Suche oder bei Google gefunden,
¿Wie kann ich ans Ende meiner Memo1 scrollen?
Vielen Dank für Eure Hilfe
Memo1.Lines.Add ('******* Fertig *******');
was hinzufüge. Meine Memo-Komponente zeigt was das Programm macht, und am Ende soll es "Fertig" anzeigen. Leider sieht man das nicht, weil es nicht automatisch ans Ende scrollt.
ScrollBars steht auf "ssAutoVertical", das funktioniert auch so wie man denkt.
Die ScrollBars von TMemo sind vom Typ TMemoScrollBar und deren Funktion GetVertScrollBar liefert einen TControlScrollBar und all diese kennen keine Methode "Scroll". Laut Lazarus-Hilfe gibt es einen Typ TCustomScrollBar der Scrollen kann und "weiss" was Top und Bottom bedeutet, ¿¿nur leider hat der nichts mit der Memo-Komponente zu tun??
Habe nichts in der Foren-Suche oder bei Google gefunden,
¿Wie kann ich ans Ende meiner Memo1 scrollen?
Vielen Dank für Eure Hilfe
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Re: ¿Wie scrolle ich per Programm eine TMemo?
Also normalerweise wrd doch beim einfügen automatisch die neu eingefügte Zeile angezeigt und das Problem ist mehr, wieder nach oben zu Scrollen.
Wenn ich nur ssAutoVertical einstelle und anschließend fülle:
Läuft das Memo automatisch nach unten durch und zeigt die letzte Zeile an...zumindest hier under Windows.
Ansonsten probier mal:
nicht schön, aber du kommst nach unten 
Wenn ich nur ssAutoVertical einstelle und anschließend fülle:
Code: Alles auswählen
for i := 0 to 100 do
Memo1.Lines.Add('-Hallo-' + IntToStr(i));
Ansonsten probier mal:
Code: Alles auswählen
Memo1.SelStart := Length(Memo1.Text);

Johannes
-
- Beiträge: 475
- Registriert: Do 15. Nov 2007, 16:58
- OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
- CPU-Target: i386, x64
- Wohnort: Gera
Re: ¿Wie scrolle ich per Programm eine TMemo?
Hallo,
alternativ könnte man auch eine Listbox nehmen, den Itemindex auf die letzte Zeile setzen und mit "Listbox.MakeCurrentVisible;" anzeigen lassen.
Oder du fügst die neue Zeile einfach, mit "Memo.Lines.Insert(0, 'mein Text');", oben ein (umgekehrte Reihnfolge sozusagen).
alternativ könnte man auch eine Listbox nehmen, den Itemindex auf die letzte Zeile setzen und mit "Listbox.MakeCurrentVisible;" anzeigen lassen.
Oder du fügst die neue Zeile einfach, mit "Memo.Lines.Insert(0, 'mein Text');", oben ein (umgekehrte Reihnfolge sozusagen).
mfg Ingo
-
- Beiträge: 155
- Registriert: Mi 22. Aug 2007, 14:52
- OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 65719 Hofheim am Taunus
- Kontaktdaten:
Re: ¿Wie scrolle ich per Programm eine TMemo?
Ja, normalerweise tut es das auch, nur die letzte Zeile die ich einfüge, da scrollt er nicht, undAlso normalerweise wrd doch beim einfügen automatisch die neu eingefügte Zeile angezeigt
Code: Alles auswählen
Memo1.SelStart := Length(Memo1.Text);
Re: ¿Wie scrolle ich per Programm eine TMemo?
Moin, moin,
unter Windows geht es z.B. so:
... oder eben wie schon beschrieben so:
Gruß
Baba.
unter Windows geht es z.B. so:
Code: Alles auswählen
//------------------------------------------------------------------------------
procedure TFAW_Print1.BtnDownClick(Sender: TObject);
begin
SendMessage(Memo1.Handle, WM_VSCROLL, SB_LINEDOWN, 0);
end;
//------------------------------------------------------------------------------
procedure TFAW_Print1.BtnUpClick(Sender: TObject);
begin
SendMessage(Memo1.Handle, WM_VSCROLL, SB_LINEUP, 0);
end;
//------------------------------------------------------------------------------
procedure TFAW_Print1.BtnFirstClick(Sender: TObject);
begin
PostMessage(Memo1.Handle, WM_VSCROLL, SB_TOP, 0);
Refresh;
end;
//------------------------------------------------------------------------------
procedure TFAW_Print1.BtnLastClick(Sender: TObject);
begin
PostMessage(Memo1.Handle, WM_VSCROLL, SB_BOTTOM, 0);
Refresh;
end;
//------------------------------------------------------------------------------
procedure TFAW_Print1.BtnPageDownClick(Sender: TObject);
begin
PostMessage(Memo1.Handle, WM_VSCROLL, SB_PAGEDOWN, 0);
end;
//------------------------------------------------------------------------------
procedure TFAW_Print1.BtnPageUpClick(Sender: TObject);
begin
PostMessage(Memo1.Handle, WM_VSCROLL, SB_PAGEUP, 0);
end;
Code: Alles auswählen
FMain.Memo1.SelStart := Length(FMain.Memo1.Lines.Text);
Baba.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: ¿Wie scrolle ich per Programm eine TMemo?
währe der Letzte Beitrag nicht was für die WissenDB ?
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Re: ¿Wie scrolle ich per Programm eine TMemo?
Ja, irgendwie schon.
Die Frage ist doch vielmehr, warum scrollt er bei der letzten Zeile nicht nach unten, sieht ja fast wie ein Bug aus, bzw. irgend ne geheime Einstellung beim Memo
Geht es jetzt irgendwie?
Die Frage ist doch vielmehr, warum scrollt er bei der letzten Zeile nicht nach unten, sieht ja fast wie ein Bug aus, bzw. irgend ne geheime Einstellung beim Memo

Geht es jetzt irgendwie?
Johannes
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: ¿Wie scrolle ich per Programm eine TMemo?
Also unter GTK2 klappt das zu 95% ganz gut, es wird zwar nach untern gescrollt. Allerdings fehlt die letzte Zeile. Was sagen denn die Windows Nutzter dazu ?
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: ¿Wie scrolle ich per Programm eine TMemo?
Ich will auch ein Memo, das automatisch scrollt.
Gibt es unterdessen etwas eleganteres als die oben beschrieben Lösung mit SelStart ?
Es sollte hauptsächlich unter Linux gehen.
Es gibt noch was mit SendMessage, das sieht mir aber stark nach Windows aus.
Gibt es unterdessen etwas eleganteres als die oben beschrieben Lösung mit SelStart ?
Es sollte hauptsächlich unter Linux gehen.
Es gibt noch was mit SendMessage, das sieht mir aber stark nach Windows aus.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: ¿Wie scrolle ich per Programm eine TMemo?
Bei mir (Windows) geht auch noch sowas:Mathias hat geschrieben:Ich will auch ein Memo, das automatisch scrollt.
- Scrollbars vom Memo auf ssAutoBoth stellen
- scrollen per Timer:
Code: Alles auswählen
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Memo1.VertScrollBar.Position := Memo1.VertScrollBar.Position + 1;
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: ¿Wie scrolle ich per Programm eine TMemo?
Ich habe gerade etwas entdeckt.
Wen ich eines neues Memo erstelle, und anschliessend mit,
etwas reinschreibe, dann verschwindet der Cursor unten beim Memo, so wie oben beschrieben.
Lösche ich aber bei Eigenschaften/Lines/(TStrings) die Vorgabe Memo1, dann rollt der Text durch, so wie es hier gewünscht wird.
Aber klicke ich kurz ins Memo, dann bleibt der Text wieder stehen.
Führe ich aber zwischendurch Memo1.Clear aus, dann rollt der Text wider.
Somit muss es irgendwo eine Eigenschaft geben, wo man das Autorollen einstellen kann, nur die frage wo ?
Nachtrag:
Mit
fängt der Text auch wider an zu scrollen, aber auch nur bis zum nächsten Click.
-1 geht nicht, aber alles das kleiner/gleich -2 ist geht.
Das interessante dabei, wen ich SelStart auslese
Dann kommt ein positiver Wert, der identisch ist mit der Text-Länge.
Ausgenommen ich starte das Programm neu und mache eine Abfrage, bevor ich ins Memo Klicke.
Dann kommt bei SelStart 0 und bei Length die Text-Länge.
Interessanterweise reagiert Window und Linux nicht gleich.
Wen ich eines neues Memo erstelle, und anschliessend mit,
Code: Alles auswählen
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Memo1.Lines.Add(FloatToStr(time));
end;
Lösche ich aber bei Eigenschaften/Lines/(TStrings) die Vorgabe Memo1, dann rollt der Text durch, so wie es hier gewünscht wird.
Aber klicke ich kurz ins Memo, dann bleibt der Text wieder stehen.
Führe ich aber zwischendurch Memo1.Clear aus, dann rollt der Text wider.
Somit muss es irgendwo eine Eigenschaft geben, wo man das Autorollen einstellen kann, nur die frage wo ?
Nachtrag:
Mit
Code: Alles auswählen
Memo1.SelStart := -2;
-1 geht nicht, aber alles das kleiner/gleich -2 ist geht.
Das interessante dabei, wen ich SelStart auslese
Code: Alles auswählen
ShowMessage(IntToStr(Memo1.SelStart)+ ' '+IntToStr(Length(Memo1.Text)));
Ausgenommen ich starte das Programm neu und mache eine Abfrage, bevor ich ins Memo Klicke.
Dann kommt bei SelStart 0 und bei Length die Text-Länge.
Interessanterweise reagiert Window und Linux nicht gleich.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot