为什么我需要在Delphi 2009中指定Canvas的字体来改变字体大小?

我有一个TPanel的子类,我非常非常喜欢我的懊恼,这样做的字体似乎永远不会采取:
font.size := AFontsize;
font.style := AFontStyle;
font.color := AFontColor;

但是当我这样做时它会改变:

Canvas.Font.Assign(Font);

我没有在Delphi 7中这样做,但我似乎必须在2009年这样做.这是什么交易?

解决方法

如果使用画布在面板中绘制文本,则必须设置画布字体.

某些组件和/或某些Delphi版本可以有意或者作为先前绘制任务的副作用设置Canvas.Font,但是您不应该依赖它.

所以建议做Canvas.Font:= Font;在开始绘制文本之前.

这同样适用于Canvas.Brush和Canvas.Pen.

type
  TMyPanel = class(TCustomPanel)
  protected
    procedure Paint; override;
  end;

procedure TMyPanel.Paint;
var
  r: TRect;
begin
  r := ClientRect;

  Canvas.Brush.Color := Color;
  Canvas.FillRect(r); // fill the background

  Canvas.Font := Font;
  DrawText(Canvas.Handle,'Sample Text',-1,r,DT_SINGLELINE or DT_CENTER or DT_VCENTER or DT_EXPANDTABS or DT_nopREFIX);
end;

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...