版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章多窗体程序设计当程序比较复杂时,往往需要将不同功能的程序模块放置到不同的窗体中以便于管理,由此引出了多窗体程序设计问题。在Delphi系统设计中,多窗体程序有两种形式,一种是由多个Form窗体实现的多窗体程序,窗体与窗体之间彼此没有主从关系;另一种是由多文档(Multiple
Document
Interface,MDI)窗体实现的多窗体程序。6.1多个Form窗体程序设计Delphi系统将程序功能划分为若干子功能模块,每个模块放置在一个窗体中,进入不同窗体可以使用不同的程序功能。6.1.1创建多个窗体当打开Delphi开发系统时,系统自动创建一个Form窗体,其FormStyle属性值默认设
置为fsNormal,表示该窗体是一个普通窗体,与其他窗体之间没有隶属关系。多个Form窗体程序就是在一个程序中使用多个窗体共同实现整个程序的功能。New
Item对话框1.利用菜单生成多窗体(1)执行File→New→Other命令,打开如下图所示的New
Item对话框。(2)选择Form图标,单击“OK”按钮,即可
在当前项目中添加一个名称为Form2的窗体,
该窗体与Form1窗体在功能与特性上完全一致。通过这样的方法,可以在项目中添加多个Form窗体。提示:也可执行File→New→Form命令,直接向当前项目添加一个新的窗体。2.利用代码创建多窗体为了提高程序的灵活性,可以利用Create方法在项目中动态地添加窗体,其语法格式如下:对象:=对象类.Create(Self);其中,对象表示通过Create方法生成的新的对象,该对象由给定的对象类生成。【例6-1】通过代码创建一个与当前窗体相同的窗体,并指定新窗体的名称与标题。procedure
TForm1.FormClick(Sender:
TObject);varForm2:
TForm1;beginForm2:=TForm1.Create(self);Form2.Caption:="创建的窗口Form2";Form2.Width:=480;Form2.Height
:=
300;Form2.Show;end;程序运行效果如图6-2所示。【例6-1】程序运行效果提示:使用Create方法生成的新窗体功能与原有窗体功能相同,单击新窗体,也可以再创建一个新窗体。6.1.2窗体操作创建好多个窗体后,可以显示、隐藏、关闭某个或全部窗体。1)显示窗体可以使用Show方法和ShowModel函数来显示某个窗体,它们的格式分别如下:窗体名.Show;窗体名.ShowModal;Show方法与ShowModal函数的区别时,
使用Show方法显示窗体称为非模式显示,可以在窗体之间任意切换;使用ShowModal函数显示窗体称为模式显示,只能显示指定的窗体,不能切换到其他窗体。2)隐藏窗体当显示一个窗体后,如果暂时不需要访问该窗体,可以使用Hide方法将该窗体隐藏起来,当需要访问时再显示出来。Hide方法的格式如下:窗体名.Hide;提示:将暂时不使用的窗体隐藏起来,可以提高程序运行的效率。【例6-2】编写程序,在一个窗体中控制另一个窗体的显示与隐藏状态。操作步骤如下:执行File→New→Form命令,在当前项目中添加一个新的窗体Form2,其属性值均取默认值。在Form1窗体中添加2个Button组件,将
Caption属性分别设置为“显示Form2”和“隐藏Form2”。执行File→Use
Unit命令,弹出UseUnit,如下图所示。选中Unit2单元,单击OK按钮,在Form1窗体中声明Form2窗体。Use
Unit对话框(4)为“显示Form2”按钮的onclick事件添加如下代码,控制Form2窗体的显示。procedure
TForm1.Button1Click(Sender:
TObject);beginForm2.Show;end;(5)为“隐藏Form2”按钮的onclick事件添加如下代码,控制Form2窗体的隐藏。procedure
TForm1.Button2Click(Sender:
TObject);beginForm2.Hide;end;3)关闭窗体当确定窗体不再使用后,应关闭窗体,从而释放该窗体占用的资源。在Delphi系统中,通常有两种关闭窗体的形式。一种方式是单击关闭按钮,另一种是使用Close方法来关闭窗体,其格式如下:窗体名.Close;提示:当关闭窗体时,由该窗体派生出的所有窗体也一同关闭。6.1.3多个窗体间的数据传递在多窗体程序中,各个窗体之间需要交换信息,在Delphi程序设计中通常使用公共变量来共享数据。在Delphi系统中,公共变量通常定义在程序单元中的接口变量处(Interface),在此处定义好变量后,其他窗体程序都可以通过引用的方式来调用这些变量。为了更好地管理公共变量,用户往往在程序设计过程中创建一个独立的Unit单元,用以定义所有的公共变量,供其它程序单元使用。下面给出定义公共变量的具体步骤。执行File→New→Unit命令,在当前项目中添加一个Unit程序单元,然后执行File→Save
As命令,将其重命名为CommUnit.pas文件并保存。在CommUnit单元中按如下格式定义变量。unit
CommUnit;interface变量定义;implementationend.(3)当某个程序单元需要使用公共变量时,执
行File→Use
Unit命令,在Use
Unit对话框中选择
CommUnit单元,单击Ok按钮即可。下面通过实例介绍如何使用公共变量在窗体之间传递传递数据。【例6-3】设计一个成绩录入系统,其包含一个“控制程序”主窗体、一个“录入成绩”主窗体和一个“计算成绩”窗体。通过主窗体可以打开各个窗体以及退出程序。“录入程序”窗体用于录入语文、数学和外语课程的成绩,录入完毕后可返回主窗体。“计算成绩”窗体用于计算总成绩与平均成绩,同样也可以返回主窗体。操作步骤如下:(1)在Form1窗体中添加3个Button组件,设计如下图(a)所示的程序界面。(2)执行Form→New→Form命令,在当前项
目中添加一个窗体,设计窗体的界面如下图(b)所示。(a)“控制程序”主窗体(b)“录入成绩”窗体(c)“计算成绩”窗体执行Form→New→Form命令,在当前项目添加一个窗体,设计界面如上图(c)所示。执行File→New→Unit命令,在当前项目添加一个Unit单元,执行如下代码,在单元中声明公共变量。unit
CommUnit;interfacevarchinese,
math,english
:integer;total,average:integer;implementationend.执行File→Save
As命令,将该Unit单元命名为CommonUnit.pas并保存。选中“控制程序”窗体,执行File→Use
Unit命令,在打开的Use
Unit对话框中选中Unit2单元,然后单击OK按钮,完成对Unit2单元的引用操作。(7)为“录入成绩”按钮的onclick事件添加如下代码,实现单击“录入成绩”按钮时打开
“录入成绩”窗体。procedure
TForm1.Button1Click(Sender:
TObject);beginForm2.ShowModal;end;(8)为“计算成绩”按钮的onclick事件添加如下代码,实现单击“计算成绩”按钮时能打开“计算成绩”窗体。procedure
TForm1.Button2Click(Sender:
TObject);beginForm3.ShowModal;end;(9)为“退出系统”按钮的onclick事件添加如下代码,关闭程序。procedure
TForm1.Button3Click(Sender:
TObject);beginForm1.Close;end;(10)选中“录入成绩”窗体,执行File→UseUnit命令,在Use
Unit对话框中选择CommUnit单元。选中“返回”按钮,在其onclick事件中添加如下代码,实现录入数据并返回控制窗体的功能。procedure
TForm2.Button1Click(Sender:
TObject);beginchinese
:=
StrToInt(Edit1.Text);math
:=
StrToInt(Edit2.Text);english
:=
StrToInt(Edit3.Text);Form2.Close;end;(11)选中“计算成绩”窗体,执行File→UseUnit命令,在Use
Unit对话框中选择中
CommUnit单元。在该窗体的OnCreate事件中添加如下代码:procedure
TForm3.FormShow(Sender:
TObject);beginEdit1.Text
:=IntToStr(Chinese
+
math
+
english);Edit2.Text
:=
FloatToStr((Chinese
+
math
+
english)
/
3);end;(12)为“返回”按钮的onclick事件添加如下代码,关闭“计算成绩”窗体并返回控制窗体。procedure
TForm3.Button1Click(Sender:
TObject);beginForm3.Close;end;6.2多文档程序设计上一节介绍了使用多个Form窗体进行多窗体程序的设计的方法。本节将着重介绍使用多文档(Multiple
Document
Interface,MDI)窗体进行程序设计的方法。在多文档程序中,每个程序界面与相关程序称作一个文档,一个窗体可以有多个文档,可以在各个文档之间切换和传输数据。6.2.1创建多个窗体多文档程序中有两种类型的窗体,分别是父窗体和子窗体。父窗体父窗体是程序的基础,一个多文档程序只能有一个父窗体,所有的子窗体必须在父窗体中运行且受父窗体的控制,任何子窗体都不能超出父窗体的范围。关闭父窗体时,其所有的子窗体同时被关闭。子窗体一个多文档程序中可以有多个子窗体。可以在子窗体中添加组件,使其成为与程序进行交互的对象。在多文档程序中,所有的子窗体都隶属于一个父窗体,由父窗体控制,子窗体与父窗体共同实现程序的功能。6.2.2创建多个窗体在多文档程序中,由父窗体统一管理所有的子窗体,如创建子窗体、获取当前活动子窗体的信息、与子窗体交换信息和关闭子窗体等。1.创建多文档程序建立多文档程序的方法很简单。由于一个多文档程序中一定有一个父窗体和至少一个子窗体,所以可以通过下面的步骤创建一个简单的多文档程序。(1)选中需要设置为父窗体的Form窗体,将其FormStyle属性值设置为fsMDIForm。(2)执行File→New→Form命令,在当前项目中添加一个窗体Form2,将Form2窗体的FormStyle属性设置为fsChild,表示将其设置为子窗体。至此,完成多文档程序界面的设置,当程序执行时,可以得到下图所示界面。MDI应用程序界面2.创建子窗体如果希望多文档程序启动时仅显示父窗体,由用户决定何时打开子窗体,以及打开多少个子窗体,则需要通过代码来控制子窗体的打开。一般,先在父窗体中添加菜单和工具栏,然后通过菜单或工具栏中的“新建”命令来新建一个子窗体。【例6-4】创建一个MDI应用程序,在父窗体中通过“新建”菜单来新建一个子窗体。操作步骤如下:(1)将当前Form窗体的FormStyle属性值设置为fsMDIForm。在当前窗体中添加一个MainMenu组件,在该组件中添加一个“新建”菜单,并将窗体的MainMenu属性设置为MainMenu组件。执行File→New→Form命令,在当前项目中添加一个窗体Form2,将Form2窗体的
FormStyle属性设置为fsMDIChild。执行View→Units命令或按Ctrl+F12快捷键,打开View
Unit对话框。在对话框中选中Project1项目(如下图(b)所示),单击OK按钮,在打开的代码编辑器中
添加Project单元的代码,然后将代码中创建子窗体的代码设置为注释,如下图(a)所示。MDI应用程序界面
MDI应用程序界面说明:将Project1单元代码中创建子窗体的代码设置为注释,可以使程序执行时只打开父窗体而不会打开子窗体。(5)执行File→Use
Unit命令,在弹出的UseUnit对话框中选则子窗体对应的代码单元Unit2,单击OK按钮,即可在父窗体中使用子窗体。(6)选中MainMenu组件中的“新建”菜单,
为其onclick事件添加如下代码,实现创建子窗体的功能。procedure
TForm1.N1Click(Sender:
TObject);beginApplication.CreateForm(TForm2,Form2);end;程序运行效果如下同所示。【例6-4】程序运行效果3.管理子窗体多文档程序中可以存在多个子窗体,为了更好地管理子窗体,Delphi系统为子窗体定义了多个参数。1)MDIChildCount属性在父窗体中,可以访问MDIChildCount属性值来获得子窗体的数目,其格式如下:Count:=主窗体.MDIChildCount;2)MDIChildren数组在创建子窗体时,系统会自动将该窗体作为数组元素保存在MDIChildren数组中。因此,父窗体可以通过下面的语句来访问子窗体:父窗体.MDIChildren[i];该语句表示访问父窗体中的第i+1个子窗体。例如,要将TForm2父窗体中的所有子窗体的Label属性设置为This
is
a
test,可以使用下面的语句:For
i
:=
1
to
MDIChildCount
doTForm2(MDIChildren[
i
-
1]).Label.Caption
:=
‘This
is
atest’;3)ActiveMDIChild属性在多文档程序中,只能有一个子窗体为当前活动窗体,将某个子窗体设置为当前活动子窗体的语法格式如下:父窗体.ActiveMDIChild下面通过实例介绍如何在父窗体中控制子窗体。【例6-5】编写多文档程序,在子窗体中创建
RichEdit组件,在父窗体中利用“当前窗口”菜单项来设置当前子窗体中文本的字体,使用“全部窗口”菜单项来设置所有子窗体中文本的字体。操作步骤如下:按照【例6-5】介绍的方法建立一个父窗体Form1和一个子窗体Form2。向Form1窗体添加一个FontDialog组件和一个MainMenu组件。设计父窗体菜单如下图所示,并将Form1窗体中的MainMenu属性设置为MainMenu组件的名称。设计父窗体的菜单(4)执行【例6-4】中的步骤(4)~(6)。(5)为“当前窗口”菜单项的onclick事件添加如下代码,设置当前窗体中RichEdit组件中文本的字体。procedure
TForm1.N3Click(Sender:
TObject);beginFontDialog1.Execute;TForm2(ActiveMDIChild).RichEdit1.Font
:=FontDialog1.Font;end;(6)为“全部窗口”菜单项的onclick事件添加如下代码,设置所有子窗体中RichEdit组件中字体的工作。procedure
TForm1.N4Click(Sender:
TObject);va
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业自动化中的智能优化算法考核试卷
- 人事行政培训职业道德与职业操守考核试卷
- 公司合并与收购的财务税务考虑考核试卷
- 森林改培与城市森林绿化考核试卷
- 梨花绘画课件教学课件
- DB11T 714.2-2010 电子政务运维服务支撑系统规范 第2部分:符合性测试
- 负反馈课件教学课件
- 食堂员工培训计划方案
- 《过秦论》培训课件
- 业务人员法律知识培训
- 江西省萍乡市2024-2025学年高二上学期期中考试地理试题
- 2023年贵州黔东南州州直机关遴选公务员考试真题
- 黑龙江省龙东地区2024-2025学年高二上学期阶段测试(二)(期中) 英语 含答案
- 4S店展厅改造装修合同
- 送货简易合同范本(2篇)
- 全国职业院校技能大赛赛项规程(高职)智能财税
- 七年级上册音乐教案 人音版
- 某小区住宅楼工程施工组织设计方案
- 3-4单元测试-2024-2025学年统编版语文六年级上册
- 2024年新青岛版六年级上册(六三制)科学全册知识点
- 小学数学计算专项训练之乘法分配律(提公因数)
评论
0/150
提交评论