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
[48029] Re:[질문] 프로그램 실행중에 같은 폼을 여러개 생성하는 것에 대해서
dd [] 906 읽음    2007-02-08 17:14
linked form.zip 14.9KB 데모 프로젝트
연결 리스트(LinkedList) 라는 개념 아세요?
어떤 놈을 계속 하나씩 생성하면서 기존거에 연결해서 늘어놓는 방식인데
예를 들면 이렇게 하면 되네요..

일단 폼에 버튼 하나 떨챠놓고~

헤더는:
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
    void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private:    // User declarations
public:        // User declarations
    bool foo;
    TForm1 *Next;
    __fastcall TForm1(TComponent* Owner);
protected:
    void set_foo(bool b);
};

씨피피는:
TForm1 *FirstForm1=0;
TForm1 *LastForm1=0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    if (FirstForm1==0)       // 맨 처음 생성되는 놈이 FirstForm1
        FirstForm1 = this;
    LastForm1 = this;        // 맨 마지막 생성되는 놈이 LastForm1
    set_foo(true);           // (처음이자) 마지막 생성이므로 foo = true
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    // 새 폼을 생성함..

    for(TForm1 * f = FirstForm1; f; f = f->Next) // 기존 폼들 모두 foo = false
        f->set_foo(false);

    TForm1 * OldLast = LastForm1;
    TForm1 * f = new TForm1(Application);   // 새 폼을 생성해 마지막 폼의 Next로 연결.
    OldLast->Next = f;
    f->Show();
}
//---------------------------------------------------------------------------


void TForm1::set_foo(bool b)
{
    foo = b;
    Caption = foo ? "True" : "False";            // foo가 true인지 아닌지를 타이틀바에서 알 수 있도록.
}

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
    Action = caFree;                             // 폼이 닫히면 그놈은 delete되도록함.
}
//---------------------------------------------------------------------------


야누 님이 쓰신 글 :
: Form2라는 폼이 있는데
:
: 버튼을 누르면 하나씩 생성되게하고 싶습니다.
:
: 그리고 form에  변수 bool foo가 있는데 새로 생성된 form에만 foo가 ture이고
:
: 나머지 생성된 폼은 foo가 false가 되게 하고 싶습니다.
:
: 그러니까, 버튼을 누를 때마다 Form2가 하나씩 생성되고 새 폼에만 foo가 trrue이고
:
: 예전에 생성된 form에서는 foo가 false가 되게 하고 싶습니다.
:
: 어떤 식으로 해야하나요?
:
: TForm2* array와 foo array를 만들어 놓고 form을 새로 만들고 닫을 때마다 array에 작업을 하고 , foo array에 작업을 하면될까요? 그런데 이러면 만들 수 있는 form의 갯수가 제한이 될거 같구요.
:
: 아니면 (TForm2* , foo)에 대한 liked list를 써서 생성할 때마다 node하나 생성하고 닫을 때 마다 list를 만들고 변경해야 하나요?
:
:
:
: 같은 폼  여러개 생성하는 것만이라도 가르쳐주세요.
:
: Form1에서 Form2를 생성한다고 할때,
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:      TForm2* f2= new TForm2(this);
:      f2->Show();
:
:
: }
: //---------------------------------------------------------------------------
:
:
: void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
: {
:    delete this;
: }
: //---------------------------------------------------------------------------
:
: 처럼하면 메모리 반환이 제대로 되나요?

+ -

관련 글 리스트
48024 [질문] 프로그램 실행중에 같은 폼을 여러개 생성하는 것에 대해서 야누 1075 2007/02/08
48036     두분 모두 감사합니다. (냉무) 야누 822 2007/02/09
48032     Re:[질문] 프로그램 실행중에 같은 폼을 여러개 생성하는 것에 대해서 장성호 1002 2007/02/08
48029     Re:[질문] 프로그램 실행중에 같은 폼을 여러개 생성하는 것에 대해서 dd 906 2007/02/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.