创建的时候可以这么写: begin 判断是否已经打开了改窗口,没有的话 then Application.CreateForm(Tform, form1); Form1.Show; end;关闭: procedure Tform1.Button1Click(Sender: TObject); begin Close; end; procedure Tform1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;
if not assigned(form1) then form1:=TForm1.craate(Application); form1.show;
所有的子窗体除了第一个要他自动出现的那个子窗体自动创建外 其余的都不要自动创建 可以自己定义创建下面是代码你可以先建立一个过程申明过程 procedure ShowMDIForm(FormClass: TFormClass; var frm;AOwner: TComponent); procedure Tfrmmain.ShowMDIForm(FormClass: TFormClass; var frm;AOwner: TComponent); var i: Integer; bFound: Boolean; NewForm: TForm; begin bFound:=False; //NewForm:=Nil; //查找该窗口是否已存在,如果存在就显示 For i:=0 to frmmain.MDIChildCount-1 do begin if MDIChildren[i].ClassName = FormClass.className then begin newForm:=MDIChildren[i]; Tform(frm):=newform; newform.Show; newform.WindowState:=wsMaximized; self.Update; bFound:=True; Break; end; end; //如果不存在,就重新创建 if Not bFound then begin newform:= TForm(FormClass.NewInstance); TForm(frm):= newform; newform.Create(Owner); newform.Show; newform.WindowState:=wsMaximized; self.Update; end;end;这个也可以在主窗体中创建 然后就在主窗体的按钮事件中添加如下代码procedure Tfrmmain.Button1Click(Sender: TObject); begin showMDIform(Tform1,form1,form1); end;就可以啦上面的代码都是通过测试的 够详细吧
关闭子窗口事 只需在子窗口的close事件中 写入action := cafree;就ok啦
打开窗口的时候 begin if not assigned(c_form) then begin c_form:=TC_form.create(application); c_form.show; end; end; 主要是为了判断该实例是否已经初始化过 在窗口的Close()里写 aciton:=caFree; 在窗口的Destroy里写 c_from:=nil; 这种写法是很常用的
action := cafree;
Button.Click : 子窗体.close但是必需在子窗体的OnClose事件中加入
action := cafree;
在子窗体的CLOSE事件中:
ACTION:=CAFREE ;
F_child:=nil;
begin
判断是否已经打开了改窗口,没有的话 then
Application.CreateForm(Tform, form1);
Form1.Show;
end;关闭:
procedure Tform1.Button1Click(Sender: TObject);
begin
Close;
end;
procedure Tform1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
end;
if not assigned(form1) then
form1:=TForm1.craate(Application);
form1.show;
其余的都不要自动创建 可以自己定义创建下面是代码你可以先建立一个过程申明过程
procedure ShowMDIForm(FormClass: TFormClass; var frm;AOwner: TComponent); procedure Tfrmmain.ShowMDIForm(FormClass: TFormClass; var frm;AOwner: TComponent);
var
i: Integer;
bFound: Boolean;
NewForm: TForm;
begin
bFound:=False;
//NewForm:=Nil;
//查找该窗口是否已存在,如果存在就显示
For i:=0 to frmmain.MDIChildCount-1 do
begin
if MDIChildren[i].ClassName = FormClass.className then
begin
newForm:=MDIChildren[i];
Tform(frm):=newform;
newform.Show;
newform.WindowState:=wsMaximized;
self.Update;
bFound:=True;
Break;
end;
end;
//如果不存在,就重新创建
if Not bFound then
begin
newform:= TForm(FormClass.NewInstance);
TForm(frm):= newform;
newform.Create(Owner);
newform.Show;
newform.WindowState:=wsMaximized;
self.Update;
end;end;这个也可以在主窗体中创建 然后就在主窗体的按钮事件中添加如下代码procedure Tfrmmain.Button1Click(Sender: TObject);
begin
showMDIform(Tform1,form1,form1);
end;就可以啦上面的代码都是通过测试的
够详细吧
写入action := cafree;就ok啦
begin
if not assigned(c_form) then
begin
c_form:=TC_form.create(application);
c_form.show;
end;
end;
主要是为了判断该实例是否已经初始化过
在窗口的Close()里写
aciton:=caFree;
在窗口的Destroy里写
c_from:=nil;
这种写法是很常用的