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

时间:2011-10-14 19:00:55

标签: delphi fonts delphi-2009

我有一个TPanel的子类,我非常非常喜欢这个问题,这个字体在执行此操作时似乎永远不会采用:

font.size := AFontsize;
font.style := AFontStyle;
font.color := AFontColor;

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

Canvas.Font.Assign(Font);

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

1 个答案:

答案 0 :(得分:8)

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

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

所以建议在开始绘画文字之前先做Canvas.Font := Font;

同样适用于Canvas.BrushCanvas.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;
相关问题