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
[59248] Re:폼위의 컨트롤 정보??
장성호 [nasilso] 2193 읽음    2009-11-26 18:57
음...
Owner 와 Parent
님께서는 Owner와 Parent에 대한 개념을 알고계시면 쉽게 가능합니다.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tutorial&no=38

[Design-Time에 올린 Control]
먼저 Design-time에 폼위에 올려진 모든 Control or Component들은 모두
Owner가 Form이 됩니다.

즉 Form의 Components[] 배열에 다들어있죠
다음 링크에 있는 방식을 참조하여 원하는 기능을 만드실수 있습니다.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=818

동적생성

  1) 동적생성할때 Owner가 Form인경우
      TEdit *edt=new TEdit(this); // 이렇게 Control을 동적생성할때 생성자인자인  Owner를  form으로 줄경우 
      TEdit *edt=new TEdit(Form1); //
      
      edit->Parent = Panel1;
 

        
   동적생성하더라도 위와같이 Owner가 Form인경우는
   위에 Design-time에 Form위에 올려진 Control을 찾을때와 똑같은 방식으로 찾으면 됩니다.

  2) 동적생성할때 Owner가 Form인 아닌 경우
      TEdit *edt=new TEdit(NULL); // 이렇게 Control을 동적생성할때 생성자인자인  Owner를  form이 아닌경우 
      TEdit *edt=new TEdit(Panel1); //
      
      edit->Parent = Panel1;
 


   이런 경우는 음... Control을 찾으면 Control의 Child-Control이 있는지 확인해 보구 roof를 돌려가면서 찾아야 합니다.

//아래와 같이 재귀루프를 돌면서 찾아야 정확합니다.
void __fastcall SetEditText(TWinControl *ParentCtrl , String str)
{
    if(ParentCtrl==NULL)return;
    if(ParentCtrl->InheritsFrom(__classid(TEdit)))
    {
        ((TEdit *)ParentCtrl)->Text=str;
    }

    for(int i=0;iControlCount ;i++)
    {
        if(ParentCtrl->Controls[i]->InheritsFrom(__classid(TEdit)))
        {
            ((TEdit *)ParentCtrl->Controls[i])->Text=str;
        }
        else if(ParentCtrl->Controls[i]->InheritsFrom(__classid(TWinControl)))
        {
            SetEditText((TWinControl *)ParentCtrl->Controls[i],str);
        }
    }
}
//---------------------------------------------------------------------------
//다음과 같이 사용하면 됩니다.
void __fastcall TForm1::Button11Click(TObject *Sender)
{
    SetEditText(this,"잘되나?");
    //이렇게 하면 현재 폼위에 올려진 모든 TEdit 의 Text를 바꿔줍니다.
}
//---------------------------------------------------------------------------

        
그럼..


두박자 님이 쓰신 글 :
: 흠... 매일 질문만 하네요 ^^;
:
: 폼위에 올려진 모든 컨트롤의(동적생성 포함) 정보를 가져오고 싶습니다.
:
: 가져온 컨트롤를 제어하려고 합니다.
:
: 예로
:
: 만약 폼에 에디트 박스가 3개가 있다면....
:
: 루프를 돌려서 각 콘트롤의 text 값을 변경하는겁니다.
:
: 가능한가요?..

+ -

관련 글 리스트
59246 폼위의 컨트롤 정보?? 두박자 2183 2009/11/26
59248     Re:폼위의 컨트롤 정보?? 장성호 2193 2009/11/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.