第9章-菜单、工具栏和状态栏_第1页
第9章-菜单、工具栏和状态栏_第2页
第9章-菜单、工具栏和状态栏_第3页
第9章-菜单、工具栏和状态栏_第4页
第9章-菜单、工具栏和状态栏_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章菜单、工具栏和状态栏目录9.1菜单9.1.1下拉式菜单组件MainMenu9.1.2弹出式菜单组件PopupMenu9.1.3在菜单中添加小图标19.2工具栏组件ToolBar29.3状态栏组件StatusBar39.4小结4在Windows程序设计中,菜单、工具栏和状态栏是应用程序重要的界面元素。菜单、工具栏和状态栏可以使得程序操作更加方便,界面更加美观、友好。9.1菜单在Delphi中菜单分为下拉式菜单和弹出式菜单,使用MainMenu组件很方便制作出下拉式菜单,使用PopUpMenu组件也可以方便地制作出弹出式菜单。通过单击主菜单即可显示出下拉式菜单,而弹出式菜单则可以通过鼠标右键单击某个组件或者区域显示出来。如图9-1左边是下拉式菜单、右边为弹出是菜单。图9-1下拉式菜单和弹出式菜单9.1.1下拉式菜单组件MainMenuMainMenu下拉式菜单的菜单项保存在Items属性中,Items属性是MainMenu的内部对象。通过菜单设计器可以设计菜单的Items属性,添加菜单项。MainMenu组件在Standard组件面板中。1.菜单设计器在窗体上添加MainMenu组件后,双击MainMenu组件,显示菜单设计器。或者鼠标右键单击MainMenu组件,选择“MenuDesigner…”也可以进入菜单设计器。如图9-2右边所示即为菜单设计器。图9-2“ObjectInspector”对话框与菜单设计器在菜单设计过程中,选择某个菜单项,则在“ObjectInspector”对话框中显示的就是该菜单项所对应的的属性。如图9-2所示,在右边菜单设计器中选择“打开”菜单项,则“ObjectInspector”对话框中显示的就是该菜单项的属性,如“打开”菜单项的Name属性是N3,Caption属性是“打开”。菜单设计器有如下一些操作:(1)添加菜单项:一个菜单项设计完之后,自动在其后出现一个虚线框(如图9-2“粘贴”菜单的下面就是这种虚框),表示新添加的菜单项,如果用户想添加新菜单项,用户可以直接设计之。(2)移动菜单项:用鼠标将要移动的菜单项直接拖动到目的位置即可。(3)插入菜单项:用鼠标右键单击菜单项,选择“Insert”可以完成菜单项的插入操作。(4)删除当前菜单项:选中某菜单,直接按“Delete”键即可。(5)创建子菜单项:选中菜单执行弹出式菜单中的“CreateSubMenu”菜单。菜单的属性:(1)Caption属性和Name属性:用于设置菜单的标题,如图9-2所示的“文件”、“新建”等。Name属性默认值一般为n1、n2、n3等等。下面示例给出了Caption的一些用法,例如:n2.Caption:='新建';//菜单标题是新建,n2是新建菜单的Name属性n3.Caption:='打开[&O]';//设置标题和加速键,按Alt+O等价与单击“打开”n4.Caption:='-';//设置菜单的分隔,用于分隔不同性质的菜单,这样更条理(2)Visible属性:设置菜单是否可见,可以将菜单项设置为可见和不可见,还可以将菜单的子菜单设置为可见和不可见。例如:假设n1是“文件”菜单的Name属性,n3是“打开”菜单的Name属性。n1.Visible:=False;//“文件”菜单不显示,其下的“新建”、“打开”等菜单也不显示n3.Visible:=False;//“打开”菜单不显示(3)Enabled属性:菜单是否有效。例如:假设n1是“文件”菜单的Name属性,n3是“打开”菜单的Name属性。n3.Enabled:=False;//“打开”菜单无效n1.Enabled:=False;//整个“文件”菜单无效说明:无效的菜单,无法用加速键或者快捷键访问。(4)ShortCut属性:用于设置菜单的快捷键。(5)Checked属性和AutoCheck属性:Checked属性用于设置菜单复选状态,值为True时,菜单旁边显示符号“√”。AutoCheck属性用于设置菜单是否自动改变Checked属性值,当AutoCheck属性值为True时,单击菜单项,该菜单项的Checked属性值自动改变,否则需要用代码来改变。例如:假设n1、n2、n3、n4分别表示“字体”、“粗体”、“斜体”和“下划线”菜单的Name属性。其中n1是顶层菜单。n2的AutoCheck属性值为False,n3的AutoCheck属性值为True。n2.Checked:=notn2.Checked;//该语句用于改变n2的Checked,单击n2菜单项,它的Checked属性值不断改变。//n3菜单不需要编写代码,每次单击n3,n3的Checked属性值能自动改变。(6)RadioItem属性和GroupIndex属性:用于设置单选菜单项,值为true时表示该菜单为单选菜单项。如果多个菜单的RadioItem属性都是True,且它们的GroupIndex(整型,取值范围0~255)相同,则这些菜单项是一组单选菜单,任何时刻仅可以选择其中一个菜单项。2.下拉菜单应用【例9-1】设置一个编辑器,该编辑器可以打开、保存、新建文件,还可以编辑文件、设计字体。分析:本章主要讲授菜单知识,因此对文件的新建、打开、保存等不做讲解。本题将讲授菜单的有效,单选菜单、复选菜单、加速键、菜单代码编写等等。步骤如下:(1)在窗体上添加下拉菜单组件MainMenu1、添加打开对话框OpenDialog1、添加保存对话框SaveDialog1、添加多格式编辑框RichEdit1。(2)设置菜单菜单项如图9-3所示。其中“文件”、“新建”、“打开”、“保存”、分隔线和“退出”分别为n1、n2、n3、n4、n5和n6。“编辑”、“复制”、“剪切”、“删除”和“粘贴”的Name属性分别为n7、n8、n9、n10和n11。“字体”、“粗体”一直到“隶书”的Name属性分别为n12~n20。设置各个菜单的加速键,此处省略。(3)设置RichEdit组件的Align属性为alClient,调整这些组件的大小和位置,如图9-3所示。图9-3编辑器界面及其菜单项(4)设置“粗体”和“斜体”为复选菜单,方法是设置n13和n14的AutoCheck为False。编写粗体和斜体的代码如下:procedureTForm1.N13Click(Sender:TObject);beginn13.Checked:=notn13.Checked;//每次单击粗体均要改变粗体的Checked属性值

ifn13.Checkedthenrichedit1.SelAttributes.Style:=richedit1.SelAttributes.Style+[fsbold]else

richedit1.SelAttributes.Style:=richedit1.SelAttributes.Style-[fsbold]end;procedureTForm1.N14Click(Sender:TObject);beginn14.Checked:=notn14.Checked;//每次单击粗体均要改变斜体的Checked属性值ifn14.Checkedthenrichedit1.SelAttributes.Style:=richedit1.SelAttributes.Style+[fsitalic]elserichedit1.SelAttributes.Style:=richedit1.SelAttributes.Style-[fsitalic]end;分析:由于n13和n14的AutoCheck属性为False,因此单击粗体和斜体,菜单的Checked属性值不会自动改变,因此需要使用语句来改变n13和n14的Checked属性值。显然,如果将n13和n14的AutoCheck属性设置为True,则上面的程序可以写成:procedureTForm1.N13Click(Sender:TObject);beginifn13.Checkedthenrichedit1.SelAttributes.Style:=richedit1.SelAttributes.Style+[fsbold]elserichedit1.SelAttributes.Style:=richedit1.SelAttributes.Style-[fsbold]end;procedureTForm1.N14Click(Sender:TObject);beginifn14.Checkedthenrichedit1.SelAttributes.Style:=richedit1.SelAttributes.Style+[fsitalic]elserichedit1.SelAttributes.Style:=richedit1.SelAttributes.Style-[fsitalic]end;(5)设置“10号”、“20号”、“宋体”和“隶书”为单选菜单。关于AutoCheck属性,这里不再赘述,为了使程序更加简洁将这4个菜单项的AutoCheck属性都设置为True。将这4个菜单的RaidoItem属性设置为True,表示这4个菜单是单选菜单。由于“10号”和“20号”是一组,故将“10号”和“20号”的RaidoIndex设置为0(RaidoIndex相同的为一组),将另外一组菜单“宋体”和“隶书”的RaidoIndex都设置为1。编写者4个菜单的代码,如下:procedureTForm1.N16Click(Sender:TObject);beginifn16.Checkedthenrichedit1.SelAttributes.Size:=10end;procedureTForm1.N17Click(Sender:TObject);beginifn17.Checkedthenrichedit1.SelAttributes.Size:=20end;procedureTForm1.N19Click(Sender:TObject);beginifn19.Checkedthenrichedit1.SelAttributes.Name:='宋体'end;procedureTForm1.N20Click(Sender:TObject);beginifn20.Checkedthenrichedit1.SelAttributes.Name:='隶书'end;(6)编写RichEdit1的OnSelectionChange事件过程,如下:procedureTForm1.RichEdit1SelectionChange(Sender:TObject);beginifrichedit1.SelLength>0thenbeginn8.Enabled:=true;//如果有选定文字,则设置“复制”、“剪切”和“删除”有效

n9.Enabled:=true;n10.Enabled:=trueendelsebeginn8.Enabled:=false;n9.Enabled:=false;n10.Enabled:=falseend;iffsboldinrichedit1.SelAttributes.Stylethen

n13.Checked:=true//选定文字是粗体,则设置n13的Checked为Trueelsen13.Checked:=false;iffsitalicinrichedit1.SelAttributes.Stylethenn14.Checked:=trueelsen14.Checked:=false;ifrichedit1.SelAttributes.Size=10thenn16.Checked:=true;ifrichedit1.SelAttributes.Size=20thenn17.Checked:=true;//选定“20号”,则“10号”的Checked属性自动变为Falseifrichedit1.SelAttributes.Name='宋体'thenn19.Checked:=true;ifrichedit1.SelAttributes.Name='隶书'thenn20.Checked:=true;end;说明:该过程的作用是根据选定文字的状态设置菜单的状态。“文件”、“编辑”类菜单的代码请读者自己完成。3.菜单模板我们可以像使用模具一样使用菜单模板来设计自己的菜单,也可以把自己设计的菜单保存为菜单模板,供下次使用。(1)添加系统菜单在自己的菜单中添加系统菜单模板,使得设计菜单更加方便、快捷。鼠标右键单击菜单项选择“InsertFromTemplate”可以将系统中的菜单添加到自己的菜单中,如“File”、“Edit”、“Window”、“Help”等等。(2)将自己的菜单保存为菜单模板鼠标右键单击菜单,选择“SaveAsTemplate”可以将自己设计的菜单保存为模板,以供下次使用。同样可以使用“DeleteTemplate”删除不用的菜单模板。9.1.2弹出式菜单组件PopupMenu弹出式菜单与下拉式菜单类似。弹出式菜单是为某个组件设计的,只有在某个组件上单击鼠标右键才可以显示该菜单,因此必须将弹出式菜单与某个组件关联起来。方法是将弹出式菜单作为该组件的PopupMenu属性值。9.1.3在菜单中添加小图标在菜单中添加图标,可以使得菜单更加美观、形象。如图9-4所示为添加了图标的菜单。在菜单中添加图标需要使用到另外一个组件ImageList。图9-4在菜单中添加图标.ImageList组件ImageList组件的作用是装载图像,ImageList中的图像可以供其他组件如菜单、工具栏等使用,ImageList组件在Standard组件面板中。双击ImageList组件,激活ImageList编辑器,如图9-5所示。图9-5ImageList编辑器使用“Add”、“Delete”、“Clear”按钮,分别向ImageList中添加图像、删除图像或者清空全部图像。2.ImageList组件的使用ImageList的作用是为其他组件提供图像,我们以菜单为例讲述ImageList组件的使用方法。(1)整个菜单与ImagList组件关联设置菜单组件MainMenu1的Images属性为ImageList1。使整个菜单与ImageList组件ImageList1关联。(2)设置菜单项与ImageList中的图像关联设置某个菜单项的ImageIndex值,则ImageList中的图像可以显示在该菜单项中。第1个图像的ImageIndex值为0,-1表示在菜单项中不使用图标。其他组件与ImageList关联的方法与此类似。9.2工具栏组件ToolBar在Delphi中工具栏是很重要的界面元素。一般把那些经常使用的菜单做成工具栏,使得用户操作更加方便快捷。工具栏如图9-6所示。使用Delphi可以制作出水准很高的工具栏。在Delphi中既可以使用SpeedButton制作工具栏,也可以使用ToolBar组件制作工具栏。SpeedButton制作工具栏请读者自己完成。本节将介绍使用ToolBar制作工具栏。图9-6可以拖放和停靠的工具栏ToolBar组件位于Win32组件面板上,它带有自己的按钮ToolButton,设置属性可以将按钮设计成各种不同的风格。1.ToolBar工具栏和ToolButton按钮添加ToolBar到窗体上,鼠标右键单击ToolBar,选择“NewButton”或者“NewSeparator”可以创建ToolBar按钮。按钮ToolButton的属性如下:(1)Style属性:用于设置按钮的样式。按钮的样式有如下一些取值:tbsButton:一般的按钮。tbsCheck:具有复选框功能的按钮;也可以与其它按钮一起形成一组单选按钮。tbsDropDown:此类按钮单击可以弹出下拉菜单,下拉菜单由DropdownMenu属性指定。tbsDivider:分隔符,有一竖线。tbsSeparator:分隔符,只留空位,没有竖线。鼠标右键单击ToolBar选择“NewSeparator”产生此类分隔符。(2)Caption属性:按钮的标题文字。(3)Down属性:按钮是否按下,值为True表示按钮被按下,否则按钮为抬起状。(4)ImageIndex属性:按钮图标的序号,按钮图标来自ImageList。在ToolBar中设置Images属性,可以设置ImageList。(5)Grouped属性:值为True时按钮可与其它按钮形成一组单选按钮。在该组按钮中仅可以有一个按钮被按下。(6)DropdownMenu属性:决定按钮的下拉菜单。按钮ToolButton的属性用于控制按钮的外观等属性,而工具栏ToolBar的属性则用于控制整个工具栏的外观样式,其属性如下:(1)Align属性:工具栏的位置,例如值为alTop表示工具栏在窗体顶部。(2)Flat属性:值为True表示按钮的平面样式,否则按钮是立体样式。(3)Images属性:设置ImageList,为ToolButton提供图标。(4)ShowCaption属性:值为True时在ToolButton上显示Caption,否则不显示Caption。2.ToolBar工具栏的应用【例9-2】利用ToolBar制作一个工具栏,用于设置标签的字体。步骤如下:(1)在窗体上添加ToolBar工具栏组件ToolBar1、标签Label1、弹出式菜单PopupMenu1、图像列标组件IamgeList1共4个组件。(2)在PopupMenu1中添加3个Caption分别为“10号”、“20号”和“30号”的菜单项n1、n2和n3。并把这3个菜单项设置为单选菜单,操作方法此处省略。在ImageList1中添加图标两个,如图9-6右图所示。(3)设置ToolBar1的属性,参见表9-1。表9-1ToolBar1的属性

(4)为ToolBar1添加6个按钮。设置这些按钮的属性,属性参见表9-2。表9-2各个按钮的属性设置图9-7程序设计界面和ImageList组件对话框至此,程序界面如图9-7左所示。(5)编写代码如下:procedureTForm1.ToolButton1Click(Sender:TObject);beginlabel1.Font.Name:='宋体'end;procedureTForm1.ToolButton2Click(Sender:TObject);beginlabel1.F:='隶书'end;procedureTForm1.ToolButton4Click(Sender:TObject);beginiftoolbutton4.Downthenlabel1.Font.Style:=label1.Font.Style+[fsitalic]elselabel1.Font.Style:=label1.Font.Style-[fsitalic]end;procedureTForm1.ToolButton5Click(Sender:TObject);beginiftoolbutton5.Downthenlabel1.Font.Style:=label1.Font.Style+[fsunderline]elselabel1.Font.Style:=label1.Font.Style-[fsunderline]end;procedureTForm1.n1Click(Sender:TObject);beginlabel1.Font.Size:=10end;procedureTForm1.n2Click(Sender:TObject);beginlabel1.Font.Size:=20end;procedureTForm1.n3Click(Sender:TObject);beginlabel1.Font.Size:=30end;(6)按F9键运行程序,运行结果如图9-8岁示。图9-8程序运行结果(6)按F9键运行程序,运行结果如图9-8岁示。3.利用CoolBar组件和ToolBar组件制作工具栏CoolBar组件是一个容器组件,可以在CoolBar中添加多个单元格,每个单元格可以用来存放其它组件,例如存放工具栏。CoolBar组件在Win32组件面板中。鼠标右键单击CoolBar组件,选择菜单“BandsEditor…”,出现“EditingCoolBar1.Bands”对话框,在这里可以添加单元格。鼠标右键单击“EditingCoolBar1.Bands”空白处选择“Add”可以为CoolBar添加单元格。如图9-9就是添加了两个单元格的CoolBar。图9-9CoolBar组件CoolBar组件的常用属性如下:(1)AutoSize属性:单元格是否自动调节大小适应单元格中的组件。(2)DockSite属性:是否可以停靠其它组件,值为True时间,可以接受停靠。单元格的常用属性如下:(1)Control属性:单元格中存放的组件,例如可以是工具栏。(2)Text属性:单元格的文字。【例9-3】利用CoolBar组件和CoolBar组件制作专业级的工具栏。步骤如下:(1)添加ToolBar组件。在窗体上添加ToolBar组件ToolBar1、ToolBar2和图像列表组件ImageList1。在ToolBar1中添加3个按钮,在ToolBar2中添加4个按钮。在ImageList1中添加7个图标。设置ToolBar1、ToolBar2和这些按钮的属性(此处省略)。设置属性后的界面如图9-10所示。(2)添加CoolBar组件。在窗体上添加CoolBar组件CoolBar1。鼠标右键单击CoolBar1空白处,选择菜单“BandsEditor…”,出现“EditingCoolBar1.Bands”对话框。鼠标右键单击“EditingCoolBar1.Bands”对话框空白处,选择“Add”为CoolBar添加两个单元格。界面如图9-11所示。(3)将ToolBar加入CoolBar单元格。设置CoolBar1第0单元格的Control属性为ToolBar1,设置CoolBar1第1单元格的Control属性为ToolBar1。将CoolBar1的Autosize设置为True。此时界面如图9-12左所示。图9-12加入CoolBar中的工具栏以及运行效果(4)实现拖放和停靠的功能,实现拖放和停靠功能,必须设置三个重要的属性,很多组件都有这三个属性,读者应该举一反三。设置ToolBar1和ToolBar2的DragKind为dkDock。表示ToolBar1和ToolBar2可以拖放。并设置ToolBar1和ToolBar2的DragMode为Automatic。表示使用鼠标自动拖放,无需使用代码。拖放后的工具栏如图9-13左所示。设置CoolBar1的DockSite属性为True,表示CoolBar可以停靠。停靠后的界面如图9-13右所示。图9-13可以拖放和停靠的工具栏(5)工具栏拖出来后,可以点击关闭按钮关闭掉,此时执行语句ToolBar1.Visible:=true可以将工具栏再次显示出来。说明:本程序主要讲述工具栏的制作,因此代码编写本程序没有涉及到。另外很多组件都有DragMode、DockSite和DragKind属性,请读者举一反三。9.3状态栏组件StatusBar和菜单、工具栏一样,状态栏也是Delphi中重要的界面元素。菜单和工具栏主要进行输入操作。而状态栏主要进行输出操作,用户根据状态栏的“状态”可以了解到程序执行情况。状态栏组件在Win32组件面板中。StatusBar有两种结构:单面板和多面板,由属性SimplePanel属性决定。SimplePanel属性值为True时是单面板,否则是多面板。1.单面板当StatusBar的SimplePanel属性值为true时,状态栏是单面板,状态栏的文本内容由SimpleText属性决定。2.多面板当StatusBar的SimplePanel属性值为false时,状态栏是多面板。多面板的每格都有自己的属性。可以使用EditingStatusbar1.Panels编辑器编辑状态栏的子面板(格)。双击StatusBar组件打开EditingStatusbar1.Panels编辑器。鼠标右键单击空白处选择“Add”添加状态栏的子面板(格)。如图9-14所示是添加了3个子面板的状态栏。图9-14添加了3格的状态栏以及其属性设置使用编辑器上面提供的工具栏按钮,可以实现子面板的编辑功能。AddNew按钮:用于添加子面板。DeleteSelect按钮:删除所选择的子面板。MoveSelectedUp按钮:将所选按钮向上移动。MoveSelectedDown按钮:将所选按钮向下移动。3.状态栏的应用【例9-4】为例题【例9-2】制作状态栏。步骤如下:(1)在窗体上添加状态栏。为状态栏添加4个子面板,添加一个计时器组件Timer1。(2)为子面板设置Text属性值,分别为“字体:”、“字形:”、“大小:”和“时间:”,设置每个子面板的宽度分别为60、100、90、80,如图9-15所示。图9-15为例题【例9-2】制作状态栏(3)编写程序,如下:procedureTForm1.ToolButton1Click(Sender:TObject);beginlabel1.Font.Name:='宋体';statusbar1.Panels[0].Text:='字体:宋体';//第1格end;procedureTForm1.ToolButton2Click(Sender:TObject);beginlabel1.F:='隶书';statusbar1.Panels[0].Text:='字体:隶书';end;procedureTForm1.ToolButton4Click(Sender:TObject);beginiftoolbutton4.Downthenlabel1.Font.Style:=label1.Font.Style+[fsitalic]elselabel1.Font.Style:=label1.Font.Style-[fsitalic];if(fsitalicinlabel1.Font.Style)and(fsunderlineinlabel1.Font.Style)thenstatusbar1.Panels[1].Text:='字形:斜体,下划线'//第2格

thenstatusbar1.Panels[1].Text:='字形:斜体'thenstatusbar1.Panels[1].Text:='字形:下划线'elsestatusbar1.Panels[1].Text:='字形:'end;procedure

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论