어려운 고민좀 부탁 드립니다.......
TForm1 은 Available Form 입니다.
폼은 찾는데 Create 에서 Error 가 나는군요..
부탁 드립니다.
procedure TMainForm.menuClick(Sender: TObject);
var
FormClass :TFormClass;
begin
FormClass := TFormClass(FindComponent('TForm1'));
openForm(FormClass);
end;
.
.
.
.
.
.
Procedure TMainForm.OpenForm(FormClass:TFormClass);
var
I:Integer;
Form:TForm;
begin
Form := nil;
For i := 0 to Application.ComponentCount - 1 do
if Application.Components[i].ClassType = FormClass then
Form := (Application.Components[i] as FormClass);
Form := Formclass.Create(Application);
Form.Show;
end;
클래스 메소드에 대한 이해가 약간 부족하신거 같습니다...
FindComponent메소드는 현재 소유하고 있는(이미 생성되어 있는) 컴포넌트의 인스턴스를
돌려줍니다. 그러니까 TForm1이 Available Form이니까 TForm1이 이미 생성되어 있지 않
으면 아래 구문은 nil을 반환합니다. 생성되어 있다 하더라도 Owner가 TMainForm이 아니
라 Application이어도 역시 nil을 반환하죠. TMainForm.FindComponent를 호출했으니까요
또하나 인자에는 클래스이름이아니라 인스턴스 이름이 들어가야합니다. TForm1이 아니라
Form1이 들어가야죠...
> FormClass := TFormClass(FindComponent('TForm1'));
아마도 하실려는 일이 메타클래스로부터 폼을 생성하실려는거 같은데 아래와 같이 하세요...
procedure TMainForm.FormCreate(Sender: TObject);
begin
RegisterClass(TForm1); // TForm1 메타클래스(class-reference type) 등록
end;
procedure TMainForm.MenuClick(Sender: TObject);
var
FormClass :TFormClass;
begin
FormClass := TFormClass(GetClass('TForm1'));
OpenForm(FormClass);
end;
procedure TMainForm.OpenForm(FormClass: TFormClass);
var
Form: TForm;
begin
Form := Formclass.Create(Application);
Form.Show;
end;
^^ 항상 즐코하세요...
정종수 wrote:
> 어려운 고민좀 부탁 드립니다.......
>
> TForm1 은 Available Form 입니다.
> 폼은 찾는데 Create 에서 Error 가 나는군요..
> 부탁 드립니다.
>
> procedure TMainForm.menuClick(Sender: TObject);
> var
> FormClass :TFormClass;
> begin
>
> FormClass := TFormClass(FindComponent('TForm1'));
> openForm(FormClass);
>
> end;
> .
> .
> .
> .
> .
> .
> Procedure TMainForm.OpenForm(FormClass:TFormClass);
> var
> I:Integer;
> Form:TForm;
> begin
> Form := nil;
> For i := 0 to Application.ComponentCount - 1 do
> if Application.Components[i].ClassType = FormClass then
> Form := (Application.Components[i] as FormClass);
>
> Form := Formclass.Create(Application);
> Form.Show;
>
> end;
>
>