在子窗体里:
FormStyle := fsMDIChild
FormClose
Action:=caFree;
initialization
RegisterClass(TFrmRight);//注册类
在主窗体里:
var
frm:TForm;
FormClass:TClass;
begin
FormClass:=GetClass('TFrmRight');//使用GetClass(可以使用字符串型的窗体类名)必须先注册子窗体类
Application.CreateForm(TComponentClass(FormClass), frm);
frm.WindowState := wsMaximized;
frm.Show;
另一种方法:
在子窗体里:
FormStyle := fsMDIChild
FormClose
Action:=caFree;
在主窗体里:
var
frm:TForm;
begin
Application.CreateForm(TComponentClass(FormClass), frm);
frm.WindowState := wsMaximized;
frm.Show;
通用的方法:
UPublic.pas:
function ShowForm(FormName, FormModel: string): TForm;
function GetForm(FormName: string): TForm;
{
根据类名显示子窗体
FormModel:S-该窗体类仅能创建一个窗体,M-该窗体类可创建多个实例
}
function ShowForm(FormName, FormModel: string): TForm;
var
FormClass: TClass;
fForm: TForm;
begin
FormClass := GetClass(FormName);
FormModel := UpperCase(FormModel);
if FormClass = nil then exit;
if FormModel = 'M' then
fForm := nil
else if FormModel = 'S' then
fForm := GetForm(FormName)
else
exit;
if fForm = nil then
begin
Application.CreateForm(TComponentClass(FormClass), fForm);
end;
fForm.WindowState:=wsMaximized;
fForm.Show;
result := fForm;
end;
function GetForm(FormName: string): TForm;
var
i: integer;
frmClass: TClass;
begin
result := nil;
frmClass := GetClass(FormName);
if frmClass = nil then exit;
for i := 0 to Application.ComponentCount - 1 do
begin
if Application.Components[i] is frmClass then
result := Application.Components[i] as TForm;
end;
end;
在子窗体中设置:
TFrmChild:
FormStyle:=fsMDIChild
procedure TFrmChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
在窗体代码尾部添加:
initialization
RegisterClass(TFrmChild);
在'工程-属性'中设置TFrmChild为手工创建
在主窗体中调用:
ShowForm('TFrmChild',S);