土方法:两个菜单项,一个主Form1,两个子Form2、Form3。菜单事件:procedure TForm1.N11Click(Sender: TObject); begin if Assigned(Form3) then begin Form3.Free; Form3:=nil; end; if not Assigned(Form2) then Form2:=TForm2.Create(self); Form2.Show; end;procedure TForm1.N21Click(Sender: TObject); begin if Assigned(Form2) then begin Form2.Free; Form2:=nil; end; if not Assigned(Form3) then Form3:=TForm3.Create(self); Form3.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;你要打开一个子窗口时openmdiform(mdiform,mdichildform,self)
对不起我没有看清题目,刚才那个错了,在控纽中加入如下代码 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; 这个代码还有一个问题,当已有的子窗口就是要打开的窗口,代码你应先判断一下是否有你要打开的窗口存在,方法就是我上一个中用的
我认为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;其实不难吧!
不好意思,打错了!应该是 procedure TMainForm.FileNew1Execute(Sender: TObject); var frmcnt :integer; begin if mdichildcount>0 then for frmcnt:=1 to mdichildcount do MDIChildren[frmcnt].Close else CreateMDIChild('你的子窗体的名称');
end;
其实他的意思就是要: if mdichildcount=1 then MDIChildren[0].Close;//既然只能有一个活动,就没有必要判断多个了!!
试一试,包你满意!!! 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;
to: zhaowin(可可) 谢谢你的解决方案,但是对于那个图片的问题,我该如何解决呢? 狂人恳请高手指教。。
土方法:两个菜单项,一个主Form1,两个子Form2、Form3。菜单事件:procedure TForm1.N11Click(Sender: TObject);
begin
if Assigned(Form3) then
begin
Form3.Free; Form3:=nil;
end;
if not Assigned(Form2) then Form2:=TForm2.Create(self);
Form2.Show;
end;procedure TForm1.N21Click(Sender: TObject);
begin
if Assigned(Form2) then
begin
Form2.Free; Form2:=nil;
end;
if not Assigned(Form3) then Form3:=TForm3.Create(self);
Form3.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;你要打开一个子窗口时openmdiform(mdiform,mdichildform,self)
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 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;其实不难吧!
procedure TMainForm.FileNew1Execute(Sender: TObject);
var
frmcnt :integer;
begin
if mdichildcount>0 then
for frmcnt:=1 to mdichildcount do
MDIChildren[frmcnt].Close
else
CreateMDIChild('你的子窗体的名称');
end;
if mdichildcount=1 then MDIChildren[0].Close;//既然只能有一个活动,就没有必要判断多个了!!
TForm(fm):=Child;
Child.Create(AOwner);
不知道在干什么。。希望jin_fei(金飞)能告之一下,,,
如果我要在 主form 显示一张jpg图片,用image控件。
我该怎么做呢?怎么老是显示不出来呢??
(刷新一下) 的现在意思是MDIFORM只能有一个子窗口,那么打开其它的窗口之前我是要先判决一下此窗口是不是已打开的,(不然关掉再打开不爽),如果不是再关闭后再打开,所在我觉得正确的是先判断一下,至于方法第一个中有然后再根据结果执。
skypeople(飞飞)要问的内容意思是新建一个,倘若近按我上所述,此处应是关闭后,再新建加一名关闭代码?
感谢jin_fei指教。 如果我要在 主form 显示一张jpg图片,用image控件。
我该怎么做呢?怎么老是显示不出来呢??
谢谢wangzh,我也来提前一下
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;