gpt4 book ai didi

delphi - 为什么升级 Delphi 后 TRect 得到 "left side cannot be assigned to"?

转载 作者:行者123 更新时间:2023-12-03 18:58:56 27 4
gpt4 key购买 nike

我正在将代码从 Delphi 7 迁移到图形模块之一的 XE2。
我们正在使用 TRect变量,旧代码在 Delphi 7 中运行没有问题

前任:

Var
Beold : TRect
begin
Beold.left := Beold.right;
end.

在将代码移植到新的 XE2 时,我们面临着这个问题
E0264 : 左侧不能分配给

您能否解释一下 XE2 TRect 和 D7 的变化是什么,我们如何分配值

最佳答案

您发布的代码在快速的 Delphi 测试应用程序中编译并运行良好,因此它不是您的真实代码。

我怀疑您遇到的是 with 中的更改。但是,当它与使用属性有关时声明。以前版本的 Delphi 中存在一个存在多年的错误,最近终于修复了。 IIRC,它首先在 D2010 的 README.HTML 文件中的注释中提到。它已被添加到 XE2 的文档中(不是作为行为更改,而是记录了新行为)。文档位于 here at the docwiki .

(附加信息:它一定是在 2010 年发生了变化;Marco Cantù 的 Delphi 2010 Handbook 在第 111 页上将其提及为“The With Statement Now Preserves Read-Only Properties”,描述了这种行为和我在下面指出的解决方案。)

而不是直接使用 with 访问类的属性声明,您现在需要声明一个局部变量,并直接读写整个内容(为清楚起见省略了错误处理 - 是的,我知道应该有一个 try..finally block 来释放位图)。

var
R: TRect;
Bmp: TBitmap;

begin
Bmp := TBitmap.Create;
Bmp.Width := 100;
Bmp.Height := 100;
R := Bmp.Canvas.ClipRect;
{ This block will not compile, with the `Left side cannot be assigned to` error
with Bmp.Canvas.ClipRect do
begin
Left := 100;
Right := 100;
end;
}
// The next block compiles fine, because of the local variable being used instead
R := Bmp.Canvas.ClipRect;
with R do
begin
Left := 100;
Right := 100;
end;
Bmp.Canvas.ClipRect := R;
// Do other stuff with bitmap, and free it when you're done.
end.

关于delphi - 为什么升级 Delphi 后 TRect 得到 "left side cannot be assigned to"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12352563/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com