2017-05-05 11 views
0

델파이로 안드로이드 앱을 만들었지 만 이상한 행동을합니다. 이것이 바로 상황입니다.델파이 클론 레이아웃

enter image description here

나는 (InputLayout라고 함) TLayout을 가지고 있고 그것은 GridPanelLayout이 포함되어 있습니다. 나는 InputLayout 안쪽이 그리드를 복사해야하지만이 결과를 얻을 : 물론

enter image description here

나는 왼쪽에 하나가 결과. 위 그림의 정확한 사본을 갖고 싶기 때문에 이 아니라을 찾고 있습니다. 최종 결과는 두 번째 GridPanelLayout이어야하며 두 번째 GridPanelLayout은 첫 번째 GridPanelLayout 아래에 있어야합니다. 다음 코드입니다.

procedure TForm1.Button3Click(Sender: TObject); 
var c: TGridPanelLayout; 
begin 

try 

    c := TGridPanelLayout(InputLayout.Children[0].Clone(InputLayout)); 
    c.Align := TAlignLayout.Top; 
    InputLayout.AddObject(c); 

except 

    // ... 

end; 

end; 

무엇이 잘못 되었나요? InputLayout은 GridPanelLayout을 포함하는 레이아웃이며 그 구성 요소가 유일한 요소이므로 0 인덱스를 사용하여 안전하게 액세스 할 수 있습니다.

+0

디자인 타임'GridPanelLayout'는 상단에 정렬되지 않은 것처럼 보입니다. 'GridPanelLayout'에 몇 개의 열과 행이 있는지는 명확하지 않습니다. 내가 3 열, 1 행 및 맨 위에 정렬 된 첫 번째'GridPanelLayout') 문제를 시도 할 때 폼을 최소화하고 복원하면 사라지는 드로잉 인공물을 얻습니다. 당신을 위해 일어나는 일을 시도하고 질문에 추가하십시오. –

+0

@TomBrunberg 예, 디자인 타임에 레이아웃 내부에 정렬됩니다. 복제품을 TAlignLayout에 넣어야합니까?그 코드를 사용하고 있지만 작동하지 않을 페이지의 크기를 조정하더라도. 그게 버그일까요? –

+0

솔루션을 찾았지만 TGridLayout과 함께 작동한다고 생각합니다. 어떤 이유로 GridPanelLayout은 잘 작동하지 않으며 @TomBrunberg와 동일한 동작을합니다. –

답변

1

TGridPanelLayout을 사용할 수 없다고 생각합니다. 해당 구성 요소에 문제가있는 것 같습니다. Delphi Tokyo Starter를 사용하고 있으며 귀하의 문제에 대한 해결책을 찾았습니다.

  1. 당신이 TEdit 또는 TLabel
  2. TGridLayout.Visible := false; 인해를 설정합니다 예를 들어 필요한 것 GridLayout과에 추가
  3. 이 (가) VertScrollBox
  4. 외부 TGridLayout 넣어 VertScrollBox (또는 TLayout 또는 HorzScrollBox를) 삭제 이것을 "템플릿"으로 사용하고 있습니다. 이 사본을 만들고 복제본이 InputLayout에 추가됩니다.

TGridLayout은 Windows에서 작동하지만 안드로이드와 iOS에서도 작동합니다 (초보자도 테스트 할 수 없음). 이 같은 버튼에 이벤트 핸들러를 추가

//Button1 onclick 
for i := 1 to max do 
    begin 
    c := (GridLayout1.Clone(Owner) as TGridLayout); 
    (c as TGridLayout).Visible := True; 
    (c as TGridLayout).Parent := InputLayout; 
    InputLayout.AddObject(c); 
    end; 

여기에 물론 당신이 InputLayout 안에 만들려고 얼마나 많은 아이들 나타냅니다 max라는 정수 변수가있다. 단일 복사본을 만들어야하는 경우에는 실제로 필요하지 않지만 마음이 바뀌면이 루프를 제공합니다. 여기

enter image description here

당신이 3 개 TEdit 구성 요소를 볼 수 있지만 당신이 TLabel하는 TEditTButton을했다 : 여기 결과가 있습니다. 무엇을해야합니까? TGridLayout 표시를 True로 되돌리기 만하면됩니다 (이 경우 레이블, 편집 및 버튼). Visible poperty를 false로 다시 설정하십시오.

+0

나는 다른 구성 요소를 사용하는 것과 같은 것을 할 것을 명심했다. 예, 루프는 쓸모가 없습니다. 왜냐하면 저는 op에 있지만 좋은 해결책을 요구하지 않았기 때문입니다. 그들이이 버그를 고치기를 바란다 ... –