我有一个TPanel的子类,我非常非常喜欢这个问题,这个字体在执行此操作时似乎永远不会采用:
font.size := AFontsize;
font.style := AFontStyle;
font.color := AFontColor;
但是当我这样做时确实会改变:
Canvas.Font.Assign(Font);
我没有在Delphi 7中这样做,但我似乎必须在2009年这样做。这是什么交易?
答案 0 :(得分:8)
如果使用画布在面板中绘制文本,则必须设置画布字体。
某些组件和/或某些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;