登陆注册
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中的【文件】主菜单项。

同类推荐
  • 智能计算方法概论

    智能计算方法概论

    本书以智能计算领域的若干前沿技术为主线,内容包括数字水印技术在版权保护区和身份认证中的应用,量子算法在信号处理、图像处理中的应用,量子数据挖掘技术,小波方法在医学图像处理中的应用等。
  • 三维动画审美谈

    三维动画审美谈

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

    高校校园网管理与网上引导工作研究

    在当今的信息化潮流之下,我们不可否认互联网的出现,绝不仅仅是传送手段的变化,更重要的是它代表着一种新的社会形态——网络社会的来临。互联网已经以一种前所未有的方式渗透到现代社会的各个层面和领域,成为现代社会前进和发展的动力和工具,它推动了社会经济、文化政治实现所谓的“数字化转变”。
  • 创业在微软

    创业在微软

    身处软件巨擘微软之中,何来“创业”二字?本书详尽勾勒了微软亚洲工程院(ATC)的成长历程,披露了工程院人在“创业”过程中不为人知的种种酸甜苦辣,生动展现了工程院的独特文化,并从另一个角度展现了其领袖人物张宏江博士的心路历程和管理思想。
热门推荐
  • 快穿之甜甜懒仙儿

    快穿之甜甜懒仙儿

    月洁光是天上的懒仙儿~,八百年不带动一下。一直喜欢她的星君流急了。这…这怎么追??于是乎~月洁光在睡觉的时候迷迷糊糊,感觉有人踹了她一脚。醒来的时候便看见了一个傻乎乎的团子。迫不得已,只好前往三千小世界完成任务。……“姐姐~怎么不跑了呢?” …… “朕以江山为聘…娶你。” …… 当仙儿遇上可可爱爱的星君会怎么样呢?
  • 玄生幻死

    玄生幻死

    生死轮回永不停歇,每个人在这不公平的世界上所做的一切都是对的,因为他们都想过让自己或他人得以越加完美,也只有这样才能尽量地帮助这个世界,使之不会一错再错!在不同的玄幻世界里,我们的心却是一样的,生死之间的那一场梦也一定是一样的吧?
  • 海贼之爆炸艺术

    海贼之爆炸艺术

    一个普通人,穿越到海贼世界,成为了拥有超人系·爆炸果实的鼻屎男Mr.5。弱肉强食,物竞天择;想要活着,就必须不折手断!一切痛苦,皆可找到根源;弱小就是罪,仅此而已!注:时间线就是渣,大家无视就好!剧毒,请慎重!完结:【海贼:厌世之歌】新书:海贼之银狐大将请大家多支持,十分感谢!
  • 驱魔协警

    驱魔协警

    我叫胡麒麟,是个实打实的屌丝,二流大学毕业的我找不到工作,只有去警局当个实习民警,却不料,我的灵异生涯就从这个点展开了,千年九尾狐,百年女尸,黑白双煞,神秘人,尽在《驱魔协警》。
  • 长剑如歌:剑指天下

    长剑如歌:剑指天下

    一纸诏令,她孤身,家人被株连九族。一桩阴谋,她归来,要求血债血偿。一道圣旨,他废后,将她打入冷宫。“假若你想要,我就为你征战天下。”她笑,笑容之中不知有几分真,几分假。万人长安,飞雪漫天,他终于君临天下。她为他打下了万里江山,最终得到的却是他的一句“你走吧”。然而,当那风华绝代的女子枯骨一堆时,他只愿为她血染江山如画,独自祭奠。
  • TFBOYS爱你就要爱到底

    TFBOYS爱你就要爱到底

    青春的爱情,有时痛苦有时甜蜜,魅力十足的三位男神与貌美如花的三位公主的娃娃亲会使他们变的再也不那么纯洁了,敬请期待············
  • 公主求生法则

    公主求生法则

    天下残恒断壁,狼烟四起,郊野白白骨露野,马革裹尸,百姓数米而炊,饿殍遍野那个草木皆兵风声鹤唳的时候,元姝言没了栖身之所,莫名成为了长公主,有人护着她,护她安乐世道乱了贼子当道满目疮痍有人挟天子以令诸侯,有人自封为王,对她最好的那个人死了,她无依无靠,乱世之时……
  • 乜世

    乜世

    玄幻力著——《乜世》千万年的传说,亘古不变的圣战,杀戮之门已经打开,血红色的翅膀将再一次张开,把整个天地笼罩。拔剑斩天云,声如虹乐,问鼎天下,何人能敌?
  • 傅先生他貌美如花

    傅先生他貌美如花

    五年前的一纸离婚让林锦樗丢下儿子前夫远走高飞前往国外学习。五年后前夫带着软糯儿子再度出现在她面前。从此过上了,她照顾儿子,前夫照顾她的生活。离婚一时爽,可是傅先生他真美貌!
  • 别说不再见

    别说不再见

    你遇见的你想念的你爱的,敌不过对你好的。