Hm, ich hab jetzt noch was gefunden, was (vorerst) läuft (keine 3000 Zeilen
):
Delphi-Quellcode:
procedure TForm1.Memo1Change(Sender: TObject);
procedure SetCursorInMemo(const AMemo: TCustomMemo; X, Y: Integer);
begin
AMemo.SelStart := AMemo.Perform(EM_LineIndex, X, 0) + Y;
AMemo.Perform(EM_SCROLLCARET, 0, 0);
AMemo.SetFocus;
end;
var
sText : String;
i : Integer;
NewText : String;
Line : Integer;
Col : Integer;
Lines : Integer;
begin
sText := Memo1.Text;
if CanChange then
begin
Line := Memo1.CaretPos.Y;
Col := Memo1.CaretPos.X;
Lines := Memo1.Lines.Count;
end;
NewText := '';
sText := StringReplace(sText, #13, '', [rfReplaceAll]);
sText := StringReplace(sText, #10, '', [rfReplaceAll]);
for i := 1 to Length(sText) do
begin
if ((i Mod 10) = 0) then
NewText := NewText + sText[i] + #13#10
else NewText := NewText + sText[i];
end; (* of for *)
if CanChange then
begin
CanChange := False;
Memo1.Text := NewText;
if (Lines <> Memo1.Lines.Count) then
Col := Col + 2;
//Cursorposition neu setzen
SetCursorInMemo(Memo1, Line, Col);
end;
CanChange := True;
if (Memo1.Lines.Count > 4) then
Memo1.Lines.Delete(4);
end;
Hier begrenze ich die Zeichenanzahl pro Zeile auf 10 und die Zeilenanzahl auf 4.
Nach ein paar Tests kann ich sagen, dass es soweit seinen Zweck erfüllt, wie gut es wirklich ist, wird sich noch zeigen.
Die Prozedur SetCursorInMemo ist von
dsdt.info.
Ich bedanke mich bei allen, die mir geholfen haben, das Problem zu lösen (vielleicht melde ich mich später nochmal).
MFG
Lorenz
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.
George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler