Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Memo: Nach Füllen 1. Zeile anzeigen (https://www.delphipraxis.net/178374-memo-nach-fuellen-1-zeile-anzeigen.html)

Phillie08 4. Jan 2014 13:27

Delphi-Version: XE5

Memo: Nach Füllen 1. Zeile anzeigen
 
Guten Tag,
das folgende Problem ist für das Funktionieren des Programms nicht wesentlich, wohl aber für den Bedienungskomfort. Und es nervt mich, dass ich keine Lösung finden konnte.

Ich verwende unter anderem zwei Memos. Das erste wird gefüllt über das Laden einer Textdatei, hier gibt es kein Problem.
Das zweite entsteht, indem der Inhalt des ersten modifiziert und dann mit Hilfe von
Delphi-Quellcode:
Memo2.Lines.Add
in Memo2 geschrieben wird.
Das klappt zwar ebenfalls grundsätzlich, aber der Fokus liegt auf der letzten Zeile. Ab einer gewissen Zeilenanzahl wird also der Memo-Anfang nicht gezeigt, sondern muss per Scrollen angesteuert werden. Ich hätte es jedoch gern, dass beide Memos nach Befüllen die erste Zeile zeigen.

Ich habe bereits einiges probiert (SelStart zum Beispiel), nichts davon hat geholfen.

Beste Grüße,
Andreas

RWarnecke 4. Jan 2014 13:34

AW: Memo: Nach Füllen 1. Zeile anzeigen
 
Das sollte etwas für Dich sein.

himitsu 4. Jan 2014 14:48

AW: Memo: Nach Füllen 1. Zeile anzeigen
 
CaretPos und SelStart kommen aber praktisch auf das Selbe raus.

Es wird der Cursor neu positioniert.
- bei SelStart via Index über alle Zeichen
- bei CaretPos als X-Y-Position

Aber ScrollIntoView oder so, sollte es als Befehl geben.
Und vermutlich finden sich irgendwo auch Beispiele, wie man per Code scrollen kann.

PS: in der VCL weiß ich, daß das codeseitige Scrollen oftmals/manchmal nur funktioniert, wenn das Memo auch den Fokus besitzt.

Phillie08 7. Jan 2014 12:17

AW: Memo: Nach Füllen 1. Zeile anzeigen
 
Erst mal vielen Dank für beide Antworten.
Ich hätte womöglich erwähnen sollen, dass es sich um eine VCL-Anwendung handelt, nicht um FMX.
Den Vorschlag von himitsu werde ich mal näher unter die Suche nehmen, sobald ich Zeit habe, mich darum zu kümmern.
Danke also,
Andreas

ASM 7. Jan 2014 12:50

AW: Memo: Nach Füllen 1. Zeile anzeigen
 
Delphi-Quellcode:
 Memo1.Perform(EM_LineScroll, 0 , -Memo1.Lines.Count-1);
// Auf das Minuszeichen vor 'Memo1.Lines.Count-1' achten!

himitsu 7. Jan 2014 13:52

AW: Memo: Nach Füllen 1. Zeile anzeigen
 
Zitat:

Zitat von ASM (Beitrag 1242553)
Delphi-Quellcode:
 Memo1.Perform(EM_LineScroll, 0 , -Memo1.Lines.Count-1);
// Auf das Minuszeichen vor 'Memo1.Lines.Count-1' achten!

Sicher, daß da keine Klammer fehlt?

Delphi-Quellcode:
-(Memo1.Lines.Count-1)

p80286 7. Jan 2014 14:53

AW: Memo: Nach Füllen 1. Zeile anzeigen
 
ggf. mußt Du etwas ausführlicher arbeiten:
Delphi-Quellcode:
meinMemo.SelStart:= 0;
meinMemo.SelLength:= 0;
meinMemo.SetFocus;
Gruß
K-H

baumina 8. Jan 2014 06:39

AW: Memo: Nach Füllen 1. Zeile anzeigen
 
Delphi-Quellcode:
  memo1.SetFocus;
  memo1.CaretPos := Point(0,0);
  SendMessage(memo1.Handle, EM_SCROLLCARET, 0, 0);

Phillie08 8. Jan 2014 17:49

AW: Memo: Nach Füllen 1. Zeile anzeigen
 
Erneut vielen Dank für eure Hilfe.
Dieses hier funktioniert, komischerweise nur teilweise, nämlich beim ersten mal. Ich muss mal etwas forschen, was da los ist.
Zitat:

Zitat von himitsu (Beitrag 1242559)
Zitat:

Zitat von ASM (Beitrag 1242553)
Delphi-Quellcode:
 Memo1.Perform(EM_LineScroll, 0 , -Memo1.Lines.Count-1);
// Auf das Minuszeichen vor 'Memo1.Lines.Count-1' achten!

Sicher, daß da keine Klammer fehlt?

Delphi-Quellcode:
-(Memo1.Lines.Count-1)

Ich habe die Anregung mit der Klammer, die mir einleuchtete, aufgegriffen:
Delphi-Quellcode:
Memo2.Perform(EM_LineScroll, 0 , -(Memo2.Lines.Count-1));

Der Vorschlag von p80286 hat auch funktioniert.

Alles in allem: Gut zu wissen, dass man nach Jahr(zehnt)en Pause als Wiedereinsteiger hier Hilfe finden kann.
Gruß,
Andreas

ASM 8. Jan 2014 20:12

AW: Memo: Nach Füllen 1. Zeile anzeigen
 
Zitat:

Zitat von himitsu (Beitrag 1242559)
Zitat:

Zitat von ASM (Beitrag 1242553)
Delphi-Quellcode:
 Memo1.Perform(EM_LineScroll, 0 , -Memo1.Lines.Count-1);
// Auf das Minuszeichen vor 'Memo1.Lines.Count-1' achten!

Sicher, daß da keine Klammer fehlt?

Delphi-Quellcode:
-(Memo1.Lines.Count-1)

Der Einwand trifft zwar numerisch korrekt zu. Er ist aber im konkreten Fall de facto völlig belanglos, da ja logisch nicht vor die 1.Zeile gescrollt werden kann (man könnte anstelle "-(Memo1.Lines.Count-1)" auch ohne fatale Konsequenz schreiben "-1000", wenn überhaupt nur 10 Zeilen vorhanden wären).

Furtbichler 9. Jan 2014 06:58

AW: Memo: Nach Füllen 1. Zeile anzeigen
 
Zitat:

Zitat von ASM (Beitrag 1242763)
Er ist aber im konkreten Fall de facto völlig belanglos,

Na ja. Du lieferst ja auch nicht 100.000t Zement auf die Baustelle des Einfamilienhauses, obwohl im konkreten Fall de facto nur 15t verbaut werden.

Entweder schreibst Du '-MaxInt' hin oder machst es richtig.

Sir Rufo 9. Jan 2014 07:26

AW: Memo: Nach Füllen 1. Zeile anzeigen
 
Zitat:

Zitat von Furtbichler (Beitrag 1242790)
Zitat:

Zitat von ASM (Beitrag 1242763)
Er ist aber im konkreten Fall de facto völlig belanglos,

Na ja. Du lieferst ja auch nicht 100.000t Zement auf die Baustelle des Einfamilienhauses, obwohl im konkreten Fall de facto nur 15t verbaut werden.

Entweder schreibst Du '-MaxInt' hin oder machst es richtig.

Wenn etwas gesichert immer funktioniert, dann ist es richtig.
Wenn es dann auch noch so schnell wie irgend möglich ist, dann ist es optimal (=richtig schnell)
Manchmal wird etwas auf dem Weg von richtig zu optimal auch falsch ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:31 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