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
[62985] Re:Re:Re:Re:Re:Re:[질문]ScrollBox 절대좌표에 대한 질문
unitas [kjlee1] 935 읽음    2010-11-10 12:49
그림 첨부 했습니다.

pic1은 화면 초기 그림입니다.
pic2는 장비1 ~ 장비3을 Expand 한 그림입니다. (그림이 짤렸습니다. - scroll을 아래로 이동하면 볼수 있습니다.)
pic3은 장비3을 Collapse하고 다음에 장비2를 Collapse했을때 그림입니다.

그림 보시면 아시겠지만 장비1과 장비2 panel이 붙어야 되는데 떨어져 있습니다.
장비2와 장비3 panel이 붙어있는것 처럼요.
(장비3을 Collapse하고 scroll을 위로 올린다음에 장비2를 Collapse 하면 제대로 붙습니다.
ScrollBox1->VertScrollBar->Position 를 이용해서 한것인데 scroll position에 따라 top 좌표가
바뀌어서 맞추기가 쉽지 않습니다.)

( pic4는 장비3을 Collapse 했을때 scroll position 위치 입니다. 이것을 위로 옮긴다음에
장비2를 Collapse 하면 장비1과 장비2의 panel 이 붙습니다.)

결론적으로  pic3 그림에서 에서 scroll position에 관계없이 장비1과 장비2의 panel이 붙어야 합니다.
그래서 절대좌표로 하면 scroll position에 관계없이 각 panel의 top 좌표를 잡기가 쉬어질것 같아서
질문 드렸습니다.



장성호 님이 쓰신 글 :
: 죄송합니다.
:
: 제가 머리가 나빠서 그런지..
: 몇번을 읽어봐도 정확히 님께서 무엇을 원하는지 잘 모르겠습니다.
:
:
: ScrollBox위에 Panel을 여러개 올리시려는것 같은데..
:
: Panel을 여러개 올려서
: 초기상태의 그림과  , ScrollBar를 움직였을때의 그림
: 그리고 Panel의 size를 조정했을때의  원하는 그림을 올려주시면 이해가 빠를것 같네요
:
: -----------------------------------------------------------------------
: 만약 Panel을 상하로 붙이고
: Panel의 Height등 size가 변한다면..
: 다음과 같이 Panel의 위치를 설정하면 될것 같은데요...
:
:
: void __fastcall TForm1::SetPanelHeight(int hei)
: {
:     if(hei<1)return;
:     TPanel *pan[4]={Panel1,Panel2,Panel3,Panel4};
:     pan[0]->Height=hei;
:     for(int i=1;i<4;i++)
:     {
:         pan[i]->Height=hei;
:         pan[i]->Top=pan[i-1]->Top+hei;
:     }
: }
: //---------------------------------------------------------------------------
: 
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:     SetPanelHeight(Panel1->Height+10);
: }
: //---------------------------------------------------------------------------
: 
: void __fastcall TForm1::Button2Click(TObject *Sender)
: {
:      SetPanelHeight(Panel1->Height-10);
: }
: 

:
: 절대좌표가 뭘 얘기하는것인지 모르겠지만..
: 맨 윗쪽에 Panel을 기준으로  나머지 위치를 조정하면 될것 같네요
:
: 그럼..
:
:
: unitas 님이 쓰신 글 :
: : Panel이 10개 이상(상하로 붙여서 panel #1 --- panel #n) 붙입니다.
: : 또 실행중 panel의 size(height)가 바뀝니다.  바뀔때마다 다른 panel도 Top의 좌표가 바뀌기 때문데
: : 어떠한 규칙으로 조절을 할려고 합니다. (Panel들이 상하로 붙어 있는것처럼 표시합니다.)
: : ( panel #1 바로밑이 panel #2의 Top이 되고 마찬가지로 panel #9 바로밑에 panel #10의 Top이 됩니다.
: :   그러면 panel들이 붙어 있는거처럼 보이죠. panel들이 size가 바뀔때마다 panel들의 top를 계산해서
: :   panel들을 재배치 합니다.  그러기 때문에 top의 절대 좌표가 필요합니다.)
: :
: : Panel의 좌표값을 고정한다는 말씀은 panel #1의 top이 20 이면 아무리 scroll이 움직여도 -176등 top의
: : 좌표가 바뀌지 않게 한다는 말씀입니다.
: :
: : 예를 들어서 panel #1의 Top이 50 면 scroll을 아래로 움지이면 panel #1 이 위로 움지이지 않습니까?
: : 그럼 ScrollBox의 현재 보이는 부분위가 0 으로 되어서 panel #1의 Top이 -(마이너스)값으로 변하는데
: : panel #1이 위로 이동하면서 안보일수도 있어도 panel #1 의 Top은 50 를 가지게 하는것입니다.
: :
: : 저도 ScrollBox1->VertScrollBar->Position 이용해서 할려고 했는데 역시 Scroll이 움직일때마다
: : Top의 좌표들이 틀어져서 맞추기가 어렵습니다.
: :
: : ScrollBar는 단순히 위아래 움직이면 panel를 보이게만 할뿐 panel의 좌표에 대해서 관여를 하지 않게
: : 하고 싶습니다.
: :
: : 제대로 질문의 설명을 했는지 모르겠습니다.
: : 제가 원하는 내용들 해결 방법이 힘든가요?
: :
: :
: :
: : 장성호 님이 쓰신 글 :
: : : 제가 질문을 잘못 이해 한것 같습니다.
: : :
: : : 그런데..
: : :
: : : ScrollBar를 움직였을때 Panel을 같이 움직이면서..
: : : Panel의 좌표값을 고정한다는게 말에 모순이 있지 않나요?
: : :
: : : 단지 ScrollBox의 ScrollBar를 움직이지 않았을때의 위치값을 알고자 한다면..
: : :
: : :
: : : int iPanelTop=Panel1->Top+ScrollBox1->VertScrollBar->Position;
: : : int iPanelLeft=Panel1->Left+ScrollBox1->HorzScrollBar->Position;
: : : 

: : :
: : : 하지만 저 값을 가지고 Panel1의 위치를 이동시키면 안되겠죠...
: : :
: : : 그럼..
: : :
: : :
: : : unitas 님이 쓰신 글 :
: : : : 장성호님 감사합니다.
: : : : 그런데 제가 정확하게 이해를 못한거 같은데요.
: : : : 다시 설명해 주시면 안될까요?
: : : :
: : : : ScrollBox1->Parent  = Panel4;
: : : : Panel2->Parent        = Panel4;
: : : : 위에처럼 Parent를 같게 명시했습니다.
: : : :
: : : : 이렇게 하니까 첨부한 그림처럼 Panel이 ScrollBox에 영향을 받지 않습니다.
: : : : 제가 원한것은 ScrollBox에서 Scroll를 움직이면 Panel도 같이 움직이면서 고유한 Panel의 좌표(Top)를
: : : : 갖고 있게 하는것입니다.
: : : :
: : : : ScrollBox을 맨 뒷쪽으로 보내라고 하셨는데 Panel을 ScrollBox위에 놓으면 되는건가요?
: : : : 그렇게도 해봤는데 그래도 실행하면 그림처럼 scrollbox안에 있는것처럼 보이지 않고
: : : : 단순히 ScrollBox위에 있는것처럼 됩니다.
: : : :
: : : : 다시 부탁드립니다.
: : : :
: : : :
: : : :
: : : : 장성호 님이 쓰신 글 :
: : : : : Panel을 ScrollBox 안에 두지마시고
: : : : :
: : : : : Panel을 ScrollBox와 같은 Level에
: : : : : 즉 ScrollBox->Parent와 Panel->Parent를 같도록 해 두시구요
: : : : :
: : : : : ScrollBox을 맨 뒷쪽으로 보내세요
: : : : :
: : : : : 그러면 ScrollBox의 scrollbar를  움직여도 Panel의 좌표를 변화하지 않습니다.
: : : : :
: : : : : ...
: : : : :
: : : : : ScrollBox는 원래 그런 용도로 만들어진것이므로..
: : : : : scrollbar를 움직여도 원래 위치 그대로 두려면..
: : : : :
: : : : : scrollbox안에 있는것처럼 보이지만 실제로는 scrollbox안에 있지 않도록 하면 되지 않겠어요?
: : : : :
: : : : :
: : : : : ...
: : : : :
: : : : : unitas 님이 쓰신 글 :
: : : : : : ScrollBox에 여러 컴포넌트를 넣어서 범위를 벗어나면 scroll이 생기는데 scroll을 움직이면 기존의 컴포넌트의
: : : : : : 좌표 (상하 이동시 Top좌표)가 변하지 않습니까.
: : : : : : ScrollBox에서 scroll의 이동시 ScrollBox1->VertScrollBar->Position에 관계없이 절대 좌표를 갖을수 있나요?
: : : : : : properties에는 그러한 옵션이 없는것 같고요.
: : : : : : 제 질문이 잘 전달이 되었는지 모르겠네요.  샘플로 그림 첨부했습니다.
: : : : : : [첨부한 그림에서 scroll이 아래 또는 어느 위치에 있더라도 절대좌표 (top = 20)를 보존할수 있나요? ]
: : : : : :
: : : : : : ScrollBox1->VertScrollBar->Position를 이용해서 할려고 했는데 실제로 여러 Panel들을 일일이 좌표설정을
: : : : : : 할려니 힘드네요. scroll의 position이 조금만 움직여도 맞추기가 쉽지 않습니다.

+ -

관련 글 리스트
62972 [질문]ScrollBox 절대좌표에 대한 질문 unitas 1268 2010/11/09
62975     Re:[질문]ScrollBox 절대좌표에 대한 질문 장성호 1316 2010/11/10
62978         Re:Re:[질문]ScrollBox 절대좌표에 대한 질문 unitas 915 2010/11/10
62979             Re:Re:Re:[질문]ScrollBox 절대좌표에 대한 질문 장성호 1091 2010/11/10
62982                 Re:Re:Re:Re:[질문]ScrollBox 절대좌표에 대한 질문 unitas 1093 2010/11/10
62984                     Re:Re:Re:Re:Re:[질문]ScrollBox 절대좌표에 대한 질문 장성호 947 2010/11/10
62985                         Re:Re:Re:Re:Re:Re:[질문]ScrollBox 절대좌표에 대한 질문 unitas 935 2010/11/10
62986                             Re:Re:Re:Re:Re:Re:Re:[질문]ScrollBox 절대좌표에 대한 질문 장성호 1026 2010/11/10
62987                                 Re:Re:Re:Re:Re:Re:Re:Re:감사합니다. 해결되었습니다. unitas 1164 2010/11/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.