子窗体的打开和关闭.doc

上传人:M****1 文档编号:543805711 上传时间:2023-07-14 格式:DOC 页数:19 大小:153.01KB
返回 下载 相关 举报
子窗体的打开和关闭.doc_第1页
第1页 / 共19页
子窗体的打开和关闭.doc_第2页
第2页 / 共19页
子窗体的打开和关闭.doc_第3页
第3页 / 共19页
子窗体的打开和关闭.doc_第4页
第4页 / 共19页
子窗体的打开和关闭.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《子窗体的打开和关闭.doc》由会员分享,可在线阅读,更多相关《子窗体的打开和关闭.doc(19页珍藏版)》请在金锄头文库上搜索。

1、Delphi编程资料精华汇总标题: 父窗体fsmDIForm 子窗体fsMDIChild内容: 设置父窗体Formstyle为fsmDIForm子窗体为fsMDIChild 1.如果你需要你的子窗体就是设计时的那个子窗体, 用Application.CreateForm(TFormChild,FormChild);创建该子窗体,则再使用FormChild.Close;时应该不会报错。 2.MDI子窗体的默认关闭操作为最小化,想让它真正关闭,在其OnClose中写Action:=caFree; 3.如果你的子窗体只是用TFormChild类创建的实例(用TFormChild.Create(App

2、lication);或TFormChild.Create(self);创建的),则一般不能用FormChild来引用它(如它是全局变量等情况例外)。可以考虑以下几个方法: /关闭最早建立的实例 MainForm.MDIChildrenMainForm.MDIChildCount-1.close; /关闭最晚建立的实例 MainForm.MDIChildren0.close; /关闭当前活动实例 MainForm.ActiveChild.close; /关闭所有子窗体 fori:=0toMainForm.MDIChildCount-1do MainForm.MDIChildreni.close;

3、 DelphiMDI应用程序高级技巧三则(一)2008-07-2807:47本文介绍几个DelphiMDI应用程序的编程技巧,虽然纯属技巧,但是本文的方法在正常编程时,通常会被编译器认为是错误的或是违背编程环境缺省许可值的。不过有时为了一些特殊的用途或特殊的视觉效果,按下述的方法一试,可以在明知不可违而违之的情况下,得到很好的结果。 下述各示例均在Delphi6、Windows2000下完成,对涉及的控件命名是任意的,仅为方便说明问题。 一、子窗口的隐藏 在Delphi编程环境下,MDI子窗口在运行期间可以动态地被创建和销毁,但是不能够被隐藏,如果试图通过Visible属性或Hide方法隐藏子

4、窗口,编译器将报出“CannothideanMDIChildForm.”的错误提示! 如果某个子窗口中承载了很多要保留的数据而不能销毁,但又暂时不想要它出现在屏幕上时,最好的方法就是将其隐藏,待需要时再将其显示出来则可。下面两种方法可以隐藏和显示子窗口,并避开了编译器的报错提示。 1)使用WindowsAPI函数ShowWindow(),示例代码如下: ShowWindow(ChildForm.Handle,SW_HIDE);/隐藏子窗口 ShowWindow(ChildForm.Handle,SW_RESTORE);/显示子窗口 说明:使用WindowsAPI直接隐藏子窗口,其子窗口的Vis

5、ible属性和其显示状态是不一至的。当子窗口不可见时,其Visible属性可能仍然是True。 2)直接设置子窗口的Visible属性 此时,首先要在需要隐藏的子窗口中重载TCustomForm的VisibleChanging方法,并在其实现过程中屏蔽掉继承代码,否则编译器将在隐藏子窗口时报错。 然后就可以直接设置这个子窗口的Visible属性为False或True来隐藏或显示它了。示例如下: a)子窗口部分 type TChildForm=class(TForm) private procedureVisibleChanging;override;/重载 end; procedureTChi

6、ldForm.VisibleChanging; begin 使用组件属性隐藏子窗口时,需要重载此过程,并且不执行任何继承代码,否则将报错 /inherited;不能执行此语句! end; b)隐藏或显示子窗口 ChildForm.Visible:=false;/隐藏子窗口 ChildForm.Visible:=true;/显示子窗口 说明:直接使用组件属性隐藏或显示子窗口,子窗口的Visible属性和其显示状态是一至的。笔者认为这样做要安全一些。 子窗口分布控制2008-07-2807:531.叠窗口. Form1.Cascade; 2.横向平铺窗口 Form1.TileMode:=tbHor

7、izontal; Form1.Tile; 3.纵向平铺窗口 Form1.TileMode:=tbVertical; Form1.Tile; 4.重排图标 Form1.ArrangeIcons; 我在每一個MDI的子視窗開啟的時候,都自動用水平方式排列,讓開啟的子視窗能平均排列在畫面中,但當其中一個子視窗關閉的時候,如何讓剩餘開啟的子視窗能重新排列一次? 1.Addatimeronthemainform,setenabledtofalse&intervalto100 2.addbelowcodesonitsOnTimerevent procedureTMainForm.Timer1Timer(S

8、ender:TObject); begin TTimer(Sender).Enabled:=False; MainForm.TileMode:=tbHorizontal; MainForm.Tile; end; 3.addbelowcodesonMDIChildsoncloseevent . implementation usesMAIN; $R*.dfm . procedureTMDIChild.FormClose(Sender:TObject;varAction:TCloseAction); begin Mainform.Timer1.Enabled:=True; Action:=caFr

9、ee; end; Delphi:隐藏MDI子窗口带来的问题2008-07-2808:43在delphi中隐藏MDI子窗口有两种方法: 1)发消息及调用ShowWindow函数: showwindow(childform.handle,sw_hide);/隐藏子窗口 showwindow(childform.handle,sw_restore);/显示子窗口 缺点:使用windowsapi直接隐藏子窗口,其子窗口的visible属性和其显示状态是不一至的。当子窗口不可见时,其visible属性可能仍然是true。 2)重载子窗口的visiblechanging方法: private proced

10、urevisiblechanging;override;/重载 proceduretchildform.visiblechanging; begin /inherited;不能执行此语句! end; 此后就可以直接设置visible属性了: childform.visible:=false;/隐藏子窗口 childform.visible:=true;/显示子窗口 缺点:当子窗口隐藏了后,有些控件的数据没有办法取到,如TListView,为这个问题曾经郁闷了很久,不知道是什么原因。例如:子窗口上listview已经有了10行数据,当利用方法2)把使得子窗口不可见了后,调用childform.l

11、istview.items.count结果总是0,但是显示此子窗口后10行数据还是在此listview中。 所以使用1),在程序中不要调用visible属性。 使用2),在子窗口隐藏了后不要去取该子窗口的数据。 delphi怎么让限制MDI子窗口重复打开?2008-07-2809:18delphi怎么让限制MDI子窗口重复打开? delphi怎么让限制MDI子窗口重复打开? begin ifNotassigned(form2)then begin Application.CreateForm(TForm2,Form2); end else begin form2.Show; end; end;

12、 这个到是可以显示重复打开但是我关闭改子窗体后再打开就没出错拉 解决拉 在FORM2关闭的时候 先释放资源在赋空值 action:=cafree; form2:=nil; Delphi中实现MDI子窗体用MDI实现浏览子窗口,具有窗口管理功能,同屏观看多个网页的内容 多文档窗体(MDI) MDI窗体是一种具有主子结构的窗体体系,微软的Word便是其中的一个典型例子。MDI体系中至少需要两种窗体,只能将其中之一设置为主窗体,其余窗体全部则全部为子窗体,主窗体负责子窗体的管理、切换等工作。自然,子窗体上承载的内容可各不相同。Tidy浏览器最终实现了三种不同的窗体:主窗体、浏览子窗体、源代码子窗体。

13、 设置窗体类型 我们通过窗体的FormStyle属性设置窗体类型,它是一个枚举类型,可取的值包括:fsNormal, fsMDIChild, fsMDIForm, fsStayOnTop。分别对应:普通窗体, MDI子窗体,MDI主窗体, 普通顶部窗体。 值得注意的是,窗体的FormStyle属性应在设计期确定,运行期间更改是不可取的。 子窗体的创建 一般而言,主窗体在应用程序启动时自动创建,子窗体通常在响应用户的有关动作之后才创建。并且,同一类子窗体实例可以多次被创建。为了避免程序启动时即创建子窗体,可通过C+Builder的集成环境IDE上的菜单ProjectOptions上的Form标签

14、页,将所有子窗体从Auto-create forms窗口中,移至Available forms窗口。 子窗体的关闭 MDI窗体技术中另一个值得注意的问题是,用户点击MDI子窗体的关闭按钮企图关闭子窗体,系统默认的动作却是将其最小化。为了真正的实现关闭子窗体并释放所占用的内存,可在OnClose事件中将引用参数Action设置为caFree。Action的其他可取值为:caNone,caHide,caMinimize,分别对应无动作、隐藏、最小化。 主窗体的重要属性的使用 ActiveMDIChild属性,指向当前活动的子窗体。此乃TForm *类型的指针,必要时可强制转换为任意类型的子窗体实例。 MDIChildCount属性,用于判断已经创建的子窗体的总数。 MDIChildren属性,是一个TForm *类型的指针数组,指向目前存在的所有的子窗体。结合MDIChildCo

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号