3

我正在使用基于 Delphi (5 Enterprise) 附带的示例的自定义仪表。对于不知道的人来说,它就像一个平滑的进度条,但在组件的中心(垂直和水平)显示百分比或值。

为确保在仪表已填满和为空时都可以阅读文本,文本以反色显示。

当使用字体抗锯齿时,这些反色会导致字体边缘出现非常疯狂的颜色,从而破坏组件的外观。

有没有办法只为这个组件禁用字体平滑/抗锯齿,或者禁用它,绘制文本,然后重新启用它?

我目前的解决方法是使用一种不会被平滑的字体,比如“MS Sans Serif”,但为了保持一致性,我想使用与 UI 的其余部分相同的字体。

4

1 回答 1

13

NONANTIALIASED_QUALITY在结构中指定LOGFONT应该关闭抗锯齿:

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;
于 2010-09-15T11:14:44.740 回答