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
[714] [DesignPattern] DelayedFormCreation ( 폼의 지연 생성 )
장성호 [nasilso] 7115 읽음    2007-10-02 10:48
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;







그럼..
박지훈.임프 [cbuilder]   2007-11-07 16:02 X
싱글턴 패턴이군요. ^^

+ -

관련 글 리스트
714 [DesignPattern] DelayedFormCreation ( 폼의 지연 생성 ) 장성호 7115 2007/10/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.