var n, t: String; r: TRect; ts: TSize;
a, h: Integer; TempList: TStringList;
n := 'Normaler Text und DerSuperlangeTextDerUmgebrochenWerdenMuss';
r := Rect(0, 0, 180, 0); // über 180 Pixel wird umgebrochen
h := DrawText(Image32.Bitmap.Handle, PChar(n), Length(n), r, DT_WORDBREAK or DT_NOPREFIX or DT_CALCRECT);
if r.Right > 180 then begin // ein einzelnes Wort ging über 180 Pixel hinaus
TempList.Text := WrapText(n, 10); // alles was länger ist als 10 Zeichen bekommt eine eigene TStringGrid-Zeile
for a := 0 to Pred(TempList.Count) do begin
t := TempList[a]; // Text zeilenweise untersuchen
DrawText(Image32.Bitmap.Handle, PChar(t), Length(t), r, DT_WORDBREAK or DT_NOPREFIX or DT_CALCRECT);
if r.Right > 180 then begin n := ''; // ein überlanges Wort wurde gefunden
while Length(t) > 0 do begin
GetTextExtentExPoint(Image32.Bitmap.Handle, PChar(t), Length(t), 180, @h, nil, ts);
n := n + Copy(t, 1, h) + ' '; Delete(t, 1, h);
end;
TempList[a] := n;
end;
r := Rect(0, 0, 180, 0);
end;
n := StringReplace(Trim(TempList.Text), #13#10, '', [rfReplaceAll]); // nicht ausführen falls CRs gewünscht
h := DrawText(Image32.Bitmap.Handle, PChar(n), Length(n), r, DT_WORDBREAK or DT_NOPREFIX or DT_CALCRECT);
end;
Image32.Textout(r, DT_WORDBREAK or DT_NOPREFIX, n);