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

前端之家收集整理的这篇文章主要介绍了为什么我需要在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相关文章