-5

私はDelphiを使用しており、TImageこの名前と構造でタイプの10個の要素の配列を作成しました。

Form3.images[1..max] of TImage. 

私はそれをこのように初期化しようとしました:

for x := 1 to max do
begin
  images[x] := TImage.Create(Form3);
  images[x].AutoSize := True;
  images[x].Name := 'image' + IntToStr(x);
  images[x].Visible := true;
  images[x].Parent := Form3;
end;

その後、別の変数(Form3.a1:TImageと呼ばれる)のコンテンツを配列のすべての要素に配置しようとしました。

私はこれらの指示でこれをやろうとしました:

for i := 1 to max do
begin
  Form3.Images[i]:=Form3.a1;             // ( Form3.a1: TImage) <- this is visible
end;

(前の手順を使用するのが正しいかどうかはわかりません)その後、配列の画像の位置を変更しました。

//Form3.square:TShape

x := Form3.square.Left;
y := Form3.square.Top;
Form3.Images[1].Top := y + 70;
Form3.Images[1].Left := x + 60;
...
Form3.Images[1].Top := y + 10;
Form3.Images[1].Left := x + 50;

配列の画像ごとに異なる位置を設定しましたが、プログラムを実行すると、配列の画像が表示されません。Form3.square.visible = falseも設定しようとしましたが、何も変わりません。

これが私が欲しいものです:

  • a1変数と配列の変数の間で同じ内容を持ち、images位置のみを変更します
  • 配列の画像を表示します(試しimages[x].Visible := true;ましたが、機能しません)。

助けが必要です、私は他の詳細を与えることができます。ありがとうございました。

4

2 に答える 2

3

コントロールの位置を設定するのを忘れました。LeftTop。これは、 を呼び出して実行することをお勧めしSetBoundsます。また、寸法は指定されていませんが、それはAutoSizeプロパティによって処理されます (ただし、表示されるためには必要ありません)。

于 2012-05-07T15:34:04.770 に答える
1

配列内の画像の位置を設定している場合(他の回答imagesのコメントで述べているように)、最初のコードは正常に機能するはずです。

ただし、以下を確認してください。

  • ImageListのプロパティWidthとプロパティは設定されていますか?それらを変更すると、ImageListがクリアされることに注意してください。HeightForm3.Lista
  • 変数が指すTForm3場所と同じインスタンスを見ていることを確認してください。Form3(とにかく、そのグローバルフォーム変数を使用しないでください!)

次に、画像をあるコードから別のコードにコピーする2番目のコードについて説明します。

  • 質問a1の途中で書いたように、(ローカル)宣言された変数はありますか?次に、Form3.a1(のプライベートフィールドTForm3)とa1(変数)は同じではありません!
  • Form3.a1からにコピーしていることに注意してくださいImages[i]。それはおそらく逆ではないでしょうか?
  • これが本当にあなたが望むものである場合:Form3.a1万が一空ですか?

私が考えることができる他の2つの可能性がありますが、どちらも例外になるので、これらは当てはまらないと思います。

  • ImageListForm3.Listaは、画像を保持していないか、十分ではありません。
  • 画像Form3.a1にはビットマップは含まれていませんが、gif、jpeg、またはその他のグラフィックタイプが含まれています。
于 2012-05-07T17:41:21.763 に答える