Delphi中的字体平滑

前端之家收集整理的这篇文章主要介绍了Delphi中的字体平滑前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在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。

猜你在找的Delphi相关文章