|
사족을 달아봅니다.
이렇게 하실 수도 있습니다.
메뉴에서 new Form으로 폼을 만들면 자동으로 인스턴스를 가지게 됩니다.
Form1Create()에서 아래 내용
: Form2=NULL;
: Form2 = new TForm2(this); /// Owner로 Form1을 지정했기에 Form1이 소멸될 때 Form2도 자동소멸 ^^
: Form2->ShowModal();
등을 하실 필요도 없는 것이고, Form2는 자동으로 할당될 것입니다.
만일 이렇게 하시려고 하시면 Form2를 자동관리되는 폼리스트에서 오른쪽 가능한 폼리스트로 옮겨주시면
되겠습니다.
다만 자동으로 사용하실 경우 Form1의 FormCreate()에서 Form2는 쓸 수 없습니다.
왜냐하면 Form1이 메인인데 메인이 만들어지는 이벤트가 Create인 것이죠..
이게 진행되면 Form2는 말씀드린대로 자동으로 할당되어 집니다.
그래서 다음과 같이 FormShow()에서 Form2를 ShowModal()할 수 있습니다.
물론 Form1.cpp내에 include "Form2.h"해야 되지요.. 파일메뉴의 Include Unit Hdr... [Alt + F11]을 쓰시면
편하지요..
코드는 핸들러 찾아서 더블클릭...
void __fastcall TForm1::FormShow(TObject *Sender)
{
Form2->ShowModal(); /// <---- 요거 추가 코딩..
}
나타나는 형태는 유사하게 됩니다. 빌더가 소멸까지 자동으로 알아서 해주게 되죠..
raz1004 님이 쓰신 글 :
: 초기화 한다 생각하시면 될 겁니다.
: Form2 가 정상적으로 new 되었나 안되었나를 확인 하기 위하여
: if( Form2 != NULL) Form2->ShowModal();
: 이와같이 사용하기도 하고,
:
: 차후 Form2 를 파괴한 후 다시 생성 시키기 위하여 파괴시 Form2를 NULL 로 지정하고
: 파괴된 상태인가 아닌가를 확인하기 위하여도 사용됩니다.
:
: 프로그래밍 하다보면 쓰레기 값때문에 정신없을 때가 많아 저는 가능하면 무조건 초기화 합니다.
: 그만 버릇이 되서....
: 없어도 그만인 줄입니다~^^
:
: RfRedEye 님이 쓰신 글 :
: : 글을 읽다보니 궁금해서요
: :
: : Form2=NULL; // 여기 의미는 무슨 의미 인가요?
: : : Form2 = new TForm2(this);
: : : Form2->ShowModal();
: :
: : //////////////////////////////////////////////////////////////////////////////////////////////////////////////
: :
: :
: : raz1004 님이 쓰신 글 :
: : : 말씀하신것처럼 그렇게 하지 마시구요...
: : :
: : : 일단 New Form 을 만듭니다.
: : : 그리고 그것을 원하는 Form 이름으로 변경을 합니다.
: : :
: : : 예를들어 NewForm의 이름이 Unit2 라하면 아래와 같이 만들어질 겁니다.
: : : Unit2.cpp 화일 생성된 중간에 TForm2 *Form2; 이 있을 것인데,
: : : 이것을 extern TForm2 *Form2; 로 수정 합니다.
: : :
: : : 다음 원래 Unit1.cpp 화일의 윗부분에
: : : #include "Unit2.h" 를 추가 하고,
: : : 조금 아래 부분의 TForm1 *Form1; 있는 다음 줄에
: : : TForm2 *Form2; 을 추가 합니다.
: : :
: : : 그리고 Form1의 폼을 호출하여 바탕을 찍고 이벤트에서 OnCreat 오른쪽을 더블클릭하면
: : : void __fastcall TForm1::FormCreate(TObject *Sender)
: : : {
: : : }
: : : 이 만들어 지는데 이곳에
: : :
: : : Form2=NULL;
: : : Form2 = new TForm2(this);
: : : Form2->ShowModal();
: : :
: : : 위의 코드를 삽입하면 디케이님이 원하는 스타일의 폼이 순차적으로 생성 될 겁니다.
: : : 그럼 행운이 있으시기를~
: : :
: : :
: : : 디케이 님이 쓰신 글 :
: : : : 안녕하세요
: : : :
: : : : 볼랜드 포럼에 가입하고 처음으로 글을 씁니다.
: : : : 저는 VC 닷넷 유저인데 회사에서 볼랜드 CPP 을 사용하는 프로그램이 있어서
: : : : 볼랜드 C++ 빌더 6 프로그램만 설치해놓고 걍.. 어떻게 해야할지 몰라서 쳐다보기만 하고 있습니다. ^^;;
: : : :
: : : : 도움을 주시면 정말 감사하겠습니다.
: : : :
: : : : 제가 구현하고자하는 기능은 단순합니다.
: : : :
: : : : 프로그램을 설치하는 프로그램이 있습니다. AGENT 프로그램이라고도 하는데
: : : : 쉽게 말해.. 카트라이더를 처음에 설치할 때 나타나는 프로그램입니다.
: : : : 카트라이더는 사용자에게 폴더를 어디에 설치할 것인지 묻지않고 무조건 C:\PROGRAM FILES\NEXON 폴더에
: : : : 설치를 합니다.
: : : :
: : : : 현재 회사에서도 유저에게 어느 폴더에 설치할 것인지 묻지 않고 바로 C:\PROGRAM FILES 폴더에 설치를 하고 있습니다.
: : : :
: : : : 제가 구현하고 싶은 것은 유저에게 어느 폴더에 설치할 것인지 묻고 원하는 폴더에 설치하는 것입니다.
: : : :
: : : : 구체적으로 들어가면 레지스터에 키를 만들어서 저장하고 불러오고 하는 게 있는데..
: : : : 그런 것들은 제가 다 알아서 하구요.. 궁금한 것은..
: : : :
: : : : 사실 이제부터가 본론입니다. ^^
: : : :
: : : : WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
: : : : {
: : : : Application->Initialize();
: : : : Application->CreateForm(__classid(TfrmMainForm), &frmMainForm); // 이 라인 바로 윗줄에
: : : : Application->Run();
: : : : }
: : : :
: : : : 이 부분이 있습니다.
: : : : 주석 표시한 곳 // 이 라인 바로 윗줄에
: : : : Application->CreateForm(__classid(내가 만든 폼 ID), &폼객체); <- 이 것을 넣으려고 합니다.
: : : : 이렇게 하려면.. 폼을 만들어야 하는데요...
: : : : 과연 폼은 어느 메뉴에서 만들 수 있습니까? ^^; <- 이게 핵심 질문입니다.
: : : :
: : : : 결론적으로 말하면 A 폼이 나타났다가 B 폼이 나타나는 것입니다.
: : : :
: : : : Application->Initialize();
: : : : Application->CreateForm(__classid(내가 만든 폼ID), &폼객체);
: : : : Application->Run();
: : : : Application->CreateForm(__classid(TfrmMainForm), &frmMainForm);
: : : : Application->Run();
: : : :
: : : : 이렇게 하면 순차적으로 A 폼이 나타났다가 B 폼이 나타나나요?
: : : : 제가 원하는 것은 A 폼이 나타나고 '마침' 버튼을 누르면 그 때 B 폼이 나타나는 것이거든요.
: : : :
: : : : 정리를 하겠습니다.
: : : :
: : : : 1. 기존에 폼이 있습니다. 이 상태에서 폼을 하나 더 만들려고 합니다. 어떻게 만드나요?
: : : : 2. 기존에 만든 폼을 B 라고 하구요. 제가 만든 폼을 A 라고 합니다. A 폼에서 '마침' 버튼을 누르면 그 때 B 폼이 나타나는 것입니다. 이렇게 하려면 아래와 같이 하면 됩니까?
: : : :
: : : : Application->Initialize();
: : : : Application->CreateForm(__classid(내가 만든 폼ID), &폼객체);
: : : : Application->Run();
: : : : Application->CreateForm(__classid(TfrmMainForm), &frmMainForm);
: : : : Application->Run();
: : : :
: : : : 아.. 질문 하나 더 해도 될까요?
: : : : 볼랜드 C++ BUILDER 가 VC 닷넷과 비교했을 때 어떤 좋은 점이 있나요? '특별히 이쪽 용도에 쓰면 좋다' 라는 게 있을 거 같은데.. 뭐.. 예를 들어.. 여러 DB 와 호환이 가능하고 오라클 DB 에 연결해서 사용했을 때 어떤 강력한 점이 있다더라.. 뭐 이런거요..
: : : :
: : : : 길게 써서.. 질문이 좀 복잡할지도 모르겠네요.
: : : : 결국엔 간단한 질문인데 말이죠. 쉽게 설명하려다보니 글이 길어졌습니다. ^^
: : : : 모두 회사일 하느라 바쁘실텐데.. 수고 많으십니다.
|