이곳에서 항상 많은 도움을 받고 있습니다...
여기에서 구한 팁중에 RegisterClasses 를 이용하여 MDI 프로젝트를 수행 할수 있는 좋은 팁이 있는데
그팁의 내용은
(1) 차일드 유닛의 맨 아래에 다음라인을 추가한다.
initialization RegisterClasses([TForm2]);
컴포넌트에서 볼 수 있는 소스지요...클래스를 등록하면
'TForm2' 라는 클래스 이름으로 클래스를 찾을 수 가 있습니다.
(2) 이제 생성을 해보지요
function CreateChild(sClass : string):Boolean;
var MyFormClass : TFormClass;
WorkForm : TForm;
H : THandle;
begin
Result := True;
MyFormClass := TFormClass(GetClass(sClass)); //클래스를 찾아온다
if MyFormClass <> nil then begin
WorkForm := MyFormClass.Create(Application.MainForm);
end else Result := False;
end;
..........
메인 폼에서 Form2 := TForm2.Create(Self); 라고 생성했던 루틴을 지우고
CreateChild('TForm2');
이렇습니다....
이렇게 해서 Child를 만들었는데...문제는 퀵레포트에서
<!--CodeS-->
Q_TITLE.Caption :=F_fa0280.Panel1.Caption;
<!--CodeE-->
이부분에서 에러가 발생합니다
RegisterClasses([TForm2]) 이렇게 생성한 차일드 폼의 컴포넌트의 프로퍼티를 알아 올수 있는 방법이
없을 까요....?
Form2 := TForm2.Create(Self);
위에코드는 Form2란 변수에 객체가 생성된 메모리 레퍼런스가 들어가서 사용을 할 수 있게 됩니다.
그런데 2)에서는 Form2대신에 WorkForm이란 변수에 레퍼런스가 들어가죠. WorkForm은 지역변수이므로 함수가 끝난 뒤에 변수는 사라집니다. TForm2 형태의 객체는 메모리에 존재하지만 지역변수를 썼기 때문에 접근할 수 있는 반법이 사라진겁니다. 물론 WorkForm에 객체의 레퍼런스를 넣고 접근은 Form2로 하셨겠죠...
WorkForm대신에 Form2를 쓰셔야지 똑같은 상황이 됩니다.
^^ 항상 즐코하세요...
WorkForm