2017-02-27 3 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'로 설정하십시오. 그것은 똑같은 일을합니다. 어쨌든 컨트롤은 기본적으로 표시됩니다. '새로 고침 '을 호출하면 아무런 효과가 없습니다. 패널을 서로 겹쳐 놓는 것은 불필요한 것처럼 보입니다. 아마도 진짜 문제는 테마 패널이 테마의 색상이 아닌 다른 색상이 될 수 없다는 것입니다. 그러나 당신은 질문을하지 않았으므로 우리는 당신이 원하는 것을 정말로 알지 못합니다. –

+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 Seattle을 사용하고 있습니다. 델파이 7조차도 기억할 수있는 한 그런 식으로 일했습니다. –

관련 문제