Delphi中实现MDI子窗体

用MDI实现浏览子窗口,具有窗口管理功能,同屏观看多个网页的内容 
  ① 多文档窗体(MDI) 
MDI窗体是一种具有主子结构的窗体体系,微软的Word便是其中的一个典型例子。MDI体系中至少需要两种窗体,只能将其中之一设置为主窗体,其余窗体全部则全部为子窗体,主窗体负责子窗体的管理、切换等工作。自然,子窗体上承载的内容可各不相同。Tidy浏览器最终实现了三种不同的窗体:主窗体、浏览子窗体、源代码子窗体。 
  ② 设置窗体类型 
  我们通过窗体的FormStyle属性设置窗体类型,它是一个枚举类型,可取的值包括:fsNormal, fsMDIChild, fsMDIForm, fsStayOnTop。分别对应:普通窗体, MDI子窗体,MDI主窗体, 普通顶部窗体。 
  值得注意的是,窗体的FormStyle属性应在设计期确定,运行期间更改是不可取的。 
  ③ 子窗体的创建 
  一般而言,主窗体在应用程序启动时自动创建,子窗体通常在响应用户的有关动作之后才创建。并且,同一类子窗体实例可以多次被创建。为了避免程序启动时即创建子窗体,可通过C++Builder的集成环境IDE上的菜单Project\Options上的Form标签页,将所有子窗体从Auto-create forms窗口中,移至Available forms窗口。 
  ④ 子窗体的关闭 
  MDI窗体技术中另一个值得注意的问题是,用户点击MDI子窗体的关闭按钮企图关闭子窗体,系统默认的动作却是将其最小化。为了真正的实现关闭子窗体并释放所占用的内存,可在OnClose事件中将引用参数Action设置为caFree。Action的其他可取值为:caNone,caHide,caMinimize,分别对应无动作、隐藏、最小化。 
  ⑤ 主窗体的重要属性的使用 
  ActiveMDIChild属性,指向当前活动的子窗体。此乃TForm *类型的指针,必要时可强制转换为任意类型的子窗体实例。 
  MDIChildCount属性,用于判断已经创建的子窗体的总数。 
  MDIChildren属性,是一个TForm *类型的指针数组,指向目前存在的所有的子窗体。结合MDIChildCount属性,可以实现子窗体的遍历。 
  ⑥ 子窗体之间的切换 
  直接引用主窗体的方法Previous()、Next(),可以实现子窗体的前、后切换。 
  ⑦ 子窗体的布局 
  直接引用主窗体的方法Tile()、Cascade(),可以实现子窗体的平铺、层叠布局。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

delphi中判断子窗体是否打开 (2008-10-07 15:21:52)
标签:it 分类:DELPHI程序设计
今天在一个程序中,需要判断子窗体是否打开,写了这段代码共享出来

在一个MDI窗体中限制打开多个子窗体,采用遍历的方式判断子窗体是否已经存在:

procedure Tf_Main.btnUpdateClick(Sender: TObject);
var
i:Integer;
begin
for i :=0 to f_main.MDIChildCount -1 do //MDIChildCount:总的子窗体个数
if (f_main.MDIChildren[i] is Tf_Pass) then //判断子窗体是否存在
begin
self.MDIChildren[i].BringToFront; //把窗体放在最前面
MDIChildren[i].SetFocus; //窗体获得焦点
Exit; //退出函数体

end;

//创建新窗体
Application.CreateForm(Tf_Pass,f_Pass);
f_Pass.Show;
end;

允许单击关闭按钮时关闭子窗体:

procedure Tf_Pass.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
f_Pass := nil;
end;

Delphi中实现MDI子窗体(转)的更多相关文章

  1. 在DLL动态链接库中封装VCL的MDI子窗体

    在DLL动态链接库中封装VCL的MDI子窗体不多说了,看代码就应该明白了,曾经我遇到的问题,现在放出来大家共享! 这里是工程文件的部分: 在DLL中封装MDI子窗体需要重写DLL入口函数,具体代码如下 ...

  2. 用DLL方式封装MDI子窗体

    用DLL方式封装MDI子窗体是一种常用的软件研发技术,他的长处: 研发人员能够负责某一个模块的编写包括(界面+逻辑),能够互不干扰,模块研发完成后,主程式统一调用. 易于程式升级,当程式升级时,不用编 ...

  3. Delphi MDI 子窗体的创建和销毁 [zhuan]

    1.如果要创建一个mdi child,先看是否有这个child 存在,如果有,则用它,如果没有再创建 //该函数判断MDI 子窗体是否存在,再进行创建和显示function isInclude(for ...

  4. 解决WinForm(C#)中MDI子窗体最大化的问题

    “用MDI方式打开一个子窗口体后,总是不能最大化显示,明明子窗口体的WindowState设置为Maximized?”,相信有很多人会遇到这的样问题,请按下面的方法设置即可使MDI子窗体最大化: 1. ...

  5. 解决WinForm(C#)中MDI子窗体最大化跑偏的问题

    “用MDI方式打开一个子窗口体后,总是不能最大化显示,明明子窗口体的WindowState设置为Maximized?”,相信有很多人会遇到这的样问题,请按下面的方法设置即可使MDI子窗体最大化: 1. ...

  6. 保证相同类型的MDI子窗体只会被打开一次的方法

    本文转载:http://www.cnblogs.com/Ricky81317/archive/2008/09/17/1292443.html 看到论坛中有朋友问,如何可以保证在MDI主窗体中,同一类型 ...

  7. delphi 中封装的VCl窗体Tab键响应问题

    在DLL中的子窗体不会响应Tab按键的,这个时候就需要手动去指定Tab键的操作,但是前提是主窗体要向这个窗体发送一个消息,一个Tab键按下的消息.基本顺序是这样的: 1. 主窗体用Hook技术捕获Ta ...

  8. DELPHI中如何让FORM窗体透明,只显示控件?

    DELPHI中如何让FORM窗体透明,只显示控件?分享到: 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 回复次数:7largewanglargewanglargewang等级:Blank ...

  9. 解决winform中mdi子窗体加载时显示最大化最小化按钮的方法

    场景:在mid加载子窗体的时候如果指定WindowState为Maximized,加载完成后主窗体会显示最大化.最小化.关闭的按钮图标. 解决方法: 1.更改主窗体FormMain的属性.制定Main ...

随机推荐

  1. JavaWeb笔记——ajax异步请求

     1. ajax是什么?   * asynchronous javascript and xml:异步的js和xml   * 它能使用js访问服务器,而且是异步访问   * 服务器给客户端的响应一般是 ...

  2. Cocos2dx+lua中Color参数的坑

    cocos2x的lua中有如下几种颜色定义 --Color3B function cc.c3b( _r,_g,_b ) return { r = _r, g = _g, b = _b } end -- ...

  3. JSP 中的几种注释

    1.多行注释 <!-- 注释1 注释2 注释3 --> 或者 <!-- 注释1 …… 注释n //--> 2.多行注释,不同的是:注释内容不会发送到客户端,会被JSP引擎所忽略 ...

  4. Hibernate 异常 —— No CurrentSessionContext configured

    在使用 SessionFactory 的 getCurrentSession 方法时遇到如下异常 “No CurrentSessionContext configured ” 原因是: 在hibern ...

  5. 浅析JavaScript之Function类型

    JavaScript中的函数实际上是对象,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上只是指向函数对象的指针,保存函数在堆内存中的地 ...

  6. dotnet il editor 调试 iis 程序

    没有C#源代码,IL级别调试.听说windbg也可以,不过windbg有些难.另外il其实一般写C#程序也不熟,不过我目的只是找出异常点,到客户一般不发pdb文件,出去也是release版本,出异常( ...

  7. 采用RPC方式和document方式 开发Axis2的WebService客户端

    import javax.xml.namespace.QName; import org.apache.axiom.om.OMAbstractFactory; import org.apache.ax ...

  8. HDU 1025 (LIS+二分) Constructing Roads In JGShining's Kingdom

    这是最大上升子序列的变形,可并没有LIS那么简单. 需要用到二分查找来优化. 看了别人的代码,给人一种虽不明但觉厉的赶脚 直接复制粘贴了,嘿嘿 原文链接: http://blog.csdn.net/i ...

  9. 浅谈网络爬虫爬js动态加载网页(三)

    上一篇讨论了web driver对动态网页的抓取与分析,可以很清楚的看出这是一种集中式处理方式,简单说,就是利用服务器,打开一个真正的brower,然后将需要解析的地址交给浏览器,浏览器去解析,然后将 ...

  10. HDU 2122 HDU Today【Floyd】

    题意:给出n条路,起点和终点,问最短距离 用map处理一下地名,再用floyd 可是不懂的是:为什么INF定义成0x7fffffff就输出一堆奇怪的东西,改成100000000就可以了 #includ ...