2017-02-27 72 views
-5
for y:=32 downto 1 do begin 
    for x := 1 to 16 do begin 
    PanelArray[x,y]:=TPanel.create(self); 
    PanelArray[x,y].parent:=self; 
    PanelArray[x,y].Color:=clBlack; 
    PanelArray[x,y].Enabled:=true; 
    PanelArray[x,y].Show; 
    PanelArray[x,y].BevelOuter:=bvNone; 
    PanelArray[x,y].OnClick:=Panel1Click; 
    PanelArray[x,y].Visible:=true; 
    PanelArray[x,y].width:=10; 
    PanelArray[x,y].height:=10; 
    PanelArray[x,y].Refresh; 
    end; 
end; 
+1

該代碼看起來應該顯示它們很好。不知道爲什麼你需要在表單左上角的512個面板相互疊加,但這就是代碼的作用。另外,你的問題是什麼? –

+3

您正在通過試驗和錯誤進行編程。退後一步。毫無意義地使用'Show'並將'Visible'設置爲'True'。這也是一樣的。無論如何,該控件默認是可見的。調用'Refresh'沒有任何用處。把面板放在彼此之上似乎是不必要的。也許真正的問題是你不能讓主題面板成爲主題以外的任何顏色。但是你沒有提出問題,所以我們不知道你想要什麼。 –

+1

這個問題是一個愚蠢的http://stackoverflow.com/questions/3778161/delphi-2009-create-a-tpanel-at-runtime-and-change-its-color –

回答

3

所有512個正在創建,他們只是看不見。您需要將ParentBackground設置爲「false」:

for y:=32 downto 1 do begin 
    for x := 1 to 16 do begin 
    PanelArray[x,y]:=TPanel.create(self); 

    /////////// 
    PanelArray[x,y].ParentBackground := false; 
    /////////// 

    PanelArray[x,y].parent:=self; 
    PanelArray[x,y].Color:=clBlack; 
    PanelArray[x,y].BevelOuter:=bvNone; 
    PanelArray[x,y].OnClick:=Panel1Click; 
    PanelArray[x,y].width:=10; 
    PanelArray[x,y].height:=10; 
    end; 
end; 

我還刪除了存在於您的問題中的各種不必要的代碼行。如調用ShowRefresh,並設置EnabledVisible

+0

這種情況自動發生時,設置「顏色」屬性。 –

+0

不,它不。嘗試一下。 –

+0

我在評論之前就試過了。我改變了'Color'屬性和'ParentBackground'屬性本身切換爲'False'。但是再次,OP沒有說他們使用的是哪個版本的Delphi,所以可能是這種情況。我正在使用德爾福10西雅圖。只要我記得,即使是德爾福7,它的工作方式也是如此。 –