新建MDI子窗体

在子窗体里:
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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值