1

Delphi7からグラフィカルモジュールの1つであるXE2にコードを移行しています。変数を使用してTRectいます。古いコードはDelphi7で問題なく機能しています。

元:

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

コードを新しいXE2に移植しているときに、問題E0264に直面しています:左側をに割り当てることができません

XE2 TRectとD7の変更点、値の割り当て方法について説明してください。

4

2 に答える 2

9

投稿したコードは、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.
于 2012-09-10T13:49:47.780 に答える