为什么我需要分配画布';s字体在Delphi 2009中更改字体大小?
我有一个TPanel的子类,我非常喜欢它,这让我很懊恼,在这样做时,字体似乎从来没有使用过:为什么我需要分配画布';s字体在Delphi 2009中更改字体大小?,delphi,fonts,delphi-2009,Delphi,Fonts,Delphi 2009,我有一个TPanel的子类,我非常喜欢它,这让我很懊恼,在这样做时,字体似乎从来没有使用过: font.size := AFontsize; font.style := AFontStyle; font.color := AFontColor; 但当我这样做时,情况确实发生了变化: Canvas.Font.Assign(Font); 在Delphi7中我不必这样做,但我似乎必须在2009年这样做。怎么回事 如果在面板中使用画布绘制文本,则必须设置画布字体 某些组件和/或某些Delphi版本可
font.size := AFontsize;
font.style := AFontStyle;
font.color := AFontColor;
但当我这样做时,情况确实发生了变化:
Canvas.Font.Assign(Font);
在Delphi7中我不必这样做,但我似乎必须在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;
也许ParentFont:=true
?,首先设置ParentFont:=false,然后重试。@Johan,更改字体会自动将ParentFont设置为false(在OI中尝试)。IsCanvas.font:=font代码>真的是推荐的方法吗?是不是应该是Canvas.Font.Assign(Font)
?谢谢,我想我已经试过了,设置Canvas.Font.Assign(Font)
导致我正在画的东西被重画(因此,很多闪烁),我肯定是无意中用了另一种方式。@AndriyM:VCL通常使用Canvas.Font:=Font
。因此,这与使用Assign
相同,因为Font
属性本身的设置过程执行Assign
。