zoukankan      html  css  js  c++  java
  • Delphi中实现MDI子窗体(转)

    Delphi中实现MDI子窗体
    用MDI实现浏览子窗口,具有窗口管理功能,同屏观看多个网页的内容 
      ① 多文档窗体(MDI) 
    MDI窗体是一种具有主子结构的窗体体系,微软的Word便是其中的一个典型例子。MDI体系中至少需要两种窗体,只能将其中之一设置为主窗体,其余窗体全部则全部为子窗体,主窗体负责子窗体的管理、切换等工作。自然,子窗体上承载的内容可各不相同。Tidy浏览器最终实现了三种不同的窗体:主窗体、浏览子窗体、源代码子窗体。 
      ② 设置窗体类型 
      我们通过窗体的FormStyle属性设置窗体类型,它是一个枚举类型,可取的值包括:fsNormal, fsMDIChild, fsMDIForm, fsStayOnTop。分别对应:普通窗体, MDI子窗体,MDI主窗体, 普通顶部窗体。 
      值得注意的是,窗体的FormStyle属性应在设计期确定,运行期间更改是不可取的。 
      ③ 子窗体的创建 
      一般而言,主窗体在应用程序启动时自动创建,子窗体通常在响应用户的有关动作之后才创建。并且,同一类子窗体实例可以多次被创建。为了避免程序启动时即创建子窗体,可通过C++Builder的集成环境IDE上的菜单ProjectOptions上的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;

    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    量子和量子化?
    ARM内核和架构都是什么意思,内核和架构的关系是什么?(转)
    线程,进程,协程
    关于Redis的问题
    python一些语法糖用法
    Python装饰器详解
    Python基础知识
    Pyinstaller安装以及参数使用
    正则表达式(特殊字符)/Xpath语法/CSS选择器
    还在为身份验证引入的Microsoft.AspNet.Identity.EntityFramework导致多上下文,生成的DB改名困扰吗?
  • 原文地址:https://www.cnblogs.com/jijm123/p/14852986.html
Copyright © 2011-2022 走看看