답변 감사합니다.
어떻게 하다보니 해결이 된것 같은데요. Test는 더 해봐야 겠지만요.
char ch[10];
int nh = 0;
for(i = 0; i < 13; i++)
{
sprintf(); // FindComponent 이용하기 위해서
모든 Panel->Visible = false;
}
for(i = 12; i >= 0; i--)
{
sprintf(); // FindComponent 이용하기 위해서
if( check 된것이면 )
{
((TPanel*)FindComponent(ch))->Visible = true;
((TPanel*)FindComponent(ch))->Align = alTop;
nh = nh+((TPanel*)FindComponent(ch))->Height;
}
}
대략 이런식으로 해보니 (마지막 부터) Check 된것이 순서대로 표시가 되네요.
Test는 더해봐야 겠지만 몇가지 선택해보니 괜찮은것 같습니다.
사용자가 OK 버튼을 클릭하면 Check된것만 가지고 FindComponent를 이용해서 했습니다.
올려주신 소스는 지금 막 봐서 아직 해보지 않았습니다.
감사드립니다.
장성호 님이 쓰신 글 :
: 간단한 샘플 코딩입니다.
:
: Panel1 ~ 4 까지 4개 올렸구요
: CheckBox를 1~4까지 4개 올렸구요
:
: CheckBox를 Click할때 CheckBox의 Checked속성에 맞춰 Panel을 Visible을 변경해줬습니다.
:
:
:
:
: //-----------------------------------------------------------------------
: void __fastcall TForm1::SetPanelTop(TPanel *pan)
: {
: int iTop=0;
: if(pan==Panel1)pan->Top=0;
: else if(Panel1->Visible)iTop=Panel1->Height;
:
: if(pan==Panel2)pan->Top=iTop;
: else if(Panel2->Visible)iTop+=Panel2->Height;
:
: if(pan==Panel3)pan->Top=iTop;
: else if(Panel3->Visible)iTop+=Panel3->Height;
:
: if(pan==Panel4)pan->Top=iTop;
: else if(Panel4->Visible)iTop+=Panel4->Height;
:
: }
:
: //---------------------------------------------------------------------------
: void __fastcall TForm1::CheckBox1Click(TObject *Sender)
: {
: SetPanelTop(Panel1);
: Panel1->Visible=CheckBox1->Checked;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::CheckBox2Click(TObject *Sender)
: {
: SetPanelTop(Panel2);
: Panel2->Visible=CheckBox2->Checked;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::CheckBox3Click(TObject *Sender)
: {
: SetPanelTop(Panel3);
: Panel3->Visible=CheckBox3->Checked;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::CheckBox4Click(TObject *Sender)
: {
: SetPanelTop(Panel4);
: Panel4->Visible=CheckBox4->Checked;
: }
: //---------------------------------------------------------------------------
:
:
:
: 그럼..
:
: unitas 님이 쓰신 글 :
: : 답변 감사합니다.
: : 말씀하신 방법이 이것이 맞는지 모르겠는데요.
: : 우선 사용자가 클릭을 하면 화면의 모든 Panel의 Visible을 False로 합니다.
: : 이후 사용자가 선택한 Panel만 alTop으로 설정하고 Visible을 True로 합니다.
: : 반복하면 역시 순서가 꼬입니다.
: : (예를 들어 사용자가 1, 2, 3, 8, 13 Panel을 선택하면 13, 8, 3, 2, 1 이런식으로 순서가 배열되고
: : 다시 반복하면 13, 1, 8, 2, 3 이런식으로 어떠한 규칙도 없이 꼬입니다.)
: :
: :
: :
: : 장성호 님이 쓰신 글 :
: : : 원래 그렇게 되어있습니다.
: : :
: : : Align으로 alTop이 하나의 Base-Control 에 여러개가 있는 상황에서
: : : 특정 Control의 Visible을 변경하면
: : :
: : : Design-time에 놓였던 순서대로 항상 나타나진 않습니다.
: : :
: : : 어떤 control을 visible=true로 변경할때
: : : 현재 AlTop으로 되어있는 Control의 밑에 붙게 됩니다.
: : :
: : : 이경우 내가 원하는 순서대로 놓고 싶으면
: : : 현재 altop으로 visible=true되어있는 control이 있으면
: : : 그놈이 visible=true로 할 control의 위에 놓일 놈인지, 아래 놓일 놈인지 판단해 보구
: : : control의 top을 변경한후에 visible=true하시면 됩니다.
: : :
: : : 조금 다른 경우이지만
: : : 다름링크를 참조해보세요
: : :
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=55053
: : :
: : : 그럼..
: : :
: : :