OK、次の画像に示すように、実行時にTScrollBoxサーフェスにカスタム数のTPanelを作成しようとしています。
これを取得するために、私は次のコードを使用していますが、それは正常に機能します。
var
pan: array of TPanel;
maxp, i, x, y: Integer;
...
maxp := 10;
SetLength(pan, maxp);
for i := 1 to maxp do begin
// x is correct value; doesn't cause problem
// y is correct value; doesn't cause problem
pan[i-1] := TPanel.Create(form1);
with pan[i-1] do begin
Width := 100;
Height := 150;
Top := x * 151;
Left := y * 101;
Parent := ScrollBox1;
end;
end;
現在、同じインデックス(img [0]-> pan [0]、img [1]-> pan [1]など)を持つすべてのTPanelにTImageオブジェクトを配置するのに問題があります。次の画像を見てください。
同じロジックを使用して、TImageを作成しようとしましたが、成功しませんでした。
私はこのコードを使用していますが、何が問題なのか理解できません。それは私にはとても単純に見えますが、どういうわけかそれは期待される効果を提供しません。
var
pan: array of TPanel;
img: array of TImage;
maxp, i, x, y: Integer;
...
maxp := 10;
SetLength(pan, maxp);
SetLength(img, maxp);
for i := 1 to maxp do begin
// x is correct value; doesn't cause problem
// y is correct value; doesn't cause problem
pan[i-1] := TPanel.Create(form1);
with pan[i-1] do begin
Width := 100;
Height := 150;
Top := x * 151;
Left := y * 101;
Parent := ScrollBox1;
end;
img[i-1] := TImage.Create(form1);
with img[i-1] do begin
Width := 98;
Left := 1;
Height := 148;
Top := 1;
// in original code next line had img[0]. which caused problem
Picture.LoadFromFile('some_image_file');
Parent := pan[i-1];
end;
end;
どういうわけか、すべてのTImageオブジェクトを最初のTPanel(pan [0])の同じ場所に配置します。それは言うので私には混乱しますParent := pan[i-1];
が、何らかの理由でそれは常にTImageをpan[0]に入れます。ブレークポイントを使用して、すべてのforループサイクル(最後にApplication.ProcessMessagesを追加)の後に何が起こっているかを確認しようとしました。実際には10種類の画像が作成されますが、pan[0]に配置されます。もちろん、最後には、pan[0]にロードされた最後の画像だけが表示されます。
私の質問は、(同じ配列インデックスを持つ)動的TPanelごとに1つの動的TImageを作成する方法ですか?
解決しました!