Der schönste Ansatz ist es nicht gerade, aber vielleicht kannst du damit was anfangen:
Delphi-Quellcode:
function shortenString(c: TCanvas; s: string; w: integer; dots: boolean): string;
var
exploder: TStringList;
appendDots: boolean;
begin
exploder := TStringList.Create;
exploder.Delimiter := ' ';
exploder.DelimitedText := trim(s);
appendDots := False;
while exploder.Count > 0 do
begin
if appendDots then
s := exploder.DelimitedText + ' ...'
else
s := exploder.DelimitedText;
if c.TextWidth(s) > w then
begin
exploder.Delete(exploder.Count - 1);
appendDots := dots;
end
else
begin
break;
end;
end;
exploder.Free;
Result := s;
end;