2012-05-07 47 views
-4

我使用Delphi和我創建的類型TImage絲毫的十個元素的數組這個名字和結構:我創建的TImage的陣列,但它們是不可見

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,但沒有任何變化。

這就是我想要的:

  • 有數組images的變量a1和變量之間的相同的內容,只改變持倉
  • 並使陣列的圖像上可見的(我試過images[x].Visible := true;但它不工作)。

我需要幫助,我可以提供其他細節。 謝謝。

+0

什麼是Form3.a1? –

+0

什麼是Form3.Lista,如果不是圖像列表? – TLama

回答

3

您忘記設置控件的位置; LeftTop。最好通過撥打SetBounds完成。此外,尺寸未指定,但是由AutoSize屬性負責(儘管它不需要它可見)。

+0

哦,謝謝你!對不起,因爲我忘了說我設置了位置!圖像的位置與另一個對象(即形狀)的位置相同。我試圖把shape.visible = false看看下面是否有圖像,但我看不到圖像... pls heeeeeelp :( – Black8AC

1

假設您已經在images數組中設置了圖像的位置(如您在te other answer的註釋中所述),那麼第一個代碼應該可以正常工作。

檢查以下,但:

  • 是的ImageList Form3.Lista集的WidthHeight屬性?請注意,當您更改它們時,ImageList將被清除。
  • 確保您正在查看與Form3變量指向的實例相同的TForm3實例。 (你不應該使用全局表單變量呢!)現在

,關於第二一段代碼,其中您從一個圖像複製到另一個:

  • a1(本地)聲明爲變量你在問題的中途寫了什麼?然後Form3.a1(這是一個私人領域的TForm3)和a1(變量)是不一樣的!
  • 請注意,您正在從Form3.a1複製到Images[i]。難道這不應該是另一回事嗎?
  • 如果這確實是你想要的:是Form3.a1任何機會都是空的?

有2種更多的可能性,我能想到的,但兩者會產生異常,所以我想這是不是這樣的:

  • 的ImageList Form3.Lista持有沒有或沒有足夠的圖像,
  • 圖片Form3.a1不包含位圖,但爲gif,jpeg或其他圖形類型。
+0

好的非常感謝。 – Black8AC

+0

但是有一些問題:我沒有使用一個ImageList;該變量只有一個,它是Form3.a1它內部有一張圖片(正如我所說的一個位圖)但是,如果我已經有一個圖像數組,我必須創建一個ImageList – Black8AC

+1

我假設'Form3 .Lista'是一個'TImageList',因爲你調用了'GetBitmap',什麼類型是Form3.Lista'然後呢? – NGLN

相關問題