Delphi 调用Canvas.TextExtent子标签后未重新绘制TeeChart

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

我用

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

  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 API
DrawText/Ex()