Hallo Delphi-Praktiker,
ich kämpfe mit Delphi 2005 (
Win32) an folgendem Problem:
Es soll ein Text passend auf ein Blatt gedruckt werden. Falls der Text zu breit wird, stauche ich die Schrift:
Minicodeschnippsel:
Delphi-Quellcode:
lf: TLogfont;
myfontWidth, tempwidth, i: Integer;
Textfeld : String;
faktor : Real;
...
lf.lfWidth := myfontWidth;
lf.lfQuality := ANTIALIASED_QUALITY;
...
faktor := 200.0 / (i);
tempWidth := ceil((C.TextWidth(Textfeld) * faktor);
...
Der Text wird per Schleife an die maximale Seitenbreite angepasst (gestaucht). Dabei muss ich mittels eines Streckfaktor momentan die Breite der Zeile in Pixeln berechnen, weil Canvas.TextWidth die geänderte Breite nicht die Bohne interessiert (Man kann sich ein Rectangle drum ausgeben lassen - das bleibt eben "groß"). Außerdem scheint TextWidth recht unpräzise zu sein - bei manchen TrueType-Fonts kommen absurde Werte raus (die Typographen wissen warum).
Nun gibt es bei .NET einige nette Funktionen im Berech
GDI+ - z.B. läßt sich anscheinend das Padding in der BoundingBox mittels TextFormatFlags ausschalten (siehe Beispielprogramm von MS unter
http://msdn.microsoft.com/msdnmag/is...g/default.aspx ).
Ich vermute, wäre die Box korrekt, stimmten auch die Ausgaben von TextWidth - also:
Kriegt man das auch direkt unter
Win32 hin?
Was ich sonst schon gesehen habe: Den Text auf ein Bitmap ausgeben und dann die Bitmap "vermessen".. Das scheint allerding wirklich nicht sehr effizient zu sein.
Für jeden Tipp dankbar
salat (der grüne!)