Gibt es eine Möglichkeit zu deaktivieren Schriftart Anti-Aliasing bei der Verwendung von TextRect (aka ExtTextOut in GDI32) in Delphi?

StackOverflow https://stackoverflow.com/questions/3716304

  •  02-10-2019
  •  | 
  •  

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.

War es hilfreich?

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top