Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - an das Dateiende springen


D. Annies - Mi 08.01.14 07:22
Titel: an das Dateiende springen
Hi Delpher,

es existiert ein Memo mit z.B. 150 Zeilen.
Ich adde jetzt Zeilen mit memo1.lines.add() ...

Beim Dateiaufruf ist der Cursor aber in Zeile 1. Wie kann ich
den Cursor schon gleich in die letzte Zeile positionieren?

Danke, Detlef


baumina - Mi 08.01.14 08:21


Delphi-Quelltext
1:
2:
3:
4:
5:
  memo1.SetFocus;
  memo1.CaretPos := Point(0,Memo1.Lines.Count-1); // springt vor erstes Zeichen der letzten Zeile
  // ODER
  memo1.CaretPos := Point(length(Memo1.Lines[Memo1.Lines.Count-1]),Memo1.Lines.Count-1); // springt hinter letztes Zeichen der letzten Zeile
  SendMessage(memo1.Handle, EM_SCROLLCARET, 0, Memo1.Lines.Count-1);


D. Annies - Mi 08.01.14 08:42

Danke für den Tipp, funzt aber leider nicht, es gibt keine Veränderung.
Detlef


baumina - Mi 08.01.14 08:45

Komisch, habe den Code bei mir getestet. Und funktioniert mit Delphi XE einwandfrei.


Mathematiker - Mi 08.01.14 08:52

Hallo,

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
procedure TForm1.Button1Click(Sender: TObject);
var
   itemp: Integer;
begin
   with RichEdit1 do
   begin
     // Move to the last line:
     // Zur letzten Zeile scrollen:
     SelStart := Length(Text);
     Perform(EM_SCROLLCARET, 00);

     // or: Perform(WM_VSCROLL, SB_BOTTOM,0);

     // Move to the first line:
     // Zur ersten Zeile Scrollen:
     SelStart := Perform(EM_LINEINDEX, 00);
     Perform(EM_SCROLLCARET, 00);

     // Move to Line 5, Character 3:
     // Cursor auf Linie 5, Postion 3 setzen:
     SelStart := Perform(EM_LINEINDEX, 50) + 3;
     Perform(EM_SCROLLCARET, 00);

     // Scroll down 1 Line
     // Eine linie nach unten scrollen
     with RichEdit1 do
     begin
       itemp := SendMessage(Handle, EM_LINEFROMCHAR, SelStart, 0);
       SelStart := Perform(EM_LINEINDEX, itemp + 10);
       Perform(EM_SCROLLCARET, 00);
     end;

     // Set the focus on the RichEdit:
     // Den Fokus aufs RichEdit setzten:
     SetFocus;
   end;
end;

Quelle: SwissDelphiCenter
Das RichEdit1 durch ein Memo ersetzen und es müsste funktionieren.

Beste Grüße
Mathematiker


D. Annies - Mi 08.01.14 09:47

Der Compiler meckert über die Variable? / Entität? "itemp".
Gruß, Detlef


vagtler - Mi 08.01.14 10:01

Warum sollte er?


D. Annies - Mi 08.01.14 10:19

Ich habe nicht beachtet, dass das Memo auf form2 liegt, also alles mit form2.memo1 ...

(Wie kann man nur so xxxxxxxxxxx)

LG, Detlef


baumina - Mi 08.01.14 10:24

Und spätestens jetzt sollte man ernsthaft darüber nachdenken den Formularen, den Memos und allen anderen Komponenten vernünftige Namen zu geben.


D. Annies - Mi 08.01.14 11:45

Hast ja recht :)
LG, Detlef

P.S. Hast du noch einen Tipp, wie man form2 und form2.komponente_xxx möglichst "geräuschlos"
umbenennen kann?


vagtler - Mi 08.01.14 11:57

GExperts oder CnPack

Zum architektonischen Aufbau solcher Konstrukte sag ich jetzt mal lieber nichts...


baumina - Mi 08.01.14 11:58

Hauptmenü Suchen/Ersetzen in .pas und .dfm


Delete - Mi 08.01.14 16:06

user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich den Cursor schon gleich in die letzte Zeile positionieren?

Bei mir funktioniert folgende Methode tadellos:


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TFormMain.Button_AnsEndeClick(Sender: TObject);
begin
  Memo_Test.SelStart := Length(Memo_Test.Text);
  Memo_Test.SetFocus;
end;

Der Cursor wandert auf diese Weise zuverlässig ans Ende deines Memo-Textes. Wenn du nichts davon siehst, liegt das daran, daß das Memo nicht von alleine dort hinscrollt, wo dein Cursor steht. Spätenstens bei der nächsten Eingabe tut es das aber.


jaenicke - Di 14.01.14 12:17

user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
P.S. Hast du noch einen Tipp, wie man form2 und form2.komponente_xxx möglichst "geräuschlos"
umbenennen kann?
Ab Turbo Delphi sollte das mit Refactoring problemlos gehen.


D. Annies - So 19.01.14 04:38

Jo, Danke.