【问题标题】:How to change the font smoothing (anti-aliasing) quality of a RichEdit in Delphi?如何在 Delphi 中更改 RichEdit 的字体平滑(抗锯齿)质量?
【发布时间】:2014-03-18 16:54:39
【问题描述】:

我有一个 Delphi 7 应用程序,我在其中将文本绘制到 TBitmap。我需要能够控制文本的抗锯齿质量。为此,我使用以下程序:

procedure SetFontQuality(Font: TFont; Quality: Byte);
var
  lf: TLogFont;
begin
  GetObject(Font.Handle, SizeOf(TLogFont), @lf);
  lf.lfQuality := Quality;
  Font.Handle := CreateFontIndirect(lf);
end;

我为我的TBitmap 调用它,如下所示:SetFontQuality(MyBitmap.Canvas.Font, ANTIALIASED_QUALITY)。这里的目标是设置旧的抗锯齿而不是新的 ClearType。 如果我使用DrawTextTBitmap 上绘制文本,这非常有用。 但是,我需要在其上绘制TRichEdit 的文本,因此我为此使用EM_FORMATRANGE。但是无论我的 Windows 抗锯齿是什么来绘制文本(因此,如果我在 Windows 中启用 ClearType,它就是 ClearType,即使我使用 ANTIALIASED_QUALITY 设置了旧的抗锯齿)。

我想我需要更改TRichEdit 的字体质量,所以我将程序应用于它:SetFontQuality(MyRichEdit.Font, ANTIALIASED_QUALITY),但这并没有改变。

我做了一些测试 - 我尝试将该过程应用于各种控件的 Font 属性 - TButtonTMemoTEditTLabel。它对所有人都有效。但是当应用于TRichEditFont 属性时,抗锯齿不会改变。

所以,我的问题是:如何更改 TRichEdit 控件的抗锯齿质量?

【问题讨论】:

  • @FreeConsulting SelAttributes 既不是 TFont 属性,也不是包含属性。
  • SelAttributes 是一个指定字体属性的TTextAttributes 属性。这些都不是质量。
  • 没错。似乎 MS 并没有真正考虑到这个问题(不是 SelAttributes 的事情,而是控件的抗锯齿质量问题)。

标签: delphi delphi-7 antialiasing richedit trichedit


【解决方案1】:

Delphi TRichEdit 控件是对原生 Windows 富编辑控件的松散包装。 Windows 富编辑控件基于 RTF 标准。 Rich Edit 控件的内容对于文本的不同部分可以具有不同的字体属性。然而,RTF 标准不包括抗锯齿。因此,您不能将抗锯齿设置应用于文本的各个部分。因此,控件使用系统设置来确定抗锯齿。

【讨论】:

  • 所以,你是说不可能?我不希望能够为文本的不同部分设置不同的抗锯齿,但他们(微软)肯定可以(并且应该)轻松实现一种方法来设置整个控件的全局抗锯齿(和这就是我想做的)。它显然不是固定的,因为它尊重系统设置,所以为什么不让程序员自己设置呢?如果他们真的没有实施某种方法,那是他们的一大失误。
  • @jedi - 查找关于富编辑 here 的所有信息。
  • @Sertac 如果我在 msdn 上找到了有关此问题的内容,我不会问这个问题。如果您在那里找到了有关抗锯齿的信息,请分享确切的链接。
  • @jedi - 不,我发布了链接作为富编辑对字体质量没有任何明确支持的证据。很明显,它需要明确的支持,因为它能够呈现不同的字体,因此 WM_SETFONT 不像其他控件那样具有确定性。
  • @Sertac 是的,我好像被卡住了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多