我正在将代码从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年进行了更改; MarcoCantù的Delphi 2010 Handbook
在第111页上将其称为“ With语句现在保留了只读属性”,它描述了此行为以及我在下面指出的解决方案。)] >
而不是使用with
语句直接访问类的属性,现在您需要声明一个局部变量,然后直接读取和写入整个内容(为清楚起见,省略了错误处理-是的,我知道应该有一个试试..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.
结果,使用