이걸 꼭 구현 하고 싶은데...
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 프로젝트시 유용하게 이용할 수 있지요..
데이타베이스에다 클래스명을 넣어두고
사용자가 어떤 차일드를 실행하려고 하면 읽어와서
바로 생성해주면 되니까요...
매번 차일드를 생성할때마다 소스를 고칠 필요가 없어집니다..
-----------------------------------------------------------------------------
답 다 나와 있는데요...
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 프로젝트시 유용하게 이용할 수 있지요..
> 데이타베이스에다 클래스명을 넣어두고
> 사용자가 어떤 차일드를 실행하려고 하면 읽어와서
> 바로 생성해주면 되니까요...
>
> 매번 차일드를 생성할때마다 소스를 고칠 필요가 없어집니다..
> -----------------------------------------------------------------------------