죄송합니다.
제가 머리가 나빠서 그런지..
몇번을 읽어봐도 정확히 님께서 무엇을 원하는지 잘 모르겠습니다.
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이 조금만 움직여도 맞추기가 쉽지 않습니다.