C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[16341] Re:Re:폼이 많은 프로그램에서(다시 질문합니다.)
^^ [] 1076 읽음    2002-03-14 14:24
폼을 "동적"으로 생성하기 때문에 전역변수인 Form2, Form3에는 항상 동일한 값이 들어가 있다고 보장못합니다. 그리고 Close ()해 준다고 해서 메모리상에서 완전히 제거되는 것두 아니고요. 그리고, Close ()함수를 사용하였다고 해서 전역변수의 값이 0(NULL)이 되는 것도 아닙니다. 아래와 같이 하시면 해당 클래스를 계속적으로 메모리에 생성합니다. 또한 버튼을 두번째 누를 때, 앞에서 생성하여 만들어 둔 폼을 포인터하고 있던 전역변수에 새로운 폼을 포인터하게 되기 때문에 그전에 가르키던 폼을 가르킬 수 없게 됩니다. -__________-;;

앞에서 제가 만들어 드렸던 함수는 현재 메모리상에 내가 만든 클래스가 있는지 여부를 확인하는 함수입니다. 이 함수를 사용하기 힘드시면, 아래의 내용에 따라 처리하세요.

동적으로 폼을 생성하는 방법
1. project 메뉴 > options 메뉴항목 > forms 태그에서 auto-create forms에 등록되어 있는 폼을 ">" 버튼을 눌러 avaliable forms로 옮긴다.
3. 필요한 곳에서
Form1 = new TForm1(Application);

동적으로 생성한 폼 제거하는 방법
delete Form1;
Form1 = 0; // 혹은 NULL

같은 클래스의 폼이 하나만 생성된다면 이렇게 하면 되지만 하나이상 생성해야 한다면 Screen->Forms []를 이용하여야만 제대로 처리할 수 있습니다.








김소영 님이 쓰신 글 :
: 인학님의 답변에서 힌트를 얻어 코딩을 해봤는데 아직 완전하지 않네요.
: 잘 동작하다가 프로그램이 다운됩니다.
: 메인폼 외에 15개의 폼이 있거든요.
: 아래 코딩의 문제점 좀 알려주세요.
: 글구 Close()함수를 사용하는 것과 FormClose 이벤트에 Action=caFree를 사용하는 것은 같은
: 기능을 하나요?
:
:
: [Main.h]에
: __published:    // IDE-managed Components
:         TToolBar *ToolBar1;
:         TToolButton *ToolButton1;
:         TToolButton *ToolButton2;
:         TToolButton *ToolButton3;
:           .
:           .
:           .         
:         TToolButton *ToolButton15;
:
:         void __fastcall ToolButton1Click(TObject *Sender);
:         void __fastcall ToolButton2Click(TObject *Sender);
:            .
:            .
:            .
:         void __fastcall ToolButton15Click(TObject *Sender);
: private:    // User declarations
: public:        // User declarations
:         __fastcall TForm1(TComponent* Owner);
:         void Close_all(void);
:
: [Main.cpp]를 보면,
:
: //---------------------------------------------------------------------------
:  void __fastcall TForm1::ToolButton1Click(TObject *Sender)
: {
:    Close_all();
:
:       Application->CreateForm(__classid(TForm2), &Form2);
:       Form2->Show();
:
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::ToolButton1Click(TObject *Sender)
: {
:    Close_all();
:
:       Application->CreateForm(__classid(TForm3), &Form3);
:       Form3->Show();
:
: }
: //---------------------------------------------------------------------------
:
: 각 버튼클릭 이벤트의 내용은 동일합니다.
: void TForm1::Close_all(void)
: {
:  if(Form2!=NULL) Form2->Close();
:  if(Form3!=NULL) Form3->Close();
:  if(Form4!=NULL) Form4->Close();
:       .
:       .
:       .
:  if(Form16!=NULL) Form16->Close();
: }
:
:
:

+ -

관련 글 리스트
16264 폼이 많은 프로그램에서 김소영 876 2002/03/13
16305     Re:폼이 많은 프로그램에서(다시 질문합니다.) 김소영 852 2002/03/13
16341         Re:Re:폼이 많은 프로그램에서(다시 질문합니다.) ^^ 1076 2002/03/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.