我有一个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;