Est-il un moyen de désactiver la police anti-aliasing lors de l'utilisation TextRect (alias ExtTextOut dans GDI32) à Delphes?
Question
J'utilise une jauge personnalisée, basée sur l'exemple fourni avec Delphi (5 Enterprise). Pour ceux qui ne connaissent pas, il est comme une barre de progression lisse, mais affiche le pourcentage ou la valeur au centre (verticalement et horizontalement) du composant.
Pour que le texte est lisible à la fois lorsque la jauge est remplie et quand il est vide, le texte est affiché en couleurs inversées.
Lorsque la police anti-aliasing est utilisé, ces couleurs inversées provoquent le bord de la police à apparaître dans des couleurs vraiment fou, ruiner l'apparence du composant.
Est-il possible de désactiver le lissage des polices / anti-aliasing pour ce seul composant, ou le désactiver, dessiner le texte, puis réactiver?
Ma solution actuelle est d'utiliser une police qui ne se lissée, comme « MS Sans Serif », mais je voudrais utiliser la même police que le reste de l'interface utilisateur pour la cohérence.
La solution
Spécification NONANTIALIASED_QUALITY
dans la structure de LOGFONT
devrait tourner antialiasing off:
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;