Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#12

Re: String zerlegen ab einer bestimten länge aber auf...

  Alt 19. Mär 2008, 20:28
Hallo Sebastian,

mit dem single quote bist du das Opfer einer Schlamperei der VCL Macher geworden. Die Jungs haben eine Sonderbehandlung der beiden ASCII QuoteChars in der Funktion fest verdrahtet. Sorry, aber das wusste ich auch nicht.

Ich greife mal den Ansatz von alzaimar auf und lege eine Funktion WrapText() mit kompatibler Signatur vor:

Delphi-Quellcode:
function WrapText(const Line, BreakStr: string; const BreakChars: TSysCharSet;
  MaxCol: Integer): string;
var
  s: TStrings;
  iFirst, iLast: Integer;
begin
  s := TStringList.Create;
  try
    iFirst := 1;
    while iFirst < Length(Line) do
    begin
      iLast := Min(Pred(iFirst + MaxCol), Length(Line));
      while (iLast > iFirst)
      and (iLast < Length(Line))
      and not (Line[iLast] in BreakChars) do
        Dec(iLast);
      s.Add(BreakStr + Copy(Line, iFirst, Succ(iLast - iFirst)));
      iFirst := Succ(iLast);
    end;
    Result := s.Text;
  finally
    s.Free;
  end;
end;
Wenn ich deinen Beispieltext in ein Memo lade, dann erhalte ich ein akzeptables Ergebnis so:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  s: TStrings;
  i: Integer;
begin
  s := TStringList.Create;
  with Memo do
  begin
    for i := 0 to Pred(Lines.Count) do
      s.Text := s.Text + WrapText(Trim(Lines[i]), '> ', [' ', #9], 50);
    Lines.Text := s.Text;
  end;
  s.Free;
end;
Freundliche Grüße
  Mit Zitat antworten Zitat