2017-02-27 13 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

試行錯誤によってプログラミングしています。下がってください。 Pointlessでは '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

のdupeですか?これは、「カラー」設定時に自動的に発生します。プロパティ。 –

+0

いいえ、そうではありません。それを試してみてください。 –

+0

コメントをする前に試してみました。 'Color'プロパティを変更し、' ParentBackground'プロパティを 'False'に切り替えました。しかし、再び、OPは彼らが使用しているDelphiのバージョンを言っていないので、そうかもしれません。私はDelphi 10 Seattleを使用しています。私が覚えている限り、それはDelphi 7でも可能です。 –

関連する問題