DELPHI中MDI子窗口的关闭 和打开
Posted jijm123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DELPHI中MDI子窗口的关闭 和打开相关的知识,希望对你有一定的参考价值。
Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭。解决办法是在子窗口的OnClose事件处理过程中加入如下代码,示例:
procedure ChildForm.OnClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
Delphi为一个Form的关闭行为指定了四种方式,分别是:
caNone 禁止Form被关闭
caHide Form不被关闭,但是被隐藏。被隐藏的Form仍然可以被程序访问。
caFree Form被关闭,并且释放其占用的资源。
caMinimize Form被最小化而不是被关闭,这是MDI子窗口的默认关闭行为。
==================================================
在MDIForm调用MDIChild窗体时要这样用
引用
if not Assigned(Form2) then begin
Form2:=TForm2.Create(Self);
Form2.Show;
end else
Form2.BringToFront;
另外在MDIChild的OnClose, OnDestroy中要以下代码 Form2为MIDChild窗体的名称
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
Form2:=nil;
end;
=================================================
如何获得当前打开的子窗口的数量?
Application.MainForm.MDIChildCount
==================================================
怎么关闭所有打开MDI子窗体?
除了在主窗体写入
procedure TFrmMain.N15Click(Sender: TObject);
var I:integer;
begin
if Application.MessageBox(‘确定要关闭所有窗口吗?‘,‘System‘,mb_iconinformation+mb_yesno)=id_yes then
begin
for I:=MdiChildCount-1 downto 0 do
MdiChildren[I].Close;
end;
end;
还要在各个子窗口写入
procedure TFrmchildn.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree;
Frmchildn:=nil;
end;
procedur TFrmchildn .FormDestroy(Sender: TObject);
begin
TFrmchildn:=nil;
end;
=================================================
根据以上的测试,有效代码:
主窗体:
引用
procedure TForm1.a2Click(Sender: TObject);
begin
if Assigned(Form2) then
begin
Form2.Close;
end;
end;
procedure TForm1.a3Click(Sender: TObject);
begin
if not Assigned(Form2) then //判断子窗体是否已打开
begin
Form2:=TForm2.Create(Self);
Form2.Show;
end
else Form2.BringToFront;
end;
子窗体:
引用
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
Form2:=nil;
end;
以上是关于DELPHI中MDI子窗口的关闭 和打开的主要内容,如果未能解决你的问题,请参考以下文章
设计一个多文档界面(MDI)应用程序,可以实现打开排列和关闭子窗口。
delphi 请问:如何点了窗口右上解的关闭,程序不是关闭而且隐藏?
有空delphi子窗体关闭触发父窗体做出一系列改变的操作,主要就是子窗体关闭时能改变父窗体组件状态
有空delphi子窗体关闭触发父窗体做出一系列改变的操作,主要就是子窗体关闭时能改变父窗体组件状态