gpt4 book ai didi

delphi - 在 Delphi 中使用 TextRect (又名 GDI32 中的 ExtTextOut)时,有没有办法禁用字体抗锯齿?

转载 作者:行者123 更新时间:2023-12-03 15:39:38 28 4
gpt4 key购买 nike

我正在使用一个自定义仪表,基于 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;

关于delphi - 在 Delphi 中使用 TextRect (又名 GDI32 中的 ExtTextOut)时,有没有办法禁用字体抗锯齿?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3716304/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com