我正在将代码从Delphi 7迁移到XE2的Graphical模块之一。
我们正在使用TRect
变量,旧代码在Delphi 7中没有问题
前:
Var
Beold : TRect
begin
Beold.left := Beold.right;
end.
在将代码移植到新的XE2时,我们正面临着这个问题 E0264:左侧无法分配到
您能解释一下XE2 TRect和D7的变化,我们如何分配valuse
答案 0 :(得分:9)
您发布的代码在快速的Delphi测试应用程序中编译并运行良好,因此它不是您真正的代码。
但是,我怀疑你所遇到的是with
语句中与使用属性相关的更改。以前版本的Delphi中存在一个存在多年的错误,最近已经修复了。 IIRC,它首先在DME10的README.HTML文件的注释中提到。它已被添加到XE2中的文档中(不是作为行为更改,但记录了新行为)。文档位于here at the docwiki。
(附加信息:它一定是2010年发生了变化;MarcoCantù的Delphi 2010 Handbook
在第111页提到“现在使用声明保留了只读属性”,它描述了这种行为以及我在下面指出的解决方案。)
不是直接使用with
语句访问类的属性,而是现在需要声明一个局部变量,并直接读取和写入整个事物(为了清楚起见,省略了错误处理 - 是的,我知道那里应该是一个try..finally块来释放位图)。
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.
答案 1 :(得分:0)
使用
# From https://matplotlib.org/tutorials/introductory/pyplot.html#sphx-glr-tutorials-introductory-pyplot-py
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.show() # This code blocks until the plot window is closed.
抛出错误:[无法分配左侧]
但是
with (Bmp.Canvas.ClipRect) do
begin
Bottom := 100;
end;
没有。
Delphi 10.3.3与早期版本一样,对括号的要求也很高。