Einzelnen Beitrag anzeigen

SittingDuck

Registriert seit: 11. Jan 2006
Ort: Leverkusen
159 Beiträge
 
Delphi 2010 Professional
 
#7

AW: WordBreak innerhalb eines Wortes

  Alt 17. Nov 2012, 04:00
Danke schon mal für Euren Input. Ich habe es nun folgendermaßen gelöst:
Delphi-Quellcode:
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);
Vielleicht hilft es ja dem ein oder anderen. Das Image32 aus der GR32 kann natürlich auch ein normales Bitmap sein.
Ciao ... SittingDuck
iPhone Backup und mehr: iTwin v3.9 Beta ... Alternative Startleiste: Launcher v3.8 !
  Mit Zitat antworten Zitat