📄 chapt13.htm
字号:
<html><head><title>第十三章 MDI编程</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body bgcolor="#00000" text="#00cc66"><p align="center"><b><font color="#FF6666" size="4">第十三章 MDI编程</font></b></p><p> 在开发一个多窗体的Windows应用程序时,可选择下面两种基本思路建立整个应用界面。<br> (1)多文档界面(MDI)<br> (2)单文档界面(SDI)<br> 事实上,我们前面讲过的例子都是单文档界面(SDI),这种界面的一个特点就是程序只由一个单独的窗口组成(当然,你也可以在SDI应用程序中设计多个窗口,如弹出窗口等)。<br> 每个界面类型都提供特色,向用户展示它们的应用。MDI应用程序已被认作是“真正的”Windows类型。在Delphi中,你可以通过选择MDI模板来开始一个MDI程序的设计,但在本章中,我们将主要详细讨论学习建立一个MDI应用程序的基本步骤,让读者进一步掌握Delphi编程的技巧,并在最后介绍MDI模板的使用。<br> Delphi允许用户创建支持多文档界面(MDI)标准的Windows应用程序。MDI应用程序的样例是Microsoft Word、Microsoft Excel和大多数支持一次装入多个文件的Windows文本编辑器(见图13.1)。本节主要介绍创建允许MDI的应用程序。<br> 每个MDI应用程序都有一个MDI父窗口,内有一个用户区可显示MDI子窗口(或多个子窗口)。MDI子窗口限制在用户区内,也就是说子窗口不能扩大出父窗口的窗口边界。MDI子窗口可在用户区内任一处极小化,极大化或改变尺寸,典型的MDI能并排和重叠MDI子窗口,以及排列极小化子窗口的图标。MDI父窗口包括应用程序的主菜单,用于操作没有菜单的MDI子窗口。<br> <b>13.1 建立MDI父窗体和子窗体</b><br> MDI应用程序由两个以上的窗体组成。一个单窗体MDI应用程序是自相矛盾的,应作为一个SDI应用程序来开发。所有的MDI应用程序必须有一个父窗口,里面至少有一个单MDI子窗口。为了在Delphi中实现这种关系,需要在项目中管理至少两个独立的窗体。<br> 创建MDI应用程序最简单的办法是使用Delphi自己的MDI应用项目样板。下面各节将介绍如何从头建立一个MDI应用程序,而不使用MDI应用项目样板。<br> 下面的步骤介绍了如何快速从头开始创建一个包括MDI父和子窗口的MDI应用程序。单个元素所涉及的细节,如窗体的FormStyle特性,按照下列步骤进行:<br> (1)打开File菜单并选择New Application,或者选择File菜单的New命令,在New Item对话框的New标签页,选择Aplication选项。<br> (2)设置窗体的FormStyle特性为fsMDIForm,将其作为一个MDI父窗体。<br> (3)为MDI父窗体取名为frmMDIParent,对应代码单元起名为MDIParent。<br> (4)打开File菜单并选择New Form,增加另一个窗体用作MDI子窗口,这将在项目中增加一个新的窗体和代码单元。<br> (5)设置子窗体的FormStyle特性为fsMDIChild,将其作为一个MDI子窗体。<br> (6)打开Project Options对话框,从中选择Forms页(见图13.3),将子窗体从Auto-create窗体列表移到Available窗体列表中。<br> (7)为MDI子窗体取名为frmMDIChild,对应的代码单元取名为MDIChild。<br> 一旦完成以上各步,打开View菜单并选择Project Manager。在ProjectManager对话框,你会发现程序定义了两个窗体(见图13.2)。其对应的代码单元:<br> 在创建MDI父窗体和子窗体时应注意的几点问题:<br> (1)MDI父窗体必须是应用程序的主窗体。如果MDI父窗体不是主窗体,则应用程序不能被正确编译。要确认一个窗体是否为主窗体,可以使用Project菜单中的Options命令,打开Project Options对话框,从中选择Forms页(见图13.3)。从中你也可以设置一个窗口为主窗体。<br> (2)每个程序只能有一个父窗体,即只能有一个窗体的窗体风格为fsMDIForm,而子窗体可以有一到多个。<br> (3)应用程序的主窗体的窗体风格不能设置为fsMDIChild。<br> (4)程序运行时,可以创建子窗体的多个实例,仅受系统资源的限制。因此,通常 MDI子窗体不应该放在Auto-create窗体列表中,而是放在Available窗体列表中,将子窗体从Auto-create窗体列表去掉。但是,如果程序的子窗体在运行时只有一个实例,也可以不将其从Auto-create列表中去掉。<br> MDI应用程序父窗口的菜单条是应用程序的主菜单。如果应用程序的的子窗口包含有菜单条,则在程序运行时,获得焦点的子窗口的菜单项会合并到主窗口菜单条上。<br> 主窗口中的File和Window菜单项控制的是主窗口的功能,而不是某个特定的子窗口。当用户选择File菜单中New命令或Open命令时,打开一个子窗口,这时应用程序菜单增加两个新的菜单项。<br> 这里File、Edit、Character是子窗口的菜单项,用于控制子窗口的功能。当子窗口激活时,子窗口的菜单项被合并到主窗口菜单条上(如Edit和Character菜单项),或替代了原主菜单的菜单项(如File菜单项)。<br> 请注意菜单的GroupIndex特性,该特性决定合并菜单显示在共享菜单条上的顺序,缺省值为0,但通过改变该值,可以决定合并菜单项是插入还是替换原主菜单项。下面是定义GroupIndex值的几条规则:<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -