C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[75894] Re:TStackPanel 을 사용하여 컴포넌트를 정렬하여 사용하려고 합니다.
빌더(TWx) [builder] 1147 읽음    2020-07-04 13:14
나그네 님이 쓰신 글 :
: 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 분도 안걸릴 겁니다.


+ -

관련 글 리스트
75893 TStackPanel 을 사용하여 컴포넌트를 정렬하여 사용하려고 합니다. 나그네 1055 2020/07/03
75894     Re:TStackPanel 을 사용하여 컴포넌트를 정렬하여 사용하려고 합니다. 빌더(TWx) 1147 2020/07/04
75895         Re:Re:TStackPanel 을 사용하여 컴포넌트를 정렬하여 사용하려고 합니다. nagne 1048 2020/07/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.