Delphi7からグラフィカルモジュールの1つであるXE2にコードを移行しています。変数を使用してTRect
います。古いコードはDelphi7で問題なく機能しています。
元:
Var
Beold : TRect
begin
Beold.left := Beold.right;
end.
コードを新しいXE2に移植しているときに、問題E0264に直面しています:左側をに割り当てることができません
XE2 TRectとD7の変更点、値の割り当て方法について説明してください。
Delphi7からグラフィカルモジュールの1つであるXE2にコードを移行しています。変数を使用してTRect
います。古いコードはDelphi7で問題なく機能しています。
元:
Var
Beold : TRect
begin
Beold.left := Beold.right;
end.
コードを新しいXE2に移植しているときに、問題E0264に直面しています:左側をに割り当てることができません
XE2 TRectとD7の変更点、値の割り当て方法について説明してください。
投稿したコードは、Delphiのクイックテストアプリでコンパイルおよび実行されるため、実際のコードではありません。
しかし、あなたがヒットしたのは、with
プロパティの使用に関連するステートメントの変更だと思います。Delphiの以前のバージョンには、長年存在していたバグがありましたが、最近最終的に修正されました。IIRCは、D2010のREADME.HTMLファイルのメモで最初に言及されました。XE2のドキュメントに追加されました(動作の変更としてではなく、新しい動作がドキュメント化されています)。ドキュメントはここdocwikiにあります。
(追加情報:変更されたのは2010年である必要があります。MarcoCantùDelphi 2010 Handbook
は111ページで、この動作と以下に示す解決策を説明する「Withステートメントは読み取り専用プロパティを保持する」と述べています。)
ステートメントを使用してクラスのプロパティに直接アクセスする代わりに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.