나그네 님이 쓰신 글 :
: TStackPanel 을 사용하여 컴포넌트를 정렬하여 사용하려고 합니다.
:
: StackPanel 안에 상황에 따라 일반 Panel 을 1개, 2개 , 최대 3개 배치를 하려고 합니다.
:
: 원하는 것은 1개가 배치 될 경우 StackPanel 의 정중앙에 배치 되고, 2개가 배치 될 경우 정 중앙을 중심으로
:
: 2개가 , 3개 일경우 StackPanel이 3등분 된 형태로 배치가 되어야 합니다.
:
: 문의 사항은 TStackPanel 안에 배치된 일반 판넬의 프로퍼티가 새로 생기면서 조정할 수 있는 부분이 있는데
:
: HorizontalPositioning 의 경우는 정상적으로 작동을 해서 sphpCenter를 선택하면 가로 방향으로 정 중앙으로 배치가 됩니다.
:
: 그런데 VerticalPositioning의 경우에는 아무 값으로 바꾸어도 판넬의 위치가 변하지 않습니다.
:
: 제 생각으로는 이 값을 sphpCenter 로 하면 세로 방향으로 중앙에 배치 되리라 예상했는데 어떠한 값도 적용되지 않고
:
: 항상 동일한 위치에서 변하지 않습니다.
:
: 혹시 다른 설정을 변경해야 하는 것이 있는지 좀 알려 주세요.
:
: 이 설정은 빌더 리오, 시드니 둘다 테스트 해 보았는데 동일합니다.
답변:
지극히 상식적으로 생각하면...
TStackPanel 에서 HorizontalPositioning 과 VerticalPositioning 두개의 프로퍼티를 갖고 있으므로
Orientation을 spcVertical로 했을 경우, VerticalPositioning 을 바꾸면 Center나 Fill 등의 값이
반영 되어야 하는 게 맞죠.
C# 으로 WPF 프로그래밍을 해본 경험이 있다면 StackPanel 은 낯익은 콘트롤 일 겁니다.
오래전 부터 Visual Studio WPF에서는 StackPanel 콘트롤을 지원하고 있었는데...
델파이는 이 콘트롤이 없으니 델파이 컴포넌트로 지원하자 해서 만들어진 게 TStackPanel 컴포넌트이고,
이 컴포넌트는 WPF StackPanel 콘트롤을 베껴서 '마르코 칸투'가 만든거로 알고 있습니다.
상식적으로 생각하면 질문의 의도와 같이 동작해야 하겠지만
TStackPanel 컴포넌트는 Orientation이 spoHorizontal 일 때는 VerticalPositioning 만 동작하고
HorizontalPositiong은 mulfunction(동작하지 않는) 상태가 되고.
반대로 Orientation 이 spoVertical 일 때는 HorizontalPositioning 만 동작하고
VerticalPositioning 은 mulfunction(동작하지 않는) 이 되는 식으로 구현 되어 있어요.
사용자 들을 배려헤서 컴포넌트를 직관적으로 사용할 수 있게 만들려면
1.
StackPanel을 THorizStackPanel과 TVertStackPanel로 나누어서 개별적으로 구현을 하든가.
2.
아니면 TStackPanel 하나로 구현하되...
HorizontalPositiong과 VerticalPositioning으로 Positioning을 구분하지 말고
하나의 Positioning으로 Orientation과 상관 없이 Left, Center, Fill 등 모든 상태가 반영될 수 있도록 컴포넌트를 만들어 놨어야죠.
다른 설정을 추가로 변경해야 하는 부분이 따로 있는 게 아니고...
컴포넌트를 어설프게 대충 베껴서 구현해 놓았기 때문에 그런 겁니다.
의도했던 동작이 필요하면... 컴포넌트를 따로 새로 만들어 쓰세요.
TCustomStackPanel 클래스에 대부분의 코드가 구현되어 있으므로
C++로 TCustomStackPanel 상속해서 컴포넌트 만들면 15 분도 안걸릴 겁니다.
|