Form은 IDE 툴에서 File / New / Form 에서 추가하면 자동으로 알아서 기본적인 골격을 다 만들어 줍니다.
그리고 파일 이름은 저장시에 결정해주면됩니다.
만약 파일 이름을 Unit1으로 할경우 기본적으로 아래 3개의 파일이 생성됩니다.
Unit1.cpp
Unit1.h
Unit1.dfm
cpp와 h는 아실거고 dfm 파일을 텍스트 편집기로 열어보면 Form에 대한 속성이나 Form 위에 올라가는
기타 컴포넌트들의 속성이 죽 나열되어있습니다.
dfm 파일에 나열된 내용들은 디자인 시점에 이미 결정된 값들이고 (위치나 색상 여러가지 속성들)
실핼될 때(컴파일,링크) VC에서 리소스를 불러와 화면을 구성하는 것 처럼 Builder도
dfm 파일의 내용을 불러와 Form을 완성하게됩니다.
실행 시점에서는 FormCreate() 나 FormShow() 이밴트 함수에서 이런 속성들을
다시 지정할 수 도있습니다.
이런 Form을 IDE툴에서 자동으로 추가하지 않고 타이핑으로 모두 작성하려면
기존에 이미 자동으로 생성된 Form의 위에 3개의 파일을 참고하시면서 만들면 되는데요.
아래 부분은 꼭 지켜줘야합니다.
파일 이름이 Unit1 일 경우 Unit1.h에 파일 이름에 H를 붙이도록 해야합니다.
#ifndef Unit1H // <---- 이부분
#define Unit1H // <---- 이부분
...
class TForm1 : public TForm
{
...
};
extern PACKAGE TForm1 *Form1;
#endif
class 이름이 TForm1 이고 인스턴스 이름이 Form1 인경우
Unit1.dfm 파일의 맨 위 첫줄은 아래와 같아야 합니다.
object Form1: TForm1
그리고 당연히 cpp 파일에는 TForm1으로 class 이름을 사용해야되고요..
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
...
}
...
다른 프로젝트에서 사용하던 Form 파일을 가져다가 파일 이름을 변경해서 사용해야할 경우
위에 것들을 모두 변경해주고 프로젝트에서 Add 해주면 됩니다.
그러나 그런 경우가 아니라면 그냥 자동으로 만들어주는 기능을 사용하세요.
프로젝트에 등록하면 프로젝트이름.cpp 파일에 아래와같이 자동으로 Form을 생성하는 코드가 추가됩니다.
#include
#pragma hdrstop
#include
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
USEFORM("Unit2.cpp", Form2);
//---------------------------------------------------------------------------
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
try
{
Application->Initialize();
Application->MainFormOnTaskBar = true;
Application->CreateForm(__classid(TForm1), &Form1); // Form 생성 1
Application->CreateForm(__classid(TForm2), &Form2); // Form 생성 2
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
Project 옵션에서 해당 Form을 자동생성하지 않도록 설정할 경우 위에 코드중에 주석으로 "Form 생성 " 이란 부분이 없어집니다.
그리고 코드 상에서 필요한 시점에 직접
Application->CreateForm(__classid(TForm2), &Form2); 이렇게 생성하거나
아니면 new로 생성하여 사용하면됩니다.
성시완 님이 쓰신 글 :
: VC 쓰다가 C 빌더 쓰려니 혼란스럽네요.
: 폼을 설계하는데 폼은 VC에서 리소스인데 빌더에서는 클래스로 취급하나요?
: 영 감이 오질 않네요. 소스 파일과 이름을 같게 하려니 이미 이름이 있다고 하고 그래서 소스 파일 이름을 억지로 바꿔야 하네요.
: 고수님들 답변 부탁드립니다.