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
[736] [Forms] 코딩만으로( *.dfm 없이) TForm을 상속받는 폼만들기...
장성호 [nasilso] 9008 읽음    2008-01-29 01:14
Delphi나 C++Builder에서  Form을  Wizard로 생성하면
*.dfm파일이  소스(*.pas 또는 *.cpp , *.h) 와 함께 생성됩니다.

이 dfm파일은 컴파일하면서 프로그램에 리소스로 함께 묶이게 되죠

VCL에서는 폼의 생성자에 이정보를 읽어와서 Form위에 올려진 Component들과 이벤트 등을 생성해주는것입니다.
그런데 *.dfm 파일이 없이 Form을 생성할수 있을까요?

TForm3를  *.dfm 파일없이 아래와 같이 코딩했습니다.
class TForm3: public TForm
{
public:
    __fastcall TForm3::TForm3(TComponent* Owner){};
};

그리고  아래처럼 생성하면 어떻게 될까요?
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    TForm3 *frm=new TForm3(this);
    frm->ShowModal();
    delete frm;
}

그러면 
*** EResNotFount  with message 'Resource TForm3 not found' ***
위와같은 에러 메세지가 뜨죠..
TForm3에 대한 리소스를 못찾겠다나 뭐라나....

그러면 Delphi나 C++Builder에서 TForm을 상속받은 폼을 코딩으로 생성할 방법은 없는것인가?
그것은 TForm의 두번째 생성자인
TForm(Classes::TComponent* AOwner, int Dummy) 형태의생성자를 이용하면 됩니다.
이 생성자에서는 리소스를 찾아서  동적으로 폼위의 컨트롤을 만들고 이벤트를 만들고 하는 부분이 생략되어있습니다.

그러므로 아래와 같은 형태로 class를 코딩하면 *.dfm 파일이 없이
폼을 만들수 있습니다.
class TForm3: public TForm
{
public:
    __fastcall TForm3::TForm3(TComponent* Owner);
    void __fastcall TForm3::FormCreate(TObject *Sender);
};

__fastcall TForm3::TForm3(TComponent* Owner)
    : TForm(Owner,1)                           //==> 핵심.. 생성자에서 TForm의 두번째 생성자를 호출하도록 합니다.
{
    this->OnCreate=FormCreate;
}
void __fastcall TForm3::FormCreate(TObject *Sender)
{
    ShowMessage("Form3의 OnCreate가 제대로 호출되는가?");
}


그럼...

+ -

관련 글 리스트
736 [Forms] 코딩만으로( *.dfm 없이) TForm을 상속받는 폼만들기... 장성호 9008 2008/01/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.