Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - An die letzte Zeile eines Memo-Feldes springen ?


mambo - Fr 21.11.03 12:54
Titel: An die letzte Zeile eines Memo-Feldes springen ?
ich habe einen eigenen Log-File-Viewer geschrieben mit dem man Textdateien, die sich gerade ändern laufend anschauen kann. Nun möchte ich aber bei jedem neu laden der Datei ans Dateiende springen oder aber an die Cursorposition an der man sich befindet. Wie kann ich das machen ?

die Prozedur ist bisher so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var
  fs: TFileStream;
begin

  if FileExists(OpenDialog.FileName) Then
  begin

    // wenn man an die Cursorposition möchte, hier Cursorposition merken ???

    fs:=TFileStream.Create (OpenDialog.Filename, fmOpenRead or fmShareDenyNone);
    Memo.Lines.LoadFromStream(fs);

    // HIER MÖCHTE ICH ANS MEMO-ENDE SPRINGEN, damit man immer die aktuellsten Werte der Datei sieht

  // oder aber an die gemerkte Cursorposition springen, wenn die Checkbox "beim aktualisieren an Cursorposition springen" angehakt ist
  end;

danke

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


Delete - Fr 21.11.03 13:28

Sollte mit der Nachricht EM_LINESCROLL [http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/editcontrols/editcontrolreference/editcontrolmessages/em_linescroll.asp] gehen.


Philer - Fr 21.11.03 13:30

Anders aber blöder gehts auch :D :

Delphi-Quelltext
1:
2:
3:
4:
5:
var I:integer;
begin
I:=Memo1.Lines.Count;
Memo1.Lines.Add('');
Memo1.Lines.Delete(I);


-=Janos=- - Mo 01.12.03 11:04

An die letzte Zeile eines Memo-Feldes springen geht zwar mit

Delphi-Quelltext
1:
2:
Memo1.Lines.Add('');
Memo1.Lines.Delete(Memo1.Lines.Count - 1);

jedoch dauert es zulange.

Hat jemand eine bessere Idee. Wie sieht es aus mit EM_LINESCROLL? Oder würde es mit Memo.Selstart auch funktionieren?

Danke
Janos

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


Tino - Do 04.12.03 12:47


Delphi-Quelltext
1:
2:
3:
4:
// zur ersten Zeile:
  Memo1.Perform(EM_LineScroll, 0 , -Memo1.Lines.Count-1);
// zur letzen Zeile:
  Memo1.Perform(EM_LineScroll, 0 , Memo1.Lines.Count-1);

Ich hoffe das funktioniert!

Gruß
Tino