Gibt es eine Möglichkeit zu deaktivieren Schriftart Anti-Aliasing bei der Verwendung von TextRect (aka ExtTextOut in GDI32) in Delphi?
Frage
Ich verwende eine benutzerdefinierte Messanlage, basierend auf dem Beispiel, das mit Delphi (5 Enterprise) kam. Für diejenigen, die nicht wissen, ist es wie eine glatte Fortschrittsbalken, sondern zeigt den Prozentsatz oder Wert in der Mitte (vertikal und horizontal) des Bauteils.
Um sicherzustellen, dass der Text lesbar ist, sowohl wenn das Messgerät gefüllt ist, und wenn es leer ist, wird der Text mit invertierten Farben angezeigt.
Wenn Schriftart Anti-Aliasing verwendet wird, diese invertierten Farben Ursache der Kante der Schrift wirklich verrückt Farben erscheinen in, das Aussehen der Komponente zu ruinieren.
Gibt es eine Möglichkeit zu deaktivieren Schriftglättung / Anti-Aliasing für nur diese eine Komponente, oder deaktivieren Sie es, den Text ziehen, dann ist es wieder aktivieren?
Meine aktuelle Problemumgehung ist eine Schriftart zu verwenden, die nicht geglättet bekommen, wie „MS Sans Serif“, aber ich mag die gleiche Schriftart wie der Rest der Benutzeroberfläche für Konsistenz verwenden.
Lösung
Die Angabe NONANTIALIASED_QUALITY
in der LOGFONT
Struktur drehen sollte die Anti-Aliasing aus:
procedure SetFontQuality(Font: TFont; Quality: Byte);
var
LogFont: TLogFont;
begin
if GetObject(Font.Handle, SizeOf(TLogFont), @LogFont) = 0 then
RaiseLastOSError;
LogFont.lfQuality := Quality;
Font.Handle := CreateFontIndirect(LogFont);
end;
procedure TForm1.PaintBox1Paint(Sender: TObject);
const
FontQualities: array[Boolean] of Byte = (DEFAULT_QUALITY, NONANTIALIASED_QUALITY);
var
Canvas: TCanvas;
begin
Canvas := (Sender as TPaintBox).Canvas;
SetFontQuality(Canvas.Font, FontQualities[CheckBox1.Checked]);
Canvas.TextOut(12, 12, 'Hello, world!');
end;