Delphi 调用Canvas.TextExtent子标签后未重新绘制TeeChart
我用 Embarcadero®Delphi 10.3版本26.0.36039.7899 TeeChart标准v2020.29.200113 32位VCL 我的操作系统是Windows 7 Ultimate ServicePack1 我在表格上贴了一个TChart,然后在TChart上贴了一个标签。 在第一次调用Label1.Canvas.TextExtent后,图表停止重新绘制。例如,在最小化和最大化表单而不是图表内容之后,我看到了背景窗口的一部分 允许在TChart上贴标签吗Delphi 调用Canvas.TextExtent子标签后未重新绘制TeeChart,delphi,vcl,teechart,delphi-10.3-rio,Delphi,Vcl,Teechart,Delphi 10.3 Rio,我用 Embarcadero®Delphi 10.3版本26.0.36039.7899 TeeChart标准v2020.29.200113 32位VCL 我的操作系统是Windows 7 Ultimate ServicePack1 我在表格上贴了一个TChart,然后在TChart上贴了一个标签。 在第一次调用Label1.Canvas.TextExtent后,图表停止重新绘制。例如,在最小化和最大化表单而不是图表内容之后,我看到了背景窗口的一部分 允许在TChart上贴标签吗 type
type
TForm1 = class(TForm)
Chart1: TChart;
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
ASize: TSize;
begin
ASize := Label1.Canvas.TextExtent(Label1.Caption);
end;
单击按钮1后,图表停止重新绘制
UPD:
我们从Delphi7迁移到RAD Studio 10.3。在我们的项目中,我们使用自定义标签。将覆盖绘制方法。我们在标签的画布上绘制,并使用label.canvas.TextExtent计算文本的大小
标签的父组件是TChart
上面的示例在Delphi7中是正确的,但在Delphi 10.3中不是正确的。您发布的代码不会以任何方式影响图表(或任何其他内容)的重画。它也没有做任何能完成任何事情的事情。如果您需要调试帮助,请发布一篇文章来演示这个问题。@Ken此代码并不是为了实现任何有用的功能。它已经是一个术语了。@DavidHeffernan:a包括“可复制”一词。如果我能明确地遵循帖子的说明,并且问题没有发生,那么根据内容,它显然是不可复制的,这就是我所说的。不过,谢谢。当然我会发布一个最小的可复制示例。很可能您无法重现问题,因为您有其他版本的RAD Studio、TeeChart或OS?单击按钮1后是否最小化和最大化窗口?我将在我的帖子中添加版本。在实际绘制操作之外使用
TLabel.Canvas
是无效的(即,在TLabel.paint()方法内部)。找到另一个解决方案。例如,创建一个单独的TCanvas
,将TLabel.Font
分配给Canvas.Font
,将GetWindowDc(Self.Handle)
的结果分配给Canvas.Handle
,然后使用Canvas.TextExtent()
。或者直接使用Win32 APIDrawText/Ex()
。