我正在使用自定义仪表,基于Delphi(5 Enterprise)附带的示例.对于那些不知道的人,它就像一个平滑的进度条,但显示组件中心(垂直和水平)的百分比或值.
为确保文本在填充仪表和空白时都可读,文本将使用反色显示.
使用字体消除锯齿时,这些反转的颜色会导致字体边缘显示为非常疯狂的颜色,从而破坏了组件的外观.
有没有办法只为这一个组件禁用字体平滑/抗锯齿,或禁用它,绘制文本,然后重新启用它?
我目前的解决方法是使用一种不能平滑的字体,比如“MS Sans Serif”,但我想使用与UI其余部分相同的字体来保持一致性.
解决方法
在LOGFONT结构中指定NONANTIALIASED_QUALITY应该关闭抗锯齿:
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;