|
기본적으로 c++ builder나 delphi에서 폼이나 데이터모듈등을 작성하게 되면 전역으로 선언되게 됩니다.
폼을 추가하시고 헤더 파일과 cpp파일을 보시면
extern PACKAGE TForm1 *Form1;
TForm1 *Form1;
와 같은 형태로 전역변수로 선언되게 됩니다.
프로젝트명.cpp 파일을 보시면 (예를 들면, Project1.cpp)
Application->CreateForm(__classid(TForm1), &Form1);
와 같은 코드로 자동 할당해주게 됩니다.
만약 폼 하나를 추가하시면 이 파일에서
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm2), &Form2);
이런 식으로 폼을 할당하는 부분이 늘어나는 걸 알 수 있습니다.
이러한 전역 변수를 통한 방식이 싫으시다면 해당 폼의 멤버변수로 선언하셔서 사용하실 수 있습니다.
예를 들어 TForm1의 private으로 TForm2 *FormTest ;
와 같은 형태로 선언하시고, TForm1의 생성자나 OnCreate 이벤트 핸들러에서 TForm1을 new 연산자를 통해 할당하는 방식도 가능할 겁니다.
이런 경우 this->FormTest->DoSomething(); 과 같은 형태로 코딩하시게 될겁니다.
이 때 위에서 말씀드린 전역변수로 자동할당되는 걸 없애고 싶으시다면, 메뉴->Project->Option 으로 들어가셔서 Auto-Create Forms에서 원하시는 폼이나 데이터모듈등을 available-forms 쪽으로 옮기시면 됩니다.
자세한 건 강좌나 팁 등을 찾아보시면 더 자세한 내용을 찾으실 수 있으실 겁니다.
newhuni 님이 쓰신 글 :
: 기초적인 질문 하나 드릴께요...
:
: 두개의 폼(A,B)이 있습니다. 이때...
: B폼에서 A폼에 있는 컴포넌트를 제어하기 위해서 A폼의 헤더파일을 B소스에 선언하고
: "A->컴포넌트이름"으로 제어할 수가 있는데... 이 방식은 잘못된것 같아서요...
:
: 이럴때 어떻게 처리해야 말끔할까요??
|