Delphi中的字体平滑
发布时间:2020-12-15 10:17:35 所属栏目:大数据 来源:网络整理
导读:我在Delphi表单上需要一个大字体的标签,并注意到 其曲线仍然略有锯齿状。我比较了同样的大小 和MSWord中的字体更加流畅。研究后我找到了代码 这让我平滑我的字体,但它是凌乱的,我想知道是否 有更好的方法吗?看VCL来源,TFont似乎已经结束了 非常沮丧的NO
|
我在Delphi表单上需要一个大字体的标签,并注意到
其曲线仍然略有锯齿状。我比较了同样的大小 和MSWord中的字体更加流畅。研究后我找到了代码 这让我平滑我的字体,但它是凌乱的,我想知道是否 有更好的方法吗?看VCL来源,TFont似乎已经结束了 非常沮丧的NONANTIALIASED_QUALITY … 谢谢布里 procedure TForm1.SetFontSmoothing(AFont: TFont);
var
tagLOGFONT: TLogFont;
begin
GetObject(
AFont.Handle,SizeOf(TLogFont),@tagLOGFONT);
tagLOGFONT.lfQuality := ANTIALIASED_QUALITY;
AFont.Handle := CreateFontIndirect(tagLOGFONT);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
I : integer;
begin
For I :=0 to ComponentCount-1 do
If Components[I] is TLabel then
SetFontSmoothing( TLabel( Components[I] ).Font );
end;
解决方法
您可以欺骗VCL创建自己继承TLabel的类。这是一个概念验证码,用Delphi 4测试,这应该让你开始。
为您自己的TLabel类创建一个新单元: unit AntiAliasedLabel;
interface
uses
Windows,Messages,SysUtils,Controls,StdCtrls,Graphics;
type
TLabel = class(StdCtrls.TLabel)
private
fFontChanged: boolean;
public
procedure Paint; override;
end;
implementation
procedure TLabel.Paint;
var
LF: TLogFont;
begin
if not fFontChanged then begin
Win32Check(GetObject(Font.Handle,@LF) <> 0);
LF.lfQuality := ANTIALIASED_QUALITY;
Font.Handle := CreateFontIndirect(LF);
fFontChanged := TRUE;
end;
inherited;
end;
end.
现在修改包含标签的表单单元,在StdCtrls之后添加AntiAliasedLabel单元。这将导致您自己的类AntiAliasedLabel.TLabel被创建,通常将创建StdCtrls.TLabel。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
