【发布时间】: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。
如果我使用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 控件的抗锯齿质量?
【问题讨论】:
-
@FreeConsulting
SelAttributes既不是TFont属性,也不是包含属性。 -
SelAttributes是一个指定字体属性的TTextAttributes属性。这些都不是质量。 -
没错。似乎 MS 并没有真正考虑到这个问题(不是 SelAttributes 的事情,而是控件的抗锯齿质量问题)。
标签: delphi delphi-7 antialiasing richedit trichedit