퍼온 델파이/C++Builder 강좌
다른 커뮤니티 사이트 등에서 퍼온 델파이 및 C++Builder에 대한 강좌나 팁을 올리는 공간입니다.
글 수 355
| 출처 | 델마당 강좌란, 볼랜드포럼 질문답변란 |
|---|---|
| 글쓴이 | 양병규, 장성호 |
<양병규>
아래 게시물의 예제를 만들던중 사용된건데 별도로 따로 설명합니다.
폼은 보통 TForm을 상속하게 됩니다.
보통은 폼디자이너를 이용해서 만들게되는데....
그렇지 않고 콤포넌트 만들듯이 그냥 새 유닛에서 TForm을 상속해서 새로운 폼 클래스를 작성하면...
컴파일은 잘되나 실행해보면 dfm 리소스가 없다고 에러가 납니다.
폼디자이너를 사용하지 않고 TForm을 상속해서 코딩으로만 폼을 만들고자 할때는 다음과 같이 하면됩니다.
생성자를 override해서 다음과 같이 작성합니다.
type
TForm1 = class(TForm)
private
publiuc
constructor Create(AOwner: TComponent); override;
end;
constructor TForm1.Create(AOwner: TComponent);
begin
CreateNew( AOwner );
end;
중요한건 생성자에서 inherited를 하지 않고 CreateNew를 호출한다는겁니다. 물론 생성자에서 CreateNew 다음 라인부터는 원하는 일을하면 됩니다.
이렇게 하면 실행시에 dfm 리소스를 로딩하지 않습니다.
그러므로 dfm 없이 그냥 코딩으로만 폼을 디자인할 수 있습니다. 폼에 얹을 모든 콤포넌트의 생성, 소멸, 프로퍼티 세팅, 이벤트 세팅을 모두 일일이 코딩해야합니다.
물론 나머지는 모두 동일합니다.
이걸 꼭 사용해야만 하는 경우는 별로 없습니다. 간단한 폼인데 exe에 dfm리소스가 포함되는게 아깝다고 생각되는 경우에는 쓸수 있을겁니다.
^^
<장성호>
해결했습니다. 간단하네요...
생성자에서
TForm(Owner)로 상위 클래스생성자를 호출하는 부분에서
인자를 바꿔 다른 생성자를 불러주면 되네요
Delphi에서는 CreateNew로 표현되던데 ....
---------샘플-----------------------
class TForm3 : public TForm
{
public:
__fastcall TForm3(TComponent* Owner);
};
//------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner,1) //===> 이부분이 핵심
{
this->Caption="Form3";
}
//====================================
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TForm3 *frm3=new TForm3(this); //실제사용하는 부분
frm3->ShowModal();
}
//---------------------------------------------------------------------------
TForm(Owner) ==> TForm(Owner,1) 이렇게 호출하면 됩니다. 쩝쩝
그럼 즐플...
장성호 님이 쓰신 글 :
: 델파이로는 간단히 생성자 오버로딩으로 되던데.. (델마당에 팁이 있음)
:
: 똑같은 방법으로 잘 안되네요
:
: 어떻게 해야할지....
아래 게시물의 예제를 만들던중 사용된건데 별도로 따로 설명합니다.
폼은 보통 TForm을 상속하게 됩니다.
보통은 폼디자이너를 이용해서 만들게되는데....
그렇지 않고 콤포넌트 만들듯이 그냥 새 유닛에서 TForm을 상속해서 새로운 폼 클래스를 작성하면...
컴파일은 잘되나 실행해보면 dfm 리소스가 없다고 에러가 납니다.
폼디자이너를 사용하지 않고 TForm을 상속해서 코딩으로만 폼을 만들고자 할때는 다음과 같이 하면됩니다.
생성자를 override해서 다음과 같이 작성합니다.
type
TForm1 = class(TForm)
private
publiuc
constructor Create(AOwner: TComponent); override;
end;
constructor TForm1.Create(AOwner: TComponent);
begin
CreateNew( AOwner );
end;
중요한건 생성자에서 inherited를 하지 않고 CreateNew를 호출한다는겁니다. 물론 생성자에서 CreateNew 다음 라인부터는 원하는 일을하면 됩니다.
이렇게 하면 실행시에 dfm 리소스를 로딩하지 않습니다.
그러므로 dfm 없이 그냥 코딩으로만 폼을 디자인할 수 있습니다. 폼에 얹을 모든 콤포넌트의 생성, 소멸, 프로퍼티 세팅, 이벤트 세팅을 모두 일일이 코딩해야합니다.
물론 나머지는 모두 동일합니다.
이걸 꼭 사용해야만 하는 경우는 별로 없습니다. 간단한 폼인데 exe에 dfm리소스가 포함되는게 아깝다고 생각되는 경우에는 쓸수 있을겁니다.
^^
<장성호>
해결했습니다. 간단하네요...
생성자에서
TForm(Owner)로 상위 클래스생성자를 호출하는 부분에서
인자를 바꿔 다른 생성자를 불러주면 되네요
Delphi에서는 CreateNew로 표현되던데 ....
---------샘플-----------------------
class TForm3 : public TForm
{
public:
__fastcall TForm3(TComponent* Owner);
};
//------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner,1) //===> 이부분이 핵심
{
this->Caption="Form3";
}
//====================================
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TForm3 *frm3=new TForm3(this); //실제사용하는 부분
frm3->ShowModal();
}
//---------------------------------------------------------------------------
TForm(Owner) ==> TForm(Owner,1) 이렇게 호출하면 됩니다. 쩝쩝
그럼 즐플...
장성호 님이 쓰신 글 :
: 델파이로는 간단히 생성자 오버로딩으로 되던데.. (델마당에 팁이 있음)
:
: 똑같은 방법으로 잘 안되네요
:
: 어떻게 해야할지....






