폼이름을 스트링 변수로 받아서 폼을 동적으로 생성하려고 하는데,
TForm인 FormInst가 nil로 받아서 폼이 생성이 않되고 있습니다.
참고로 소스는 아래와 같습니다.
클래스로 폼을 등록시켰습니다.
procedure TForm_Main.FormCreate(Sender: TObject);
begin
RegisterClasses([TForm_SYS010]);
end;
동적으로 폼을 생성하는 루틴입니다.
procedure TForm_Main.ListView_SubDblClick(Sender: TObject);
var
CurItem : TListItem;
FormClass : TFormClass;
FormInst : TForm;
begin
CurItem := ListView_Sub.Selected;
FormClass := TFormClass( GetClass( 'TForm_' +
CurItem.SubItems.Strings[0] ) );
Application.CreateForm(FormClass, FormInst); <-- FormInst가 nil
end;
실제로 아래의 값이 대입되어야 함.
FormClass <-- TForm_SYS010 : 정상적으로 대입됨.
FormInst <-- Form_SYS010 : 이 부분에서 대입이 않되어 문제가 발생
한가지 더 질문하겠습니다.
리스트뷰에서 아이템이 여러개 있을 때, 실제 아이템이 없는 빈 공간을
더블클릭하면 Access Violation Error가 발생하는 문제도 부탁합니다.
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterClass(Tform2);
RegisterClass(Tform3);
RegisterClass(Tform4);
RegisterClass(Tform5);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
f : Tformclass;
begin
f := tformclass(findClass(edit1.text));
with f.create(self) do
show;
end;
빈공간클릭의 경우에는
listview.selected 가 nil 일때 리스트아이템을 동작시킬때
예외가 발생합니다.
더블클릭이벤트 시작부분에서 selected nil 이면 exit 하면 되겠네요.