GDI+ Text
-
Tach auch. Ich hänge jetzt hier schon ewig dran und hoffe hier kennt sich wer eventuell mit meinem Problem aus.
Habe eine Delphi Komponente für CBuilder die mit GDI+ arbeitet.
Ich kann dort Smooth als Eigenschaft aktivieren, was dann grosse Auswirkungen auf die Darstellung hat.if FSmooth then begin Graphics.SetSmoothingMode(SmoothingModeAntiAlias); Graphics.SetPixelOffsetMode(PixelOffsetModeHighQuality); end else begin Graphics.SetPixelOffsetMode(PixelOffsetModeNone); end;Ohne Smooth: http://img120.imageshack.us/img120/5493/drawtexttl7.png
Mit Smooth: http://img396.imageshack.us/img396/438/drawtext2eh6.png
Man sieht das mit Smooth der Rahmen dicker wird. Bei Ellipsen sieht man durch diesen Effekt keine Pixelkanten mehr. Das grosse Problem das ich nun habe ist das ohne Smooth die Schrift garnicht/kaum lesbar ist und mit Smooth endlich lesbar wird, aber auch so hässlich fett. Ich möchte eigentlich immer egal welcher Mode düne gut lesbare Schrift.
Nun habe ich unter obigen Codeschnippsel
Graphics.SetTextRenderingHint(TextRenderingHintSystemDefault);gesetzt, aber auch
Graphics.SetTextRenderingHint(TextRenderingHintAntiAlias);Dies hatte leider und seltsamerweise beides keinerlei Auswirkungen auf die Schrift. Nur Graphics.SetSmoothingMode(SmoothingModeAntiAlias); bewirkt bei Schrift änderungen.
Hat eventuell irgendjemand einen Vorschlag warum die Schrift ohne Smooth unlesbar ist und wo mein Fehler liegt? Wäre echt bezaubert wenn da einer weiterhilft.

function TGPGraphics.SetSmoothingMode(smoothingMode: TSmoothingMode): TStatus; begin result := SetStatus(GdipSetSmoothingMode(nativeGraphics, smoothingMode)); end; function TGPGraphics.SetPixelOffsetMode(pixelOffsetMode: TPixelOffsetMode): TStatus; begin result := SetStatus(GdipSetPixelOffsetMode(nativeGraphics, pixelOffsetMode)); end; function TGPGraphics.SetTextRenderingHint(newMode: TTextRenderingHint): TStatus; begin result := SetStatus(GdipSetTextRenderingHint(nativeGraphics, newMode)); end; TextRenderingHint = ( TextRenderingHintSystemDefault, // Glyph with system default rendering hint TextRenderingHintSingleBitPerPixelGridFit, // Glyph bitmap with hinting TextRenderingHintSingleBitPerPixel, // Glyph bitmap without hinting TextRenderingHintAntiAliasGridFit, // Glyph anti-alias bitmap with hinting TextRenderingHintAntiAlias, // Glyph anti-alias bitmap without hinting TextRenderingHintClearTypeGridFit // Glyph CT bitmap with hinting ); TTextRenderingHint = TextRenderingHint;BTW Es handelt sich bei der Komponente um BlockEditor von KSDEV. (Leider kein Support mehr seit einem Jahr erreichbar
)
-
Ach, ich habe den Aufruf ganz vergessen.
FPath: TGPGraphicsPath; FPath.AddString(FText, Length(FText), Family, FS, Size, R, StringFormat);Hier wird nicht mit GdipDrawString, sondern GdipAddPathString gearbeitet.
GdipDrawString: http://www.com.it-berater.org/gdiplus/noframes/text_functions.htm
GdipAddPathString: http://com.it-berater.org/gdiplus/noframes/graphicspath_functions_A.htmfunction TGPGraphicsPath.AddString( string_: WideString; length : Integer; family : TGPFontFamily; style : Integer; emSize : Single; // World units layoutRect: TGPRectF; format : TGPStringFormat): TStatus; var gpff : GPFONTFAMILY; gpsf : GPSTRINGFORMAT; begin gpff := nil; gpsf := nil; if assigned(family) then gpff := family.nativeFamily; if assigned(format) then gpsf := format.nativeFormat; result := SetStatus(GdipAddPathString( nativePath, PWideChar(string_), length, gpff, style, emSize, @layoutRect, gpsf)); end;Ich bin immernoch am Suchen das irgendwie hinzubekommen.
