자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Firemonkey [XE6] Rectangle 동적생성 Align 순서변경
2014.07.15 03:11
Rectangle 을 동적으로 20개정도 생성하는 소스를 만들어, 실행해보니..생각치도 못한 문제가 발생되어 질문드리게 됬네요..
Layout 을 하나 만들고, 그 Layout 을 Parent로 해서 Rectangle 을 동적으로 20개정도생성합니다. [아래 소스 참조]
Rectangle[Index] := TRectangle.Create(nil); Rectangle[Index].Parent := LayoutBase; Rectangle[Index].Align := TAlignLayout.Top; Rectangle[Index].Stroke.Kind := TBrushKind.None; Rectangle[Index].Fill.Color := TAlphaColors.Whitesmoke; Rectangle[Index].Height := 30; Rectangle[Index].Visible := true;
그런데 위와 같이 [ Rectangle[Index].Align := TAlignLayout.Top; ] 으로 계속 추가하게 되면,순차적으로 Rectangle이 생겨나는 것이 아니라, 순서가 뒤죽박죽으로 추가가 되더군요..[순서가 뒤죽박죽 추가가 되는것은, Rectangle을 부모로 한 TText도 동적으로 같이 생성해서TText 에 번호를 붙여봤습니다]
TAlignLayout.Top 을 TAlignLayout.MostTop으로도 변경해보았지만, 마찬가지입니다.
이것을 순서적으로 추가할 수 있는 방법이 있을까요?
Firemonkey [XE6] Rectangle 동적생성 Align 순서변경
2014.07.15 03:11
Rectangle 을 동적으로 20개정도 생성하는 소스를 만들어, 실행해보니..
생각치도 못한 문제가 발생되어 질문드리게 됬네요..
Layout 을 하나 만들고, 그 Layout 을 Parent로 해서 Rectangle 을 동적으로 20개정도
생성합니다. [아래 소스 참조]
Rectangle[Index] := TRectangle.Create(nil);
Rectangle[Index].Parent := LayoutBase;
Rectangle[Index].Align := TAlignLayout.Top;
Rectangle[Index].Stroke.Kind := TBrushKind.None;
Rectangle[Index].Fill.Color := TAlphaColors.Whitesmoke;
Rectangle[Index].Height := 30;
Rectangle[Index].Visible := true;
그런데 위와 같이 [ Rectangle[Index].Align := TAlignLayout.Top; ] 으로 계속 추가하게 되면,
순차적으로 Rectangle이 생겨나는 것이 아니라, 순서가 뒤죽박죽으로 추가가 되더군요..
[순서가 뒤죽박죽 추가가 되는것은, Rectangle을 부모로 한 TText도 동적으로 같이 생성해서
TText 에 번호를 붙여봤습니다]
TAlignLayout.Top 을 TAlignLayout.MostTop으로도 변경해보았지만, 마찬가지입니다.
이것을 순서적으로 추가할 수 있는 방법이 있을까요?
[자답]
http://cafe.naver.com/delphifmx.cafe 카페의 조대현님의 답변입니다.
Align = alTop으로 설정된 객체끼리는 Position.Y로 순서를 바꿀 수 있습니다.
예를 들면
ImageA.Parent := FormMain;
ImageA.Align := alTop;
ImageA.Height := 100;
이렇게 하면 ImagA.Position.Y는 자동으로 0이 됩니다.
ImageA.Position.Y := 40; //이렇게 해도 자동으로 0이 됩니다.
이 상태에서 ImageB를 A 밑에 놓으려면
ImageB.Parent := FormMain;
ImageB.Align := alTop;
ImageB.Height := 100;
ImageB.Position.Y := 1; //A의 Y보다 크게만 하시면 되요
이렇게 하시면 됩니다.
그럼 자동으로
ImageB.Position.Y = 100이 되어있습니다. 즉, alTop에 의하여 자기보다 상단 객체의 높이로 딱 붙어버립니다.
이 방법으로 얼마든지 순서를 조작할 수 있습니다.
ImageC를 A와 B사이에 끼워볼까요?
ImageC.Parent := FormMain;
ImageC.Align := alTop;
ImageC.Height := 100;
ImageC.Position.Y := 50; // 1~99까지 다 됩니다.
이렇게 하시면 됩니다.
ImageB.Position.Y가 100이었죠? 그래서 자동으로 밑으로 밀려나면서 ImageC가 사이에 끼워집니다.