wenn man die
VCL debuggt, dann kommt man bei einem Insert im Memo bei dieser Procedure raus:
(ich hoff es gibt keine Probleme, wenn man eine Procedure der VCL hier zeigt)
Delphi-Quellcode:
procedure TMemoStrings.Insert(Index: Integer; const S: string);
var
SelStart, LineLen: Integer;
Line: string;
begin
if Index >= 0 then
begin
SelStart := SendMessage(Memo.Handle, EM_LINEINDEX, Index, 0);
if SelStart >= 0 then Line := S + #13#10 else
begin
SelStart := SendMessage(Memo.Handle, EM_LINEINDEX, Index - 1, 0);
if SelStart < 0 then Exit;
LineLen := SendMessage(Memo.Handle, EM_LINELENGTH, SelStart, 0);
if LineLen = 0 then Exit;
Inc(SelStart, LineLen);
Line := #13#10 + s;
if s = '' then
Line := Line + #13#10;
end;
SendMessage(Memo.Handle, EM_SETSEL, SelStart, SelStart);
SendTextMessage(Memo.Handle, EM_REPLACESEL, 0, Line);
end;
end;
Und wenn S leer ist, dann wird einfach ein Zeilenumbruch eingefügt.
eine sehr dreckige Lösung wäre folgende:
Delphi-Quellcode:
procedure TForm2.Memo1Change(Sender: TObject);
var
caretLine : Integer;
S_caretLine: String;
begin
Memo1.OnChange := nil;
caretLine := Memo1.CaretPos.Y;
S_caretLine := Memo1.Lines[caretLine];
If Length(S_caretLine) >= 10 then
begin
Memo1.Lines.Insert(caretLine + 1, #32);
Memo1.Lines[caretLine + 1] := trim(Memo1.Lines[caretLine + 1]);
end;
Memo1.OnChange := Memo1Change;
end;
Dadurch wird eine neue Zeile mit einem Leerzeichen eingefügt (du hattest ein A eingefügt).
In der neuen Zeile werden dann alle Steuer- und Leerzeichen wieder gelöscht (trim)
Schön ist aber was anderes....
mfg
Helmi
>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<