
多文档界面设计.ppt
92页第第6章章 多文档界面设计多文档界面设计²6.1 组件组件²6.2 父窗体的设计父窗体的设计²6.3 子窗体的设计子窗体的设计²6.4 关于窗体设计关于窗体设计²6.5 编写程序代码编写程序代码²6.6 编译运行程序编译运行程序²6.7 小结小结 6.1 组 件 使用的组件主要有以下几个: (1)主菜单栏:用于执行相关操作的命令,在主窗体上使用 (2)工具栏:用于执行常用操作的命令,在主窗体上使用 (3)状态栏:用于显示应用程序执行的状态 (4)TImageList组件:用于修饰菜单和工具栏,把它们设计成图标菜单和图标工具栏 (5)对话框组件:用于特定的目的对话框,包括保存文件对话框、打开文件对话框、颜色对话框和字体对话框等 (6)弹出式菜单:用于在TRichEdit组件中单击鼠标右键 (7)TRichEdit组件:用于编辑文本 (8)TActionList组件:用于关联菜单和工具栏,以尽量达到少编写代码的目的 (9)TTimer组件:用于在状态栏显示系统时间 6.2 父窗体的设计 新建一个项目,将Form1设置为父窗体,即默认时为主窗体。
当运行时此窗体需要最大化显示,下面讲述设置主窗体的属性 6.2.1 窗体窗体Form1属性设置属性设置 窗体Form1属性的主要设置如下: (1)Caption属性:设置标题名为“多文档程序” (2)FormStyle属性:属性值设置为fsMDIForm这是设置父窗体的重要一步 (3)Icon属性:设置标题栏最左侧的图标单击Icon属性选项左侧的 按钮,可以从计算机*.Ico格式的图标中选择一个合适的图标 (4)WindowState属性:属性值设置为wsMaximized,当启动应用程序时,主窗体以最大化形式显示在屏幕中 6.2.2 菜单的设计菜单的设计 双击工具面板上的“TMainMenu”组件,在窗体中显示主菜单的 图标,双击该图标,打开菜单设计器,在菜单设计器中设计菜单菜单设计器如图6.2.1所示 其中,编辑菜单、格式菜单和窗口菜单在其子窗体中设计成动态菜单,即菜单的合并图6.2.1 菜单设计器 设计复选菜单时,在“查看”下拉菜单中,有两个菜单项,即工具栏和状态栏若“工具栏”菜单项为选中“工具栏”状态,则显示工具栏;若“工具栏”菜单项为未选中“工具栏”状态,则不显示工具栏。
最后设计添加TImageList组件,并设置图标,此组件支持的格式有*.Ico和*.bmp把图标添加到菜单中 注意:设计菜单时最好把热键和快捷键也设计在内 6.2.3 工具栏的设计工具栏的设计 添加TCoolBar工具栏,其作用是作为容器存放TToolBar工具栏然后再添加两个TToolBar工具栏,一个用于设计常用工具栏,一个用于设计格式工具栏 1.ToolBar1常用工具栏设计 在常用工具栏中,有“新建”、“打开”、“保存”、“剪切”、“复制”和“粘贴”按钮 (1)用鼠标右键单击ToolBar1工具栏,在弹出的快捷菜单中选择“New Button”命令,即可创建按钮 (2)设置ToolBar1工具栏和ImageList1组件关联 2.ToolBar2格式工具栏设计 在格式工具栏中,有“粗体”、“斜体”、“下画线”、“左对齐”、“居中对齐”和“右对齐”按钮 (1)用鼠标右键单击ToolBar2工具栏,在弹出的快捷菜单中选择“New Button”命令,即可创建按钮 (2)工具栏复选按钮设计其中有加粗、倾斜和下画线按钮要设置为复选按钮设置这组按钮时,Style属性值为tbsCheck。
(3)工具栏单选按钮设计其中有左对齐、居中对齐和右对齐按钮组,设计单选按钮要设置的属性有Grouped属性和Style属性如果全选需要设置单选按钮的按钮组,设置这组按钮的Grouped属性值为true,Style属性值为tbsCheck 工具栏的设置如图6.2.2所示图6.2.2 工具栏的设置6.2.4 状态栏的设计状态栏的设计添加状态栏并划分为4个区域,其作用分别如下:第一个区域:用于设置指向按钮的提示信息第二个区域:用于设置打开的或者保存后的文件是否被修改第三个区域:用于显示系统的日期时间第四个区域:用于显示“欢迎使用多文档程序”语句 6.3 子窗体的设计 设计子窗体,首先新建一个窗体,选择“New”→“VCL Form”命令,即可创建第二个窗体Form2 6.3.1 窗体窗体Form2属性设置属性设置 窗体Form2属性设置如下: (1)FormStyle属性:属性值设置为fsMDIChild (2)Icon属性:用于设置子窗体标题栏左侧的图标 (3)Caption属性:设置为空,可以在打开此窗体时命名 (4)设置Form2在应用程序启动时不自动启动,选择“Project”→“Options”命令,弹出“Project Options for Project1.exe”对话框,将“Auto-create forms”列表框中的Form2移到“Available forms”列表框中,即可实现启动应用程序时不启动Form2,如图6.3.1所示。
图6.3.1 “Project Options for Project1.exe”对话框 6.3.2 Form2菜单设计菜单设计 添加主菜单组件,添加菜单项“编辑”、“格式”和“窗口”,设计主菜单如图6.3.2所示图6.3.2 Form2主菜单 1.菜单合并技术 菜单合并技术是指在主窗体的主菜单不隐藏的基础上直接插入子窗体的主菜单,也可以替换部分或者全部主菜单一般地,不但主窗体上有主菜单,而且子窗体上也自带主菜单当子窗体获得焦点时,需要合并整个应用程序的主菜单和子窗体的主菜单 如果直接运行以上程序,当子窗体获得焦点时,主窗体的主菜单消失,此位置显示子窗体的主菜单,如图6.3.3所示 菜单的合并主要是设置菜单项的GroupIndex属性,默认值为0若不同窗体的菜单的GroupIndex属性值相同,子窗体未被激活时,则显示主窗体的主菜单;如果子窗体被激活,则显示子窗体的主菜单,而不显示主窗体的主菜单如果使两个窗体的主菜单都显示,则只设置子窗体的GroupIndex属性即可图6.3.3 子窗体的主菜单 GroupIndex属性值越小,菜单的位置越靠左主窗体的主菜单中有“文件”、“查看”、“帮助”;子窗体的主菜单中有“编辑”、“格式”、“窗口”。
若设计子窗体获得焦点时显示的菜单为“文件”、“编辑”、“查看”、“格式”、“窗口”、“帮助”,则应设置主窗体中“文件”的GroupIndex属性值为1,“查看”的GroupIndex属性值为3,“帮助”的GroupIndex属性值为6;设置子窗体中“编辑”的GroupIndex属性值为2,“格式”的GroupIndex属性值为4,“窗口”的GroupIndex属性值为5设置完毕,单击“运行”按钮 ,运行界面如图6.3.4所示 2.菜单覆盖技术 有时需要用到菜单覆盖技术,与菜单合并技术原理相似当GroupIndex属性值相同时即可覆盖,如果主窗体中主菜单的“文件”的GroupIndex属性值为1,则子窗体中主菜单“编辑”的GroupIndex属性值也为1运行程序即可完成子窗体的主菜单“编辑”覆盖主窗体的主菜单“文件”图6.3.4 运行界面 6.3.3 TRichEdit组件组件 添加TRichEdit组件,用于编辑文本,它是子窗体中占用面积最大的一个组件 TRichEdit组件属性如下: (1)Align属性:设置此属性值为alClient,使该组件充满菜单以外的剩余空间。
(2)ScrollBar属性:设置此属性值为ssBoth,当文字到达右边界或底边界时,出现水平滚动条或垂直滚动条 6.3.4 TPopupMenu组件组件 添加弹出式菜单,并设计复制、剪切、粘贴、全选菜单,如图6.3.5所示 6.3.5 TActionList组件组件 添加TActionList组件并设置复制、粘贴、剪切、全选选项将ActionList1组件和PopupMenu1组件关联并将ActionList1组件和MainMenu1组件关联 将RichEdit1的PopupMenu属性值设置为PopupMenu1当运行程序时,单击鼠标右键即可弹出快捷菜单图6.3.5 弹出式菜单设计 6.4 关于窗体设计 新建窗体Form3,此窗体只是版本声明之类的对话框,只需要设置属性值 1.窗体Form3属性设置 (1)Caption属性:其属性值设置为“关于多文档程序” (2)BorderStryle属性:其属性值设置为bsDialog (3)Position属性:其属性值设置为poDesktopCenter 2.TImage组件 添加TImage组件,默认名为Image1,选择Image1属性选项卡中的picture属性,添加一幅具有一定意义的图片。
3.TLabel组件 添加组件并设置组件的属性 (1)Caption属性:其属性值设置为“多文档程序1.0版,版权所有(c)拷贝必纠” (2)AutoSize属性:其属性值设置为false (3)WordWrap属性:其属性值设置为true 4.TButton组件 添加组件并设置按钮的属性 (1)Caption属性:其属性值设置为确定 (2)Default属性:其属性值设置为true按钮中的程序代码如下:procedure TForm3.Button1Click(Sender: TObject);begin close;end;设置后的界面如图6.4.1所示图6.4.1 关于多文档程序设计界面 6.5 编写程序代码 界面设计已经完成,下一步是编写程序代码 6.5.1 主窗体的工具栏主窗体的工具栏 添加工具栏中按钮的程序代码 1.“新建”按钮程序代码 (1)完成新建一个子窗体功能,双击“新建”按钮,添加程序代码如下: procedure TForm1.ToolButton1Click(Sender: TObject); begin //由于应用程序未完成自动生成窗体Form2 form2:=tform2.Create(application); form2.Show; //子窗体的标题名 form2.Caption :=‘文档’+inttostr(mdichildcount); end; (2)当鼠标指向“新建”按钮时,在状态栏第一个区域中提示“新建”,完成此功能,其事件和程序代码如下: procedure TForm1.ToolButton1MouseMove(Sender: TObject; Shift: TShiftState;X, Y: Integer); Begin //StatusBar1.Panels[0]指向状态栏的第一区域 StatusBar1.Panels[0].Text:= ‘新建’ end; 2.“打开”按钮程序代码 (1)添加组件TOpenDialog,并双击“打开”按钮,添加程序代码如下: procedure TForm1.ToolButton2Click(Sender: TObject); begin //判断子窗体是否打开 if mdichildcount=0 then ToolButton1.Click; if OpenDialog1.Execute then begin form2.RichEdit1.Lines.LoadFrom); //打开的文件路径赋值给变量 ; end else ;end; 其中,单击“保存”按钮时,要考虑保存路径。
所以设置单元变量代码如下: implementation uses Unit2; uses Unit3; var //保存路径 ; (2)当鼠标指向“打开”按钮时,在状态栏第一个区域中提示“打开”,完成此功能,其事件和程序代码如下: procedure TForm1.ToolButton2MouseMove(Sender: TObject; Shift: TShiftState;X, Y: Integer); begin //状态栏的提示标记信息为打开 StatusBar1.Panels[0].Text:= ‘打开’; end; 3.“保存”按钮程序代码 (1)添加组件TSaveDialog,“保存”按钮程序代码的功能是当用户打开文件时,单击此按钮自动保存到原文件中;当用户新建文件时,单击“保存”按钮,弹出“保存”对话框,用户保存完毕将状态栏上的修改标记清空 程序代码如下: procedure TForm1.ToolButton3Click(Sender: TObject); begin if <>'' then begin form2.RichEdit1.Lines.SaveTo); //状态栏的修改标记 StatusBar1.Panels[1].Text :=‘’; end else begin if SaveDialog1.Execute then begin form2.RichEdit1.Lines.SaveTo); //状态栏的修改标记 StatusBar1.Panels[1].Text :=‘’; end else ; end;end; (2)当鼠标指向“保存”按钮时,在状态栏第一个区域中提示“保存”,完成此功能,其事件和程序代码如下: procedure TForm1.ToolButton3MouseMove(Sender: TObject; Shift: TShiftState;X, Y: Integer); begin //状态栏的提示标记信息为保存 StatusBar1.Panels[0].Text:= ‘保存’; end; 4.“粗体”按钮程序代码 (1)“粗体”按钮的功能是加粗子窗体中RichEdit1选中文字的字体。
程序代码如下: procedure TForm1.ToolButton8Click(Sender: TObject); begin with form2.richedit1.SelAttributes do begin if ToolButton8.Down then Style:=Style+[fsbold] else Style:=Style-[fsbold]; end; end; (2)当鼠标指向“粗体”按钮时,在状态栏第一个区域中提示“粗体”,完成此功能,其事件和程序代码如下: procedure TForm1.ToolButton8MouseMove(Sender: TObject; Shift: TShiftState;X, Y: Integer); begin //状态栏的提示标记信息为粗体 StatusBar1.Panels[0].Text:= ‘粗体’; end; 5.“斜体”按钮程序代码 (1)“斜体”按钮的功能是倾斜子窗体中RichEdit1选中文字的字体。
程序代码如下: procedure TForm1.ToolButton9Click(Sender: TObject); begin with form2.richedit1.SelAttributes do begin if ToolButton9.Down then Style:=Style+[fsItalic] else Style:=Style-[fsItalic]; end; end; (2)当鼠标指向“斜体”按钮时,在状态栏第一个区域中提示“斜体”,完成此功能,其事件和程序代码如下: procedure TForm1.ToolButton9MouseMove(Sender: TObject; Shift: TShiftState;X, Y: Integer); begin //状态栏的提示标记信息为斜体 StatusBar1.Panels[0].Text:= ‘斜体’; end; 6.“下画线”按钮程序代码 (1)“下画线”按钮的功能是给子窗体中RichEdit1选中文字的字体加下画线。
程序代码如下:procedure TForm1.ToolButton10Click(Sender: TObject);begin with form2.richedit1.SelAttributes do begin if ToolButton10.Down then Style:=Style+[fsUnderline] else Style:=Style-[fsUnderline]; end; end; (2)当鼠标指向“下画线”按钮时,在状态栏第一个区域中提示“下画线”,完成此功能,其事件和程序代码如下: procedure TForm1.ToolButton10MouseMove(Sender: TObject; Shift: TShiftState;X, Y: Integer); begin //状态栏的提示标记信息为下画线 StatusBar1.Panels[0].Text:= ‘下画线’; end; 7.“左对齐”按钮程序代码 (1)“左对齐”按钮的功能是设置子窗体中RichEdit1的段落为左对齐。
程序代码如下: procedure TForm1.ToolButton12Click(Sender: TObject); begin //设置左对齐 form2.richedit1.Paragraph.Alignment:=taLeftJustify; end; (2)当鼠标指向“左对齐”按钮时,在状态栏第一个区域中提示“左对齐”,完成此功能,其事件和程序代码如下: procedure TForm1.ToolButton12MouseMove(Sender: TObject; Shift: TShiftState;X, Y: Integer); begin //状态栏的提示标记信息为左对齐 StatusBar1.Panels[0].Text:= ‘左对齐’; end; 8.“居中对齐”按钮程序代码 (1)“居中对齐”按钮的功能是设置子窗体中RichEdit1的段落为居中对齐 程序代码如下: procedure TForm1.ToolButton13Click(Sender: TObject); begin //设置居中对齐 form2.richedit1.Paragraph.Alignment:=taCenter; end; (2)当鼠标指向“居中对齐”按钮时,在状态栏第一个区域中提示“居中对齐”,完成此功能,其事件和程序代码如下: procedure TForm1.ToolButton13MouseMove(Sender: TObject; Shift: TShiftState;X, Y: Integer); begin //状态栏的提示标记信息为居中对齐 StatusBar1.Panels[0].Text:= ‘居中对齐’; end; 9.“右对齐”按钮程序代码 (1)“右对齐”按钮的功能是设置子窗体中RichEdit1的段落为右对齐。
程序代码如下: procedure TForm1.ToolButton14Click(Sender: TObject); begin //设置右对齐 form2.richedit1.Paragraph.Alignment:=taRightJustify; end; (2)当鼠标指向“右对齐”按钮时,在状态栏第一个区域中提示“右对齐”,完成此功能,其事件和程序代码如下: procedure TForm1.ToolButton14MouseMove(Sender: TObject; Shift: TShiftState;X, Y: Integer); begin //状态栏的提示标记信息为右对齐 StatusBar1.Panels[0].Text:= ‘右对齐’; end; 10.复制、剪切、粘贴按钮程序代码 由于复制、剪切、粘贴按钮是关联ActionList组件,所以不需要任何代码即可实现其功能当鼠标指向该按钮时,在状态栏提示复制、剪切、粘贴标记这3个按钮的程序代码如下: procedure TForm1.ToolButton5MouseMove(Sender: TObject; Shift: TShiftState;X, Y: Integer); begin //状态栏的提示标记信息为剪切 StatusBar1.Panels[0].Text:= ‘剪切’; end; procedure TForm1.ToolButton6MouseMove(Sender: TObject; Shift: TShiftState;X, Y: Integer); begin //状态栏的提示标记信息为复制 StatusBar1.Panels[0].Text:= ‘复制’; end; procedure TForm1.ToolButton7MouseMove(Sender: TObject; Shift: TShiftState;X, Y: Integer); begin //状态栏的提示标记信息为粘贴 StatusBar1.Panels[0].Text:= ‘粘贴’; end;6.5.2 主窗体的菜单栏主窗体的菜单栏添加菜单栏中菜单项的程序代码。
1.“文件”下拉菜单(1)“新建”菜单项:完成“新建”按钮的功能程序代码如下:procedure TForm1.N2Click(Sender: TObject);begin toolbutton1.Click ;end;(2)“打开”菜单项:完成“打开”按钮的功能程序代码如下:procedure TForm1.N3Click(Sender: TObject);begin toolbutton2.Click ;end;(3)“保存”菜单项:完成“保存”按钮的功能程序代码如下:procedure TForm1.N4Click(Sender: TObject);begin toolbutton3.Click ;end; (4)“另存为”菜单项:完成重新保存的功能,如果单击保存窗体上的“保存”按钮,弹出“保存”对话框,单击“确定”按钮即可保存,并把状态栏的修改标记变为空;当单击“取消”按钮时,执行空语句 程序代码如下: procedure TForm1.N5Click(Sender: TObject); begin if SaveDialog1.Execute then begin form2.RichEdit1.Lines.SaveTo); //状态栏的修改标记 StatusBar1.Panels[1].Text :=''; end else ;end; (5)“关闭”菜单项:完成关闭子窗体的功能,如果子窗体的个数为0,则不执行语句;否则关闭活动子窗体。
程序代码如下: procedure TForm1.N8Click(Sender: TObject); begin if mdichildcount=0 then else activemdichild.Close; end; 其中,此段语句不能把子窗体关闭,还需要销毁子窗体,需要在子窗体的关闭事件中编写程序,程序代码如下: procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin action:=cafree; end;(6)“退出”菜单项:完成关闭子窗体和主窗体的功能程序代码如下:procedure TForm1.N9Click(Sender: TObject);begin close;end;2.“查看”下拉菜单(1)“工具栏”菜单项:用于显示或隐藏工具栏程序代码如下:procedure TForm1.N20Click(Sender: TObject);begin if n20.Checked then CoolBar1.Visible :=true else CoolBar1.Visible :=false;end;(2)“状态栏”菜单项:用于显示或隐藏状态栏。
程序代码如下:procedure TForm1.N21Click(Sender: TObject);begin if n21.Checked then statusbar1.Visible :=true else statusbar1.Visible :=false;end;3.“帮助”下拉菜单“关于多文档程序”菜单项:用于显示窗体form3程序代码如下:procedure TForm1.N23Click(Sender: TObject);begin form3.show;end; 6.5.3 主窗体的主窗体的Timer组件组件 添加Timer组件,其功能是将系统的时间和日期返回到状态栏的第三个区域 程序代码如下: procedure TForm1.Timer1Timer(Sender: TObject); begin StatusBar1.Panels[2].Text:= formatdatetime(‘“今日是:”dddddd ddd “ 时间:”h“:” n “:”s’,now); end; 6.5.4 主窗体其他事件主窗体其他事件 关于主窗体的其他事件程序代码。
1.关闭询问 当窗体关闭时,若未保存文件,则弹出对话框询问是否保存当用户单击“是”按钮时,保存文档并退出;当用户单击“否”按钮时,不保存文档直接退出;当用户单击“取消”按钮时,关闭询问对话框 程序代码如下: procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); var //保存用户单击按钮的信息 answer:integer; begin //统计是否有子窗体存在 if mdichildcount<>0 then begin if form2.RichEdit1.Modified then begin //弹出询问对话框 answer:=messagedlg(‘文件未保存,是否退出多文档程序?’,mtConfirmation, [mbyes,mbno,mbcancel],0); if answer=mryes then ToolButton3.Click else if answer=mrno then canclose:=true else canclose:=false; end; end;end; 2.状态栏的提示标记信息 用于当鼠标移到主窗体时,状态栏第一个区域的提示。
程序代码如下: procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin //状态栏的提示 StatusBar1.Panels[0].Text :=‘主窗体’; end; 6.5.5 子窗体主菜单子窗体主菜单 子窗体中主菜单的程序代码 1.“格式”下拉菜单 (1)“字体”菜单项:用于设置RichEdit1的字体,添加一个TFontDialog组件 程序代码如下: procedure TForm2.N10Click(Sender: TObject); begin if FontDialog1.Execute then richedit1.Font.Assign(FontDialog1.Font); end; (2)“背景”菜单项:用于设置RichEdit1的背景颜色,添加一个TColorDialog组件 程序代码如下: procedure TForm2.N11Click(Sender: TObject); begin if ColorDialog1.Execute then richedit1.Color :=ColorDialog1.Color; end; 2.“窗口”下拉菜单 此菜单用于设置子窗体的排列方式。
排列方式有层叠、水平平铺、垂直平铺和排列图标 (1)“层叠”菜单项:用于设置多个子窗体为层叠排列方式,只显示子窗体的标题栏,如图6.5.1所示程序代码如下:procedure TForm2.Y1Click(Sender: TObject);begin //层叠 form1.cascade;end;图6.5.1 子窗体为层叠排列方式 (2)“水平平铺”菜单项:使所有打开的子窗体都显示,彼此之间不重叠,界面如图6.5.2所示 程序代码如下: procedure TForm2.Z1Click(Sender: TObject); begin //水平平铺 form1.TileMode :=tbhorizontal; form1.Tile; end; (3)“垂直平铺”菜单项:使打开的子窗体为垂直平铺排列方式图6.5.2 子窗体为水平平铺排列方式程序代码如下:procedure TForm2.H1Click(Sender: TObject);begin //垂直平铺 form1.TileMode :=tbvertical; form1.Tile;end; (4)“排列图标”菜单项:当子窗体最小化时,排列其最小化子窗体的图标,这样可以使最小化的子窗体重新排列。
程序代码如下: procedure TForm2.N6Click(Sender: TObject); begin form1.ArrangeIcons; end; 注意:子窗体的排列是相对父窗体而言的,不是子窗体,因此在语句前面加上Form1 (5)“关闭所有的窗口”菜单项:其功能是关闭所有打开的子窗体 程序代码如下: procedure TForm2.N8Click(Sender: TObject); var i:integer; begin with form1 do begin for i:=MDIChildCount-1 downto 0 do MDIChildren[i].Close; end;end;6.5.6 子窗体的子窗体的RichEdit1组件组件子窗体中RichEdit1组件的代码主要用于一些提示信息 1.状态栏的修改标记 前面已经叙述当保存文件时把状态栏的修改标记变为空,表示保存文件;当RichEdit1中的内容改变时,要把状态栏的修改标记变为“修改”只需要在子窗体的RichEdit1组件的Change事件中编写程序代码。
程序代码如下: procedure TForm2.RichEdit1Change(Sender: TObject);begin //状态栏的修改标记 form1.StatusBar1.Panels[1].Text :=‘修改’;end;2.状态栏的提示标记信息当鼠标移到正文中时,状态栏的提示标记为“正文” 程序代码如下: procedure TForm2.RichEdit1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer); begin //状态栏的修改标记 form1.StatusBar1.Panels[0].Text :=‘正文’; end; 6.6 编译运行程序 程序编写完成后编译成可执行文件,可以脱离Delphi运行实际上在设计程序过程中,当单击“运行”按钮时,Delphi自动编译成可执行文件,保存在项目的文件夹中 6.6.1 设置可执行文件设置可执行文件 应用程序的标题和图标设置,选择“Project”→“Options”命令,弹出“Project Options for Project1.exe”对话框,在左侧树型列表中选择“Application”选项,右侧显示如图6.6.1所示。
在“Title”文本框中输入文字“多文档程序”,即可完成应用程序的标题设置,单击“Load Icon”按钮,选择格式为*.Ico的图标 6.6.2 编译应用程序编译应用程序 按组合键“Ctrl+F9”编译程序,则可执行文件图标变成自定义的图标编译后的可执行文件可以在任意一台装有Windows操作系统的计算机上运行图6.6.1 “Project Options for Project1.exe”对话框 6.7 小 结 本章讲述了一个多文档程序的设计过程从父窗体的创建、父窗体中组件的添加和设置、子窗体的创建、子窗体中组件的添加和设置以及各个组件的代码编写到生成可执行文件,将整个设计过程详细地描述了一遍 制作应用程序时,一般是先设计界面,再编写程序代码,最后编译生成可执行文件 习 题 六一、选择题一、选择题1.下列说法正确的是( ) A.子窗体的排列方式有平铺、层叠和排列图标 B.子窗体的排列方式有层叠、水平平铺、垂直平铺和排列图标 C.子窗体的排列方式有平铺、水平层叠、垂直层叠和排列图标 D.子窗体的排列方式有层叠、水平层叠、垂直层叠和排列图标 2.下列关于菜单的合并,说法正确是( )。
A.在两个窗体不为父子关系时可以合并菜单 B.父窗体中的所有主菜单项都是GroupIndex的属性值为1,运行时只显示最后一个 C.父窗体中有一个菜单项的GroupIndex属性值为1,子窗体中有一个菜单项的GroupIndex属性值也为1,运行时菜单覆盖 D.菜单合并时,GroupIndex属性值越小,菜单的位置越靠右 二、填空题 二、填空题 1.设计添加TImageList组件,并设置图标,此组件支持的格式有______和*.bmp 2.WindowState属性:属性值设置为_________,当启动应用程序时,主窗体以最大化形式显示在屏幕中 三、简答题三、简答题 1.什么是菜单的合并? 2.什么情况下使用菜单的合并? 四、程序设计题 四、程序设计题 1.Form2窗体是Form1窗体的一个子窗体,下面一段程序完成的功能是选择Form2中的Z1命令,将所有的Form2窗体水平平铺,请补充完整此程序 procedure TForm2.Z1Click(Sender: TObject); begin form1.TileMode :=_______; form1._______; end; 2.Form2窗体是Form1窗体的一个子窗体,下面一段程序完成的功能是选择Form2中的N6命令,当子窗体Form2最小化时,排列其最小化子窗体的图标,请补充完整此程序。
procedure TForm2.N6Click(Sender: TObject); begin form1.______; end; 3.下面程序完成的功能是选择N2命令,关闭所有打开的子窗体,请补充完整此程序 procedure TForm2.N8Click(Sender: TObject); var i:integer; begin with form1 do begin for i:=_______ downto 0 do begin MDIChildren[i].Close; end; end;end;。
