質問

初心者の質問には事前に謝罪しますが、なぜ「アクセス違反」と表示されるのですか?以下のコードのエラー(" Create(SelectorForm);"行)?メインフォームを所有者として使用してみましたが、違いはありませんでした。

var
  SelectorForm: TSelectorForm;
  ArrayOfImages: Array [1..10] of TImage;

implementation

procedure TSelectorForm.FormCreate(Sender: TObject);
var
  Loop: Byte;
begin
  for Loop := 1 to 10 do
  begin
    with ArrayOfImages[Loop] do
    begin
      Create(SelectorForm);
    end;
  end;
end;
役に立ちましたか?

解決

問題は、あなたが効果的にこれをしていることです:

var
  imageVariable: TImage;
begin
  imageVariable.Create (ParentForm);
end;

"作成&quot ;;メソッドは、まだ割り当てられていない変数で呼び出されています。

これを行う必要があります:

var
  imageVariable: TImage;
begin
  imageVariable := TImage.Create (ParentForm);
  try
    //use the object
  finally
    FreeAndNil (imageVariable);
  end;
end;

またはより具体的にはコードで:

for Loop := 1 to 10 do
begin
  ArrayOfImages[Loop] := TImage.Create (Self);
end;

オブジェクトを解放することを忘れないでください

編集:@andiwのコメントを受け入れ、オブジェクトを解放するヒントを取り戻します。 EDIT2:@Gerryのコメントを受け入れ、所有者としてSelfを使用します。

他のヒント

上記のコードには多くの問題があります。 (開始時にそのような" With"を使用しないでください。ループ変数にByteを使用しないでください)

最終的には、フォームを親として作成されたTImageのインスタンスの配列が必要になると思います。

その仮定に基づいて...(未テスト)のようなものが欲しい

var
  ArrayOfImages: Array [0..9] of TImage;  
  i : integer;
begin
  for i := 0 to 9 do
  begin
    ArrayOfImages[i] := TImage.Create(theForm);
  end;

end;

ここで、使用が終了したらアレイをクリーンアップする必要があります。各Imageインスタンスでfreeを呼び出す必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top