好的,我試圖在運行時在TScrollBox表面上創建一些自定義數量的TPanel,就像您可以在以下圖像中看到的一樣。動態TImage在動態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;
現在,我有問題放的TImage對象在每TPanel與相同索引(IMG [0] - >泛[0],IMG [1] - >泛[1],等等)。請看下面的圖片:
使用相同的邏輯,我試圖創建的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製作一個動態TImage(具有相同的數組索引)?
已解決!
也許更好用,以'一個調用做到這一點SetBounds' – 2012-04-21 21:47:14
@DavidHeffernan - 對不起,我一直在使用'的setBounds(1,1,98,148)審判;'和'SetBouds(X * 151 ,y * 101,100,150)而不是設置單獨的Width,Height,Left和Top屬性,但效果是相同的。 – Wh1T3h4Ck5 2012-04-21 21:53:12
確定效果是一樣的。我不是故意回答你的問題。只是它更乾淨。 – 2012-04-21 21:54:54