第 9章 应用程序界面设计技术本章要点:
多窗体程序设计
SDI应用程序设计
MDI应用程序设计
变量的作用域
9.1 循序渐进学理论
9.1.1 多窗体程序的设计
1.为应用程序添加和删除窗体新建一个 Delphi项目时,项目中只有一个名为 Form1
的窗体,如果要为当前应用程序添加窗体,可通过单击工具栏上的新建窗体,,按钮来实现。如果想把当前项目中的某窗体去除,可通过单击工具栏上的移去文件,,按钮来实现。
2.窗体间切换切换方法是单击工具栏上的查看窗体,,按钮。
3.设置主窗体和自动创建窗体所谓主窗体是指程序开始运行时出现的窗体,新建一个 Delphi项目时,第一个窗体默认为主窗体,但主窗体可以重新设定。设定方法是执行 【 Project】 →
【 Options】 命令 。
【 例 9-1】 编写一个调查用户购买商品的应用程序。
程序运行时将出现一个调查窗体供用户输入信息,如图 9-5所示。用户输入信息后按 【 提交 】 按钮将出现确认窗体,显示用户输入的信息,如图 9-6所示。在该窗体上,用户按 【 确认 】 按钮将退出应用程序,如果用户按 【 重填 】 按钮将又回到图 9-5所示的调查窗体等待用户输入信息。
图 9-5 程序运行界面(一) 图 9-6 程序运行界面(二)
9.1.2 单文档( SDI)应用程序设计技术
【 例 9-2】 利用 Delphi提供的模板创建一个标准的 SDI应用程序。
创建步骤如下:
( 1)执行 【 File】 → 【 New】 → 【 Other】 命令,将会出现 【 New Item】 对话框,在该对话框中选中选项卡
【 Projects】,再选中图标 【 SDI Application】,然后按 【 OK】 按钮。将会出现 【 选择目录 】 对话框。
( 2)在 【 选择目录 】 对话框中选择 SDI应用程序需保存的路径,然后按 【 OK】 按钮,系统将自动创建一个标准的单文档应用程序 。
9.1.3 多文档( MDI)应用程序设计技术
1.多文档应用程序的概念与单文档应用程序相对应,多文档应用程序是允许在一个主窗体中创建多个子窗口的应用程序。
MDI应用程序允许用户同时显示多个文档,每个文档显示在它自己的窗口中。文档或子窗口被包含在父窗口中,父窗口为应用程序中所有子窗口提供工作空间。子窗体就是普通窗体。一个应用程序可以包含许多相似或者不同样式的子窗体。在运行时,子窗体显示在父窗体工作空间之内,且不能移出父窗体。当子窗体最小化时,它的图标显示在父窗体的工作空间之内,而不是在任务栏中。
2.通过模板创建 MDI应用程序
【 例 9-3】 利用 Delphi提供的模板创建一个标准的
MDI应用程序。
应用模板创建 MDI应用程序的步骤如下 。
( 1) 执行 【 File】 → 【 New】 → 【 Other】 命令,将会出现 【 New Item】 对话框,在该对话框中选中选项卡 【 Projects】,再选中图标 【 MDI Application】,
然后按 【 OK】 按钮 。 将会出现 【 选择目录 】 对话框 。
( 2) 在 【 选择目录 】 对话框中选择 MDI应用程序需保存的路径,然后按 【 OK】 按钮,系统将自动创建一个标准的多文档应用程序 。
3.用户从头开始创建 MDI应用程序需注意的几个要点
( 1)创建主窗体一个 MDI应用程序有一个主窗体,用来作为其它窗体的父窗口。要把某窗体设置为主窗体,需把它的
FormStyle属性值设置为,fsMDIForm”。
( 2)创建子窗体一个 MDI应用程序可能有一个或多个不同风格的子窗口,每一种子窗口均需创建一个子窗体。要创建子窗体,首先应把窗体添加到应用程序中,然后把它的 FormStyle属性值设置为,fsMDIChild”。
( 3)创建应用程序菜单和菜单融合为进行菜单融合,需设置窗体的 Menu属性和菜单项的 GroupIndex属性。
如果窗体有多个菜单组件,运行时可通过以下代码选择当前使用的菜单组件:
Form1.Menu:=菜单组件名 ;
GroupIndex属性决定出现在菜单条中各菜单项的位置。 GroupIndex属性的缺省值是 0,其取值及含义如下:
① 数值越小,菜单的位置越靠左。
② 若需替换主菜单中的某一菜单项,则将子菜单相应菜单项的 GroupIndex设为与之相等的值。
③ 将同一窗体的多个菜单项的 GroupIndex设为相同值,原有的排列顺序在菜单融合时将保存不变 。
④若要在菜单融合时插入菜单项,则需要在主菜单中预留 GroupIndex数值,位置,。如主菜单的两菜单项数值为 0,2,则子菜单中 GroupIndex数值为 1的菜单在融合时将插入其中。
( 4)运行时子窗体的创建和关闭通常在设计时要创建子窗体的模板,在程序执行时通过子窗体的 Create方法创建子窗体。要关闭子窗体,可使用子窗体的 Close方法。此时将产生子窗体的 FormClose事件,如有以下的 FormClose事件程序:
procedureTform1.FormClose(Sender,Tobject;var
action,TcloseAction);
begin
action:=cafree;
end;
( 5)与 MDI应用程序有关的一些属性或方法
① Mdichildcount属性
② Dihedron数组属性
③ Tile方法
④ Cascade方法
9.1.4 变量的作用域能够使用变量的程序段称为变量的作用域。在单元的不同地方定义的变量其作用域是不同的。
【 例 9-4】 编写一个七位号码体彩摇奖程序,程序中有两个窗体,分别如图 9-12和图 9-13所示。程序运行时首先出现图 9-12所示的摇奖窗体,在该窗体上单击 【 摇奖 】 按钮,将不停地产生随机数并填充在七个文本框中,如图 9-14所示。单击 【 停止 】 按钮将停止摇奖,此时在文本框中显示的数就是获奖号码。单击 【 公布 】 按钮将公布获奖号码,如图 9-15所示。在该窗体上单击 【 退出 】 按钮将退出应用程序。
图 9-12 摇奖窗体设计界面 图 9-13 公布摇奖号码窗体设计界面图 9-14 摇奖窗体运行界面 图 9-15 公布摇奖号码窗体运行界面
9.2 典型实例练能力
9.2.1 典型实例一:记事本程序
【 实例题目 】
编写一个记事本应用程序,该程序能够实现文本文件的打开、修改、保存等文件操作,同时该程序还能够实现剪切、复制、粘贴等剪贴板操作。记事本程序的主设计界面如图 9-16所示,主菜单如图 9-17所示。
图 9-16 记事本运行界面图 9-17 主菜单
9.3 上机练习重应用
9.3.1 上机练习一:图片文件查看器
【 练习 题目 】
编写一个能够同时查看多张图片文件的图片文件浏览器,该应用程序是一个 MDI应用程序,由两个窗体组成,一个名为 MDIfileVIEWER的主窗体,一个名为 pictureViewer的子窗体。 MDIfileVIEWER主窗体的设计界面如图 9-18所示,该窗体有一个名为
OpenDialog1的打开对话框组件和一个名为
MainMenu1的菜单组件,菜单的设计情况如图 9-19所示。 pictureViewer窗体的设计界面如图 9-20所示,
该窗体上有一个名为 Image1的图像框组件用来显示打开的图片文件,一个名为 MainMenu1的菜单组件,菜单的设计情况如图 9-21所示。
图 9-18 MDI主窗体设计界面图
9-
19Mai
nMen
u
1
菜单设计情况图 9-20 pictureViewer子窗体设计界面图 9-21 MainMenu1菜单设计情况程序执行时的初始界面如图 9-22所示,打开了若干个图片文件后的运行界面如图 9-23所示。从该运行界面可以看到子窗口的菜单已经融合到了主窗口菜单中。
图 9-22 程序运行初始界面 图 9-23 程序运行初始界面