我有一个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。如果我使用DrawText
在TBitmap
上绘制文本,这个效果很好。然而,我需要在上面绘制TRichEdit
的文本,所以我使用EM_FORMATRANGE
用于此目的。但是文本是用我的Windows抗锯齿绘制的(所以如果我在Windows中启用ClearType,它就是ClearType,即使我用ANTIALIASED_QUALITY
设置旧的抗锯齿)。
我想我需要改变TRichEdit
的字体质量,所以我对它应用了这个过程:SetFontQuality(MyRichEdit.Font, ANTIALIASED_QUALITY)
,但这并没有改变什么。
我做了一点测试-我尝试将程序应用于各种控件的Font
属性- TButton
, TMemo
, TEdit
, TLabel
。对他们所有人都有魔力。但是当应用于TRichEdit
的Font
属性时,抗混叠不会改变。
所以,我的问题是:我如何改变TRichEdit控件的抗混叠质量?
Delphi TRichEdit
控件是本机Windows富编辑控件的松散包装。Windows富编辑控件是基于RTF标准的。富编辑控件的内容可以针对文本的不同部分具有不同的字体属性。然而,RTF标准不包括抗混叠。因此,您不能将反混叠设置应用于文本的各个部分。因此,控件使用系统设置来确定抗混叠。