Kori 2월 1일, 2022에 포스트됨 공유하기 2월 1일, 2022에 포스트됨 Docwiki에 있는 "Using the Relative Panel"를 번역한 글 (번역일: 2022년 1월 31일) 위로 가기: VCL TRelativePanel은 컨테이너 컨트롤이다. 오브젝트를 RelativePanel 안에 넣으면 그 오브젝트의 위치를 지정할 때 같은 RelativePanel 안에 있는 다른 오브젝트를 기준으로 하거나 부모인 RelativePanel를 기준으로 상대적인 위치를 지정할 수 있다. TRelativePanel는 제약이 없기 때문에 자칫 상충되는 정렬을 지정하기 쉽다. 따라서 아래와 같은 몇가지 지침을 따라야 한다. 목차 지정한 정렬 규칙이 반영되는 우선 순위 특별히 고려할 점 보이지 않는 곳으로 정렬 (컨트롤이 사라짐) 의존 순환(Circular Dependency) 상충 관계(Conflicting Relationships) 양쪽 가장자리 정렬(Opposite Edge Alignments) 과 자동-크기(Auto-sizing) 관련 도움말 (See Also) 지정한 정렬 규칙이 반영되는 우선 순위 가장 중요한 부분이다! RelativePanel을 사용할 때 명심해야 한다. RelativePanel의 자식들을 배치하는 절차의 우선 순위는 아래 순서와 같다. Align(상하좌우)WithPanel : 컨트롤을 부모인 RelativePanel를 기준으로 정렬. 예, AlignLeftWithPanel AlignCenterWithPanel (정중앙)이 가장 우선하므로 다른 정렬은 무시된다. Left (왼쪽 정렬)이 Right(오른쪽), Top(위), Bottom(아래) 보다 우선한다. Align(상하좌우)With : 상하좌우 정렬을 RelativePanel 안에 있는 다른 컨트롤 중 무엇을 기준으로 정렬할 것인지를 지정 AlignCenterWithPanel (정중앙)이 가장 우선하므로 다른 정렬은 무시된다. Left (왼쪽 정렬)이 Right(오른쪽), Top(위), Bottom(아래) 보다 우선한다. 나란히 정렬 (LeftOf, RightOf, Above, Below) : 그 컨트롤의 상하좌우의 정렬 기준이 될 다른 컨트롤을 각각 지정 위 2,3번 단계에서 자식 컨트롤들이 배치되는 순서는 자식 배열의 순번(index)를 따른다. 더 우선하고 싶은 컨트롤이 있다면 그 컨트롤의 순번(index) 지정을 더 높게한다. 특별히 고려할 점 보이지 않는 곳으로 정렬 (컨트롤이 사라짐) 자식 컨트롤이 RelativePanel 바깥으로 밀려나게 정렬하지 않도록 확인하는 기능이 없다. RelativePanel 바깥으로 벗어난 부분은 보이지 않는다. 의도적으로 이렇게 구현되었으며, 상황에 따라 유용하기도 하다. 의존 순환(Circular Dependency) RelativePanel 안에 있는 자식 요소들 간에는 방향 그래프 (directed graph)가 형성된다. 의존 순환은 방향 그래프에 순환이 있으면 발생한다. 즉 두 요소가 (중간 매개 요소 등) 서로 의존하는 것이다. 의존 순환이 되도록 설정하면, TRelativePanel 컴포넌트는 의존 순환을 탐지하고 예외(exception)을 던진다. 만약 의존 순환이 개발 환경 에서(design-time)에 발생하면 폼 디자이너가 에러 메시지를 표시한다. EnableAlign 또는 Realign 멤버를 호출하는 코드도 이 예외를 시작시킬 수 있다. 상충 관계(Conflicting Relationships) 만약 컨트롤의 동일한 가장자리를 지정하는 정렬을 여러개 설정하면 충볼이 발생할 수 있다. 어느 정렬 규칙이 다른 규칙보다 우선하는 지는 지정한 정렬 규칙이 반영되는 우선 순위를 참고. 양쪽 가장자리 정렬(Opposite Edge Alignments) 과 자동-크기(Auto-sizing) 만약 컨트롤의 양쪽 가장자리 (왼쪽과 오른쪽 또는 위와 아래)를 동일한 목표 (RelativePanel이거나 또는 그 안에 있는 형제 컨트롤)에 맞추어 놓으면, 너비 또는 높이가 목표 컨트롤에 맞추어진다. 예를 들어, 버튼 컨트롤의 AlignLeftWithPanel과 AlignRightWithPanel을 모두 True로 지정하면 이 버튼의 너비는 RelativePanel의 너비에 맞춰지게 된다. 이와 같은 동작으로 인해 예상하지 못한 상황이 발생될 수 있다. 예를 들어, 에디트 컨트롤에서 AlignLeftWithPanel과 AlignRightWithPanel을 True로 설정하고 이 에디트 컨트롤을 어느 버튼의 LeftOf로 지정하면, 이 에디트 컨트롤은 자신의 너비가 RelativePanel의 너비에 맞추지만 버튼의 왼쪽이라는 배치 규칙 때문에 RelativePanel의 "바깥으로 벗어나게" 된다. 관련 도움말 (See Also) Vcl.WinXCtrls.TRelativePanelControlItem 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.