试一试,包你满意!!!
procedure OpenForm(FormClass: TFormClass; var fm; AOwner:TComponent);
var
i: integer;
Child:TForm;
begin
for i := 0 to Screen.FormCount -1 do
if Screen.Forms[i].ClassType=FormClass then
begin
Child:=Screen.Forms[i];
if Child.WindowState=wsMinimized then
ShowWindow(Child.handle,SW_SHOWNORMAL)
else
ShowWindow(Child.handle,SW_SHOWNA);
if (not Child.Visible) then Child.Visible:=True;
Child.BringToFront;
Child.Setfocus;
TForm(fm):=Child;
exit;
end;
Child:=TForm(FormClass.NewInstance);
TForm(fm):=Child;
Child.Create(AOwner);
end;
应该是
procedure TMainForm.FileNew1Execute(Sender: TObject);
var
frmcnt :integer;
begin
if mdichildcount>0 then
for frmcnt:=1 to mdichildcount do
MDIChildren[frmcnt].Close
else
CreateMDIChild('你的子窗体的名称');
我认为StarRains(星雨)的方法有理,不过我也有点自己的看法
可以这么写
procedure TMainForm.FileNew1Execute(Sender: TObject);
var
frmcnt :integer;
begin
if mdichildcount>0 then do
begin
for frmcnt=1 to mdichildcount do
MDIChildren[frmcnt].Close;
CreateMDIChild('你的子窗体的名称');
end;
end;
对不起我没有看清题目,刚才那个错了,在控纽中加入如下代码
var
i:integer;
begin
if mdiform.mdichildcount > 0 then begin
for i := 0 to mdiform.mdichildcount do begin
mdiform.child[i].close;
end;
end; //关闭已存在的窗口
mdichileform.show;
end;
这个代码还有一个问题,当已有的子窗口就是要打开的窗口,代码你应先判断一下是否有你要打开的窗口存在,方法就是我上一个中用的
用我下面的函过程
procedure OpenMdiForm(FormClass: TFormClass; var fm; AOwner:TComponent);
var
i: integer;
Child:TForm;
begin
for i := 0 to Screen.FormCount -1 do
if (Screen.Forms[i].ClassType=FormClass) then
begin
Child:=Screen.Forms[i];
if Child.WindowState=wsMinimized then
ShowWindow(Child.handle,SW_SHOWNORMAL)
else
ShowWindow(Child.handle,SW_SHOWNA);
if (not Child.Visible) then Child.Visible:=True;
Child.BringToFront;
Child.Setfocus;
TForm(fm):=Child;
exit;
end;
Child:=TForm(FormClass.NewInstance);
TForm(fm):=Child;
Child.Create(AOwner);
end;