C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[154] [팁] TForm Component의 개요와 사용방법
박지훈.임프 [cbuilder] 9795 읽음    2001-08-01 13:23
이 팁은 담비님(천리안 FREKBS)님이 1999년 04월 13일에 천리안 프로그래머포럼에 올리신 것입니다.
담비님으로부터는 전제하여 올리는 데 대해 허락을 받았습니다.
좋은 정보를 공유하도록 허락해주신 담비님께 감사드립니다.
───────────────────────────────────────

안녕하세요! 담비입니다.

출처 : http://www.inprise.co.jp/qanda/cbuilder/c0003052.html

Form 컴포넌트는 C++ Builder 어플리케이션의 중심적인 존재이다.
어플리케이션은 폼 컴포넌트에 다른 컴포넌트를 배치해 설계한다. 폼은 윈도우,
다이얼로그 박스, 또는 단순히 데이타의 입력 폼등의 폼으로 해서 사용할 수 있다.
유저 어플리케이션에서 현재 활성화되지 않은 폼을 표시하기 위해서는 Show 또는
ShowModal 메소드를 호출한다.

// 다음의 코드는 현재의 폼을 숨기고 다른 폼을 표시한다.
 void __fastcall TForm1::Button1Click( TObject *Sender )
 {
   Hide();                           //Form1을 숨긴다.
   if( Form2->ShowModal() == mrYes ) //Form2를 표시한다.
   {
     //Yes로 닫았을 때의 처리를 기술
               .
               .
               .
   }

폼을 닫는것은, Close 또는 CloseQuery를 호출하기 때문에 ShowModal 메소드로
ModalResult 프로퍼티를 사용한다.
 //---------------------------------------------------------------------------
 //ShowModal로 표시된 폼을 만든다.
 void __fastcall TForm2::CloseButtonClick( TObject *Sender )
 {
   ModalResult = mrYes;
 }
 //Form2의  OnCloseQuery 이벤트이다.
 //다음의 처리를 사용하여
 //폼을 닫을 때 확인을 재촉할 수 있다.
 void __fastcall TForm1::FormCloseQuery( TObject *Sender, bool &CanClose )
 {
   TMsgDlgButtons  mdbtn;
   char *str = "폼을 닫을까요?";
   int ButtonSelected;
   mdbtn << mbNo << mbYes;
   ButtonSelected  = MessageDlg(str, mtInformation, mdbtn, 0);
   if( ButtonSelected == mrYes )
      CanClose = true;
   else
      CanClose = false;
 }

폼의 수평, 수직 스크롤바의 동작을 정하려면, 폼의 프로퍼티인 HorzScrollBar와
VertScrollBar 오브젝트의 포로퍼티를 설정한다.
 void __fastcall TForm1::FormCreate( TObject *Sender )
 {
  ClientWidth = 300;

  // 스크롤바 양단의 작은 화살표를 클릭했을 때 표시가 얼마만큼 이동할지를 지정
  HorzScrollBar->Increment = 4;

  // 스크롤바에서의 스크롤박스의 위치
  HorzScrollBar->Position = 0;

  // Range는 폼의 클라이언트 폭보다 커야만 한다.
  HorzScrollBar->Range = ClientWidth + 100;

  // 표시의 유무
  HorzScrollBar->Visible = True;
 }

폼이 초초에 어떻게 표시되는가(최대표시, 아이콘 표시, 통상 표시)를 지정하려면
WindowState 프로퍼티를 사용한다.
 void __fastcall TForm1::Button1Click( TObject *Sender )
 {
  WindowState = wsMinimized;
 }

폼의 외관을 커스터마이즈하고, 유저가 폼과 어떻게 대화할지를 결정하려면
BorderStyle과 BorderIcons 프로퍼티를 설정한다.
폼을 최소화했을 때에 표시하는 아이콘을 설정하려면 Icon 프로퍼티를 사용한다.
 void __fastcall TForm1::Button1Click( TObject *Sender )
 {
  //최소화 버튼과 최대화 버튼을 삭제한다.
  BorderIcons = ( TBorderIcons() = BorderIcons ) >> biMinimize >> biMaximize;
 }

폼상의 어느 콘트롤이 활성화 되어있는지를 조사하려면 ActiveControl 프로퍼티를
사용한다.
 void __fastcall TForm1::Button1Click( TObject *Sender )
 {
  //Button1이 우측으로 이동
  ActiveControl->Left = ActiveControl->Left + 1;
 }

폼상의 특정 콘트롤이 반드시 표시되도록 하려면 ScrollInView 메소드를 사용한다.
 void __fastcall TForm1::Button1Click( TObject *Sender )
 {
   ScrollInView( Button2 );
 }
 //---------------------------------------------------------------------------
 void __fastcall TForm1::Button2Click( TObject *Sender )
 {
    ScrollInView( Button1 );
 }

폼에는 Multi Document Interface(MDI) 어플리케이션의 작성을 간단하게 하는
프로퍼티나 메소드가 많이 있다. 어느 폼이 유저 어플리케이션의 Parent Form이고
어떤것이 Child Form인지는 FormStyle 프로퍼티로 지정한다. 1개의 폼을 parent로
하고, 나머지를 Child로 지정하면, Child 폼은 MDIChildred 프로퍼티로 엑세스 할수
있다. 유저 어플리케이션에서 열려있는 Child 폼의 수는, MDIChildCount 프로퍼티의
값이다. 어느 폼이 엑티브한 child 폼인지를 판정하려면 ActiveMDIChild 프로퍼티를
사용한다.
 void __fastcall TForm1::Button1Click( TObject *Sender )
 {
  TForm *BlueForm = new TForm(this);
  //BlueForm을 작성하고 포커스를 가지는 MDI 폼의 색을
  //Blue로 변경한다.
  BlueForm->FormStyle = fsMDIChild;
  Form1->ActiveMDIChild->Color = clBlue;
  }

대부분의 MDI 어플리케이션에는 메뉴의 마지막에 열리는 child폼과 윈도우를 일람
표시하는 윈도우 메뉴가 있다. 유저 어플리케이션의 메인 메뉴에서 윈도우 메뉴로
사용할 항목을 WindowMenu 프로퍼티로 지정하면 실행시에 열려있는 Child 폼이
지정한 메뉴의 마지막에 자동적으로 나타나게 된다.
통상, 윈도우 메뉴에는 실행중인 어플리케이션에서 인도우나 폼을 취급하는 커맨드가
있다. 메뉴 커맨드를 사용하기 위해 이 기능을 간단하게 실현하는 Cascade, Title,
Previous, Next, ArrangeIcons의 각 메소드를 OnClick 이벤트 핸들러에서 호출한다.
 void __fastcall TForm1::FormCreate( TObject *Sender )
 {
  //Form의 프로퍼티의  WindowMenu에 메뉴를 지정하면
  //지정된 메뉴의 밑에 액티브한  MDI 폼명이 표시된다.
  WindowMenu = Window1;
 }

폼이 어플리케이션 실행의 다양한 시점에서 다른 메뉴를 표시하도록 하려면,
사용하고 싶은 메뉴를 Menu 프로퍼티에 지정한다. 주요한 이벤트를 폼상의 선택된
콘트롤에 건네주는 것이 아니라 유저 어플리케이션에서 처리하려면 폼의 KeyPreview
프로퍼티를 true로 설정한다.
 //A 또는  a 키가 눌려지면 폼의 색이 바뀐다.
 //키를 돌리면 원래의 색이 된다.
 class TForm1 : public TForm
 {
   __published:
     TButton *Button1;

   void __fastcall FormKeyDown( TObject *Sender, WORD &Key, TShiftState Shift );
   void __fastcall FormKeyUp( TObject *Sender, WORD &Key, TShiftState Shift );
   void __fastcall FormCreate( TObject *Sender );
   private:
     TColor  FormColor;
   public:
     __fastcall TForm1( TComponent* Owner );
 };
 //---------------------------------------------------------------------------
 void __fastcall TForm1::FormCreate( TObject *Sender )
 {
   KeyPreview = true;
 }
 //---------------------------------------------------------------------------
 void __fastcall TForm1::FormKeyDown( TObject *Sender, WORD &Key,
                                      TShiftState Shift)
 {
   if( Key == 0x41 )
   {
     FormColor = Color;
     Color = clAqua;
   }
 }
 //---------------------------------------------------------------------------
 void __fastcall TForm1::FormKeyUp( TObject *Sender, WORD &Key,
                       TShiftState Shift )
 {
   if( Key == 0x41 )
     Color = FormColor;
 }

프로퍼티의 초기값을 설정하고, 유저가 폼과 대화를 시작하기 전의 처리를
실행하려면, 폼의 OnCreate 이벤트 핸들러를 사용한다.
이상의 프로퍼티, 메소드, 이벤트 외에도 TForm 컴포넌트에서는 모든 윈도우
콘트롤에 적용되는 프로퍼티, 메소드, 이벤트를 사용할 수 있다.

+ -

관련 글 리스트
154 [팁] TForm Component의 개요와 사용방법 박지훈.임프 9795 2001/08/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.