Thema: Delphi Memo lines insert

Einzelnen Beitrag anzeigen

Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Memo lines insert

  Alt 30. Aug 2014, 09:18
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! <<
  Mit Zitat antworten Zitat