Q&A

  • getClass 질문입니다. 꼭..
이걸 꼭 구현 하고 싶은데...

MyFormClass := TFormClass(GetClass(sClass)); 부분을



MyFormClass := TFormClass(TForm2); 이렇게 직접 적어주면 create 되거든요

근데 위처럼 GetClass 하면 실행이 되질 않아요...



어떻게 해야 할까요. 꼭좀 알려 주세요.









아래 참조...(이만준님글...)

--------------------------------------------------------------



4. 차일드 폼 다루기



1)클래스 이름으로 차일드 생성하기



차일드 클래스의 이름만으로 차일드를 생성시키는 방법이 있습니다.

델파이가 비주얼 툴리기 때문에 이런 기능이 필요했겠지요..



(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');



라고 써보지요...역쉬...차일드가 생성될 겁니다..



_____________________________________________________________________________

이 기능은 MIS 프로젝트시 유용하게 이용할 수 있지요..

데이타베이스에다 클래스명을 넣어두고

사용자가 어떤 차일드를 실행하려고 하면 읽어와서

바로 생성해주면 되니까요...



매번 차일드를 생성할때마다 소스를 고칠 필요가 없어집니다..

-----------------------------------------------------------------------------

1  COMMENTS
  • Profile
    최용일 2001.12.26 21:18
    안녕하세요. 최용일입니다.



    답 다 나와 있는데요...



    GetClass로 클래스를 찾으려면 그 클래스가 등록되어 있어야 합니다. 그 일을 하는것이



    RegisterClass(es) 함수이고요...



    GetClass호출하기전에 RegisterClass함수를 써서 클래스를 등록해주세요...



    initialization섹션이나 폼의 OnCreate이벤트에서 하세요..



    ^^ 항상 즐코하세요...



    mmx05 wrote:

    > 이걸 꼭 구현 하고 싶은데...

    > MyFormClass := TFormClass(GetClass(sClass)); 부분을

    >

    > MyFormClass := TFormClass(TForm2); 이렇게 직접 적어주면 create 되거든요

    > 근데 위처럼 GetClass 하면 실행이 되질 않아요...

    >

    > 어떻게 해야 할까요. 꼭좀 알려 주세요.

    >

    >

    >

    >

    > 아래 참조...(이만준님글...)

    > --------------------------------------------------------------

    >

    > 4. 차일드 폼 다루기

    >

    > 1)클래스 이름으로 차일드 생성하기

    >

    > 차일드 클래스의 이름만으로 차일드를 생성시키는 방법이 있습니다.

    > 델파이가 비주얼 툴리기 때문에 이런 기능이 필요했겠지요..

    >

    > (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');

    >

    > 라고 써보지요...역쉬...차일드가 생성될 겁니다..

    >

    > _____________________________________________________________________________

    > 이 기능은 MIS 프로젝트시 유용하게 이용할 수 있지요..

    > 데이타베이스에다 클래스명을 넣어두고

    > 사용자가 어떤 차일드를 실행하려고 하면 읽어와서

    > 바로 생성해주면 되니까요...

    >

    > 매번 차일드를 생성할때마다 소스를 고칠 필요가 없어집니다..

    > -----------------------------------------------------------------------------