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
[56550] Re:Re:Re:Re:[질문]감사합니다.
unitas [kjlee1] 1032 읽음    2009-03-30 17:15
답변 감사합니다.
어떻게 하다보니 해결이 된것 같은데요. 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
: : :
: : : 그럼..
: : :
: : :

+ -

관련 글 리스트
56539 [질문]여러 Panel의 alTop과 Visible변경 unitas 1163 2009/03/30
56540     Re:[질문]여러 Panel의 alTop과 Visible변경 장성호 1262 2009/03/30
56542         Re:Re:[질문]여러 Panel의 alTop과 Visible변경 unitas 1211 2009/03/30
56548             Re:Re:Re:[질문]여러 Panel의 alTop과 Visible변경 장성호 998 2009/03/30
56550                 Re:Re:Re:Re:[질문]감사합니다. unitas 1032 2009/03/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.