你可以在CSDN上下载一个程序"狼行成双"侃侃(我做的),还有问题的话给我写信[email protected],大家一起探讨!
解决方案 »
- 100分求用Delphi+WebBrowser取得JavaScript变量问题
- FastReport4中Prontoptions.printOnSheet是做什么用的?
- 周末愉快 散分了 本周6之前揭贴
- 关于搜索文件程序的问题
- 数组筛选问题
- 使用idHttp下载文件(在线等待)
- 数据库表控件问题
- ?delphi6.0如何才能升级为delphi7.0.(怎样才能调试7.0编的程序?)
- delphi中怎么找不到打印报表控件,重新安装也不行,在线等待
- 关于delphi7.0的疑问
- 关于mdi的问题,再加100分,解决问题后一起给分!
- 请问高手,如何将:11111111;22222222打印到2页纸上?
介绍如何通过菜单合并技术使子窗体能够共享主窗体的菜单栏。同样,你也可以从中学习如何使非
M D I应用程序也能共享菜单栏。
16.2.1 用MDI程序合并菜单
请注意一下T M d i E d i t F o r m的主菜单。双击窗体上的T M a i n M e n u组件,将打开菜单编辑器。
T M d i E d i t F o r m的主菜单有三个菜单项,分别是F i l e、E d i t和C h a r a c t e r。这些菜单项都有一个
G r o u p I n d e x属性,从Object Inspector中可以看出它的值。注意,F i l e菜单项的G r o u p I n d e x属性为0,E d i t
和C h a r a c t e r的G r o u p I n d e x属性都为1。
而主窗体的主菜单有两个菜单项,分别是F i l e和Wi n d o w。与T M d i E d i t F o r m一样,T M a i n F o r m的
F i l e菜单的G r o u p I n d e x属性也为0,而Wi n d o w菜单项的G r o u p I n d e x属性为9。
还要注意, T M a i n F o r m的F i l e菜单和T M d i E d i t F o r m的F i l e菜单有不同的子菜单, T M a i n E d i t F o r m的
F i l e菜单比T M a i n F o r m的F i l e菜单含有更多的子菜单项。
G r o u p I n d e x属性的作用主要体现在菜单合并。这意味着,当主窗体打开一个子窗体时,子窗体的
菜单就合并到主窗体的菜单中。G r o u p I n d e x属性决定了菜单项的替换顺序。注意,菜单合并只适用于
菜单栏上的菜单,而不适用于子菜单。
如果子窗体的某个菜单项的G r o u p I n d e x属性与主窗体的某个菜单项的G r o u p I n d e x属性值相同,则
子窗体的菜单项将替代主窗体的菜单项。其他菜单项将按照它们的G r o u p I n d e x属性值的顺序排列。如
果M d i E d i t F o r m是当前活动的窗口,则主窗体上的菜单栏依次显示F i l e、E d i t、C h a r a c t e r和Wi n d o w。注
意,这里的F i l e菜单是T M d i E d i t F o r m的F i l e菜单,因为两个F i l e菜单的G r o p u I n d e x特性值相同,都为0。
因此,T M d i C h i l d F o r m文件菜单替换了T M a i n F o r m文件菜单。这些菜单沿着菜单条的次序( 0、1、1、9 )
直接反映了每个菜单项的G r o u p I n d e x属性的次序。
注意尽管在这里我们不使用它们,但它是你要遵循的导线,这样你的程序可以更好地集成
OLE合并菜单。这些导线在“Borland Delphi Library Reference Guide”中加以介绍。
M D I应用程序中的其他窗体也是一样的。当一个窗体激活时,主窗体上的菜单栏会相应地发生变
化。当运行程序时,菜单栏如何变化取决于哪一个子窗体被激活。
对于M D I应用程序来说,菜单合并是自动的,只要正确设置了菜单项的G r o u p I n d e x属性即可。当
一个子窗体激活时,菜单就能正确地合并。
对于非M D I应用程序来说,菜单合并也不复杂,但需要额外的步骤。第4章“应用程序框架和设
计”中曾经提到一个T N a v S t a t F o r m类。不过,在非M D I应用程序中,需要显式地调用M e rg e ( )和
U n m e rg e ( )。一般来说,非M D I应用程序中合并菜单不是自动的。你必须把T M a i n M e n u的A u t o M e rg e属
性设为Tr u e。