|
답변 감사합니다.
님이 쓰신 글 :
: ymin 님이 쓰신 글 :
: : MDI Child 폼을 동적으로 생성하여 사용하는데 Single 로
: : 사용 할 때는 잘 되는 프로그램이 동적으로 생성하여 사용
: : 할때는 여러곳에서 Access Violation 이 일어나는군요.
: : 왜그런가요? 일반적인 Rull 같은것이 있는지요?
:
: 보통, 아무 생각 없이 코딩하게 되면 디폴트로 제공되는 Form2를 MDI Child로 생각하고 사용하기 쉽습니다.
: 메인 폼 클래스에서 MDI Child를 액세스하려면 이렇게 하지 않고 아래의 멤버들을 사용하여 합니다.
: 아울러, 디폴트 상태로는 프로그램 시작시 Form2가 자동 생성되는데 이를 그렇게 하지 않도록 하는 게 일반적입니다.
: 이는 [Project]->[Options...]->[Forms] 탭에서 MDI Child 폼을 'auto-create forms' 창에서 'available forms'창으로 옮김으로써 가능합니다. 그리고 유닛 파일 상단의 TForm2 *Form2;과 이의 헤더 파일 하단의 extern PACKAGE TForm2 *Form2;는 삭제하는 게 좋습니다(Form2 전역 변수는 사용하지 않을 테니까요).
: 빌더의 예제 폴더에 보면 MDI에 관한 프로그램 소스가 있으므로 이를 참고하시는 것도 좋겠습니다.
:
: __property int MDIChildCount = {read=GetMDIChildCount, nodefault};
: __property TForm* MDIChildren[int I] = {read=GetMDIChildren};
: __property TForm* ActiveMDIChild = {read=GetActiveMDIChild};
:
: MDIChildren의 각 원소와 ActiveMDIChild는 TForm 형입니다.
: TForm과 그 조상 이외의 멤버에 액세스하려면 위를 실제의 형으로 변환하여 사용하면 되겠습니다.
: 디폴트 상태로 코딩을 하면 TForm을 상속받은 TForm2 클래스가 MDI Child의 형이 될 것입니다.
: 즉, class TForm2 : public TForm과 같을 것입니다.
: 따라서, ActiveMDIChild를 TForm2로 형변환하여 사용자 정의 메서드나 변수에 액세스하여야 합니다
|