Est-il un moyen de désactiver la police anti-aliasing lors de l'utilisation TextRect (alias ExtTextOut dans GDI32) à Delphes?

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

  •  02-10-2019
  •  | 
  •  

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.

Était-ce utile?

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top