如何在Delphi中更改RichEdit的字体平滑(抗锯齿)质量?

时间:2014-03-18 16:54:39

标签: delphi delphi-7 antialiasing richedit trichedit

我有一个 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属性 - TButtonTMemoTEdit,{{1} }。它就像一个魅力所有。但是,当应用于TLabel的{​​{1}}属性时,抗锯齿功能不会发生变化。

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

1 个答案:

答案 0 :(得分:2)

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