DelayedFormCreation ( 폼의 지연 생성 )
델마당에 김도완님이 올리신 codegearguru 동영상 강좌 링크에서 DelayedFormCreation 을
C++Builder로 변환해 보았습니다.
원문
#004 :
http://codegearguru.com/video/004/DelayedFormCreation.html (지연된 폼 생성)
DelayedFormCreation ( 폼의 지연 생성 ) 이란?
프로젝트 옵션에서 Main폼이외에 다른 sub-form들을 Auto-Created-forms에 넣어두면
Application이 시작할때 자동생성되구 프로그램에서 동적 생성할 필요없이 사용할 수 있다.
하지만 이경우 해당 sub-form을 한번도 사용하지 않아도 해당폼이 생성하게 된다.
DelayedFormCreation은 Aplication이 시작할때 자동생성되지 않으면서
코딩에서는 마치 이미 생성(Auto-Created-forms)되어있는것처럼 사용하는것이다.
==============[예제]=========================================================
@Project 옵션 Auto-Created-forms
Form2를 Available Forms 에 넣는다.
@ unit1.cpp 에서
#include "Unit2.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form2->Show(); //Auto-Created-forms 에 Form2가 있는것 처럼 사용
}
//---------------------------------------------------------------------------
@ unit2.cpp 에서
TForm2 *PrivateForm2; //Form2를 PrivateForm2로 변경
//---------------------------------------------------------------------------
@ unit2.h 에서
extern PACKAGE TForm2 *PrivateForm2; // Form2를 PrivateForm2로 변경
TForm2 * __fastcall GetForm2()
{
if(PrivateForm2==NULL)
PrivateForm2=new TForm2(Application);
return PrivateForm2;
}
#define Form2 GetForm2() // Form2를 GetForm2로 Define
//---------------------------------------------------------------------------
...
위와같은 방식은 아니지만
개인적으로 DelayedFormCreation을 아래와 같이 사용해 오고있다.
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if(Form2==NULL)
Form2=new TForm2(Application);
Form2->Show();
}
이 방식은 간편하지만 Form2를 사용하는곳이 여러곳이 된다면 오히려 코딩량이 많아질 수 있다.
Delphi 로는 ...
//Unit2.pas 에서
function Form2:TForm2;
implementation
{$R *.dfm}
var
PrivateForm2: TForm2;
function Form2:TForm2;
begin
if not Assigned(PrivateForm2) then
PrivateForm2:=TForm2.Create(Application);
Result:=PrivateForm2;
end;
//Unit1.pas 에서
Uses Unit2;
procedure TForm1.Button3Click(Sender: TObject);
begin
Form2.Show();
end;
그럼..