登陆注册
36209800000019

第19章 菜单设计(2)

用户在应用程序菜单设计中,可以不加修改地使用模板中的菜单,或者将模板中的菜单略加修改,设计出满足自己需求的菜单系统。

另外,Delphi也允许用户将自己设计的菜单加入到菜单模板中,以备用户在今后的菜单设计中使用。

本节介绍在菜单设计中使用菜单模板的方法。

7.3.1插入菜单模板

用户在自己设计菜单时插入菜单模板的方法如下:

(1)在窗体中加入主菜单组件MainMenu;(2)双击MainMenu组件,打开主菜单设计器,如图7-1所示;(3)用鼠标右键单击要插入菜单模板的空白菜单项,弹出如图7-8所示的快捷菜单;(4)执行【InsertFromTemplate】菜单命令,打开【InsertTemplate】对话框,如图7-11所示,其中列出了前面所说的几种菜单模板;(5)从列表中选择需要的菜单模板(假如第一个主菜单项处插入【FileMenu(forTextEditExample)】菜单模板),然后单击【OK】按钮,所选的菜单模板插入到指定位置,如图7-12所示;(6)若需要,可对菜单模板加以修改。

7.3.2创建新的菜单模板

用户用自己设计的菜单创建新的菜单模板的方法如下:

(1)在窗体中加入主菜单组件MainMenu;

(2)双击MainMenu组件,打开主菜单设计器,如图7-1所示;

(3)用7.2节介绍的方法,按照自己的要求设计菜单;

(4)用鼠标右键单击设计好的菜单,弹出如图7-8所示的快捷菜单;(5)执行【SaveAsTemplate】菜单命令,打开【SaveTemplate】对话框,如图7-13所示。

(6)在对话框的【TemplateDescription】编辑框中输入新建的菜单模板的名称,然后单击【OK】按钮,新创建的菜单成为模板菜单。再打开菜单模板对话框时,可以看到新创建的菜单模板出现在模板列表中,可以像使用系统提供的菜单模板一样使用新的模板。

7.3.3删除菜单模板

对于不需要的菜单模板可以删除。删除菜单模板的方法如下:

(1)打开主菜单设计器;

(2)用鼠标右键单击主菜单设计器,弹出如图7-8所示的快捷菜单;

(3)执行【DeleteTemplates】菜单命令,打开【DeleteTemplates】对话框,如图7-14所示;

(4)在对话框的菜单模板列表中,选择要删除的菜单模板,然后单击【OK】按钮,选择的菜单模板被删除。

7.4动态设置菜单

以上介绍的菜单设计,是在程序设计阶段进行的。程序运行时,菜单就按设计的样式进行工作。然而在实际应用中,往往需要菜单在程序运行过程中呈现不同的状态,这是在程序运行中改变菜单项的某些属性值实现的,即所谓动态设置菜单。

动态设置菜单包括改变菜单项的可用性、改变菜单项的可见性、改变菜单项的标题、设定单选菜单项、为菜单项设置复选标记、动态创建菜单项等。

7.4.1改变菜单项的可用性

程序运行中,有时需要改变某些菜单项的可用性,即菜单项并不消失,而只是变为不可用,即看到的菜单项变灰。

菜单项的可用性是由菜单项的Enabled属性决定的。该属性为布尔型属性,若属性值为True,则菜单项可用;否则,不可用。因此,若要在程序运行中改变某菜单项的可用性,只需改变它的Enabled属性值即可。

假设,图7-15中【窗口】主菜单项的Name属性为“NWindow”,若要改变其可用性,用如下语句:

NWindow.Enabled:=NotNWindow.Enabled;

若该菜单项原来为可用,执行该语句则变为不可用;若原为不可用,执行该语句则变为可用。

【窗口】主菜单项经改变可用性后变灰,如图7-15所示。

7.4.2改变菜单项的可见性

改变菜单项的可见性,是将菜单项隐藏,使用户根本看不到该菜单项,避免其吸引用户的注意。

菜单项的可见性是由菜单项的Visible属性决定的。该属性为布尔型属性,若属性值为True,则菜单项可见;否则,不可见。因此,若要在程序运行中改变某菜单项的可见性,只需改变它的Visible属性值即可。

仍以图7-15中的【窗口】主菜单项为例,若要改变其可见性,用如下语句:

NWindow.Visible:=NotNWindow.Visible;若该菜单项原来为可见,执行该语句则变为不可见;若原为不可见,执行该语句则变为可见。

【窗口】主菜单项被隐藏后,如图7-16所示。

7.4.3改变菜单项的标题

改变菜单项的标题,是指根据程序运行的情况使菜单项显示不同的标题。

菜单项的标题是由菜单项的Caption属性决定的。所以,要改变菜单项的标题,只需改变菜单项的Caption属性值即可。

7.4.4设定单选菜单项

单选菜单项,是指一组菜单项是相互排斥的,用户只能在这组菜单项中选择一个菜单项。

设定单选菜单项必须具备以下两个条件。

(1)这一组菜单项必须在同一个菜单下,而且它们的GroupIndex属性值必须相同。菜单项的GroupIndex属性决定菜单项在菜单中的位置,为直接输入型属性,其默认值为0。

(2)它们的RadioItem属性值都为True。菜单项的RadioItem属性决定菜单项是否允许显示单选标记,为布尔型属性,其默认值为False。

这样,当设定这组菜单项中某个菜单项的Checked属性值为True时,该菜单项的前面加注单选标记(一个小圆点),而组中其他菜单项的Checked属性值自动变为False。因此,在程序运行时,设置组中菜单项的Checked属性值,就可以设定单选菜单项。

7.4.5设置菜单项的复选标记

用于状态设置的菜单项,当设置了该状态时,菜单项前面加注一个对勾标记,这就是菜单项的复选标记;而状态设置取消时,对勾消失。

菜单项的复选标记,是由其Checked属性决定的。该属性是布尔型属性。若其属性值为True时,则菜单项前加注对勾;否则,对勾消失。因此,在程序运行时,改变菜单项的Checked属性值,就可以设置菜单项的复选标记。

7.4.6动态创建菜单项

在Delphi中,菜单项都是TmenuItem类的对象。菜单栏的各主菜单项存储在主菜单组件(MainMenu)的Items属性中。利用菜单项的方法对菜单项进行操作,可以实现程序运行中创建菜单项,即动态创建菜单项的目的。

Remove方法与Delete方法都是删除指定的菜单项,不同的是Delete用序号指定删除的菜单项,而Remove直接指定菜单项。

下面通过一个简单的例子,了解这些方法的使用。

7.5快捷菜单设计

快捷菜单的设计方法同主菜单的设计基本相同,而且前面介绍的主菜单设计中的一些技术也基本适用于快捷菜单的设计。快捷菜单设计要用快捷菜单设计器,而快捷菜单设计器是由PopupMenu组件启动的。

PopupMenu组件位于组件模板的【Standard】选项卡上,其图标为。

7.5.1快捷菜单的创建

创建快捷菜单的步骤如下:

(1)将PopupMenu组件放置到窗体上;

(2)双击PopupMenu组件,打开快捷菜单设计器,如图7-17所示;

(3)用创建主菜单的菜单项的方法创建快捷菜单的菜单项及其子菜单;

(4)为使用该快捷菜单的对象设置PopupMenu属性,这是和主菜单设计不同的地方。

快捷菜单是右击某个对象而弹出的菜单,右击的这个对象就是使用这个快捷菜单的。要使快捷菜单正常工作,必须将快捷菜单和使用这个快捷菜单的对象联系起来,否则右击对象是不会弹出快捷菜单的。要做到这一点,必须设置该对象的PopupMenu属性,要将其属性值设置为快捷菜单的Name属性值(其默认值为PopupMenu1、PopupMenu2等)。

假设为窗体Form1设计的快捷菜单的Name属性值为PopupMenu1,则窗体Form1的PopupMenu属性值应设置为快捷菜单的Name属性值PopupMenu1。这样,程序运行时,右击窗体Form1,会弹出设计的快捷菜单PopupMenu1。

7.5.2快捷菜单的响应

同主菜单的设计一样,快捷菜单创建完成后,要为各菜单项添加OnClick事件并编写事件处理代码。

除此以外,快捷菜单还有一个特殊的问题:快捷菜单弹出位置的方式设定。当右击使用快捷菜单的对象时,快捷菜单有两种弹出位置的方式:一种是自动在鼠标指针位置弹出,称为自动方式;另一种是由用户设定弹出位置,称为手动方式。

快捷菜单弹出位置的方式由PopupMenu组件的AutoPopup属性决定。该属性为布尔型属性,若属性值为True,则为自动方式;否则,为手动方式。其默认值为True。

若选用手动方式,要先将PopupMenu组件的AutoPopup属性值设为True,然后给窗体添加OnMouseDown事件,在该事件处理代码中调用函数Popup(X,Y)定义快捷菜单在显示器屏幕上弹出的位置。

假设,为一个窗体Form1设计的快捷菜单为PopupMenu1。设定PopupMenu1的AutoPopup属性值为False;激活窗体,在对象检查器的事件选项卡中找到OnMouseDown事件,双击事件名栏,激活代码编辑器窗口;在窗口的OnMouseDown事件处理过程中输入如下代码:

其中Button=mbRight表示右击鼠标;X、Y为正整数,是显示器屏幕的坐标,若对窗体定位,可用(Form1.Left+X,Form1.Top+Y)的形式,表示快捷菜单弹出位置相对于窗体左上角的坐标为(X,Y)。

主菜单设计中使用的其他一些技术,如菜单项分组、快捷键和热键的定义、子菜单的创建、菜单项的编辑、菜单模板的使用等,同样适用于快捷菜单的设计,这里不再重复。

习题7

1.主菜单和快捷菜单有什么不同?

2.说明用MainMenu组件设计主菜单的步骤。

设计一个窗口的主菜单,包含【文件】、【编辑】、【工具】和【帮助】4个主菜单项,【文件】主菜单项的下拉菜单中有【新建】、【打开】两个菜单项,而【新建】菜单项带子菜单,包含【单元】和【窗体】两个菜单项。单击【窗体】菜单项,创建一个标题为“新建窗体”的窗体。

3.菜单命令的快捷键和热键的区别是什么?如何设置菜单命令的快捷键和热键?

4.在菜单设计中,如何将菜单项分组?

5.动态菜单包含哪些内容?各如何实现?

6.快捷菜单的设计与主菜单的设计的主要区别是什么?

7.如何使用菜单模板设计菜单?使用菜单模板重新设计习题2中的【文件】主菜单项。

同类推荐
  • 纵横于天地之间——互联网络技术

    纵横于天地之间——互联网络技术

    本书告诉你:不管你是谁,只要生活在当前的时代,你一定知道电话,知道电脑,知道上网……知道许许多多关于电子、关于计算机、关于网络的话题,这就是网络时代。网络的话题可多了:它是怎么来的?什么是“蜘蛛网”?网络的过去和现在,上网的方法,如何使用网络,互联网的安全,网络有“陷阱”吗?网络有“瘾”吗?网络文化和未来又是怎样的?到书中去找答案吧!
  • 三维动画审美谈

    三维动画审美谈

    数字时代,美的标准充满更多的不确定性。而三维动画以数字图像形式成为这个图时代的代表。三维动画及三维图像不仅仅是由于应用了仿真数字图像技术而带来的虚拟空间,还有更多的是由三维图像技术所引发或引导的被扩展的图像技术,这些技术无不应用在现代视觉设计领域的各个方面,并且,由此引起社会的追热,引起审美观念的改变。这些改变是在进行中的,变化中的,也是在发展中的。对于未知的美,我们做的只是追寻和记录,我们不知道以后的美将会是什么样,尽管我们苦苦追寻,孜孜探讨,同时也在默默审视。我们在追寻中享受美,在探讨中认知美,在审视中体验美……
  • 天下一家:网络联通世界(科学新导向丛书)

    天下一家:网络联通世界(科学新导向丛书)

    《天下一家:网络联通世界》一书从网络的基本知识出发,详细地介绍了网络科技的发展与用途,还包括校园网络对普及教育的重大作用。本书内容翔实、结构清晰、图文并茂,是一本实用性极强的网上冲浪参考书。
  • 云计算和现代远程教育

    云计算和现代远程教育

    本书介绍了云计算知识、云计算的特性、云计算技术、云计算中的访问云、云计算中的云存储、云计算在远程教育中的应用等内容。
  • 中国3D打印的未来

    中国3D打印的未来

    自2012年以来,有关3D打印的报道屡见报端,这一新型制造技术引起了全世界的广泛关注。《中国3D打印的未来》作者、中国3D打印技术产业联盟秘书长罗军认为,中国从20世纪90年代初开始涉足3D打印技术,并取得了巨大进展,但与国外同行相比仍存在一定差距。特别是中国3D打印企业普遍存在“小而散”、各自为政的现象,如何发挥整合优势、抱团发展是目前亟需解决的问题。如果能够加强同行合作,抱团发展,形成合力,相信3D打印会成为唯一一项中国有可能赶超世界先进水平的技术。
热门推荐
  • 末日重来

    末日重来

    简介:公元2015年5月23日凌晨0:00天降异象,红光凌空,全世界的人类有一半变异成为丧尸,主角刘锋在末世前重生归来,带着女友与兄弟开启了末日征途,寻父母,建基地,对抗异兽,寻找末世真正的原因(本书较少YY,但是生活内容丰富,主角也在不断变强,敬请期待!)
  • 恋爱种子

    恋爱种子

    学霸鹿莹跟转学生凌冉初次见面则是仇人相见,可经过时间的洗刷让他们重新的认识了对方……
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 惹爱成婚:腹黑首席太迷人

    惹爱成婚:腹黑首席太迷人

    “我才十九岁!我不嫁!”她委屈愤怒。他们相差十六岁,他是站在食物链最顶端的男人,想嫁给他的女人多如过江之鲤,可她不想攀附权贵,更不愿意做他的第四任妻子。“你下个月就二十了。”婶婶说:“你嫁过去之后,什么都不用愁,有什么不好的?你还挑三捡四,端什么大小姐架子?”“既然这么好,你怎么不让你女儿嫁过去。”她被激怒了强硬的回绝道。“关于婚礼的事,秘书会跟你联系。”他对她说,他不明白,为什么母亲偏偏点名让自己娶她,一个毫无姿色、身材可谈,甚至连家庭背景也是惨淡无光的女人。女人?他心底发出冷冷的笑声,面前这位,像是发育不全,怕还称不上女人吧。
  • 战天妖魔

    战天妖魔

    人、魔、鬼、妖、仙、佛、圣、共存天地万域之中。天道大昌,魔道无影,仙道飘渺,鬼道殊途,唯我妖道至尊,但亦唯妖道最难存亡。少年自茫茫妖山中走来,脚踏万千血尸,身随十万徒众,我辈皆是妖徒!谁能屠光抹尽!这是一名身份华贵的灵妖踏天袭来的故事......
  • 星宫皇殿之公主白羊宫

    星宫皇殿之公主白羊宫

    她是六国混血,她母亲是印度贵族公主,外公是政治商界的领头人,爷爷是法国皇室统领者,父亲是全球排名前三的日氏企业董事长。她是法国皇室的唯一一位公主——格蕾丝公主。她擅长八国语言,她是英国、日本皇室等最满意的小公主。她和各国的总统和皇室打成一片,成为“好哥们”级别。但她并不满足这种生活,她想过平凡人的生活,于是她隐姓埋名,接受爷爷的安排,来到了落樱贵族学院,在这里结识了她人生的第一个好朋友,也改变了她这一生。
  • 神奇宝贝遮云

    神奇宝贝遮云

    在遥远的异世界,生活着一种神奇的生物——神奇宝贝,它们和人们和谐相处,和人类成为朋友,伙伴。但是,也免不了产生战争,各大神兽全部战斗之时,就是世纪战争。而在这战争后,一个蓝色瞳孔的少年——龙露,开始了他的旅程
  • 有趣的中国诗人

    有趣的中国诗人

    本书精选我国古代十位著名诗人,包括屈原、李白、杜甫、白居易等,讲述了他们落魄的生涯——或为官被贬,或归隐山中独善其身。
  • 老龙借运

    老龙借运

    一百年前,祖上李文举在老龙山借了一份气运,让后代子孙在六十年内大福显贵。六十年后,却厄运连连子孙断绝。传至我这一代,二叔苦修道术十年以命换命,保住我一个人,得名李传一。因为老龙借气,有借有还,六十年一轮回。
  • tfboys的旅程

    tfboys的旅程

    有三个女孩,她们分别遇到了自己喜欢的人,在爱情的过程中,她们体会了酸甜苦辣