加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

有没有办法在Delphi中使用TextRect(在GDI32中为ExtTextOut)时禁

发布时间:2020-12-15 10:06:54 所属栏目:大数据 来源:网络整理
导读:我正在使用自定义仪表,基于Delphi(5 Enterprise)附带的示例.对于那些不知道的人,它就像一个平滑的进度条,但显示组件中心(垂直和水平)的百分比或值. 为确保文本在填充仪表和空白时都可读,文本将使用反色显示. 使用字体消除锯齿时,这些反转的颜色会导致字体边
我正在使用自定义仪表,基于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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读