菜单设计器
Delphi 提供了两种菜单设计器,分别用于设计主菜单和快捷菜单。
1. MainMenu 设计器——主菜单设计器
MainMenu 设计器用于设计下拉式主菜单,这种类型的菜单最常见,图 4.1 所示就是下 拉式主菜单。利用 MainMenu 设计器,能方便地完成设计主菜单栏、菜单命令并创建级联 菜单等一系列功能。
图 4.1 主菜单结构
2. PopupMenu 设计器——快捷菜单设计器
PopupMenu 设计器用于设计弹出式快捷菜单。通常情况下,右击鼠标打开的就是快捷菜 单。例如,图 4.2 所示就是在 Windows 资源管理器文件窗口中右击鼠标时打开的快捷菜单。
图 4.2 快捷菜单结构
4.2
4.3 菜单命令响应
图 4.7 级联菜单
主菜单对应于 TMainMenu 类,而每一项菜单和菜单命令都对应于 TMenuItem 类。这
些 TMenuItem 类都有自己的事件,用以响应各菜单命令。 下面通过例程来说明如何对菜单命令进行响应。
【例 4.1】 给例 3.3 添加菜单。
1) 打开例 3.3 应用程序
启动Delphi,从【File】菜单中选取【Reopen】命令,从中选择例 3.3 的应用文件 Project3_3。 或选取【Open Project】命令,从对话框中选择例 3.3 的应用文件 Project3_3,见图 3.7。
2) 创建菜单
创建如表 4-1 所示的菜单。
表 4-1 菜单及菜单命令
菜 单 |
菜单命令 |
级联命令 |
属 性 |
属 性 值 |
属 性 |
属 性 值 |
【选项】 |
|
|
Caption |
选项(&O) |
Name |
Option |
|
【颜色】 |
|
Caption |
颜色(&C) |
Name |
OptionColor |
|
|
|
ShortCut |
Ctrl O |
|
|
|
【字体】 |
|
Caption |
字体(&F) |
Name |
OptionFont |
|
|
|
ShortCut |
Ctrl F |
|
|
|
【对齐】 |
|
Caption |
对齐(&A) |
Name |
OptionAlign |
(续)
菜 单 |
菜单命令 |
级联命令 |
属 性 |
属 性 值 |
属 性 |
属 性 值 |
|
|
【左对齐】 |
Caption |
左对齐(&L) |
Name |
OptionAlignLeft |
|
|
|
ShortCut |
Ctrl L |
|
|
|
|
【居中】 |
Caption |
居 中(&C) |
Name |
OptionAlignCenter |
|
|
|
ShortCut |
Ctrl C |
|
|
|
|
【右对齐】 |
Caption |
右对齐(&R) |
Name |
OptionAlignRight |
|
|
|
ShortCut |
Ctrl R |
|
|
|
【隐藏】 |
|
Caption |
隐藏 |
Name |
OptionHide |
【帮助】 |
|
|
Caption |
帮助(&H) |
Name |
Help |
|
【关于】 |
|
Caption |
关于(&A) |
Name |
HelpAbout |
3) 添加事件
为菜单命令添加的事件如表 4-2 所示。
表 4-2 菜单命令的事件
菜 单 命 令 |
组 件 |
事 件 |
事件响应函数 |
【颜色】 |
OptionColor |
OnClick |
Button1Click |
【字体】 |
OptionFont |
OnClick |
Button2Click |
【左对齐】 |
OptionAlignLeft |
OnClick |
OptionAlignLeftClick |
【居中】 |
OptionAlignCenter |
OnClick |
OptionAlignCenterClick |
【右对齐】 |
OptionAlignRight |
OnClick |
OptionAlignRightClick |
4) 编写事件响应代码
【颜色】命令用于打开【颜色】对话框:ColorDialog1,然后将从【颜色】对话框中选 定的颜色作为文本 Memo1 的背景颜色,其 OnClick 事件与【颜色】按钮相同,所以可直接 引用 Button1Click 的响应代码,方法如下:
打开菜单设计器,选择【颜色】菜单命令,在 Object Inspector(对象查看器)窗口中的
Events 选项卡中,在 OnClick 旁的下拉列表中选择 Button1Click。 对于功能相同的事件,建议采用事件引用,这样做,一方面可以减小程序代码的冗余;
另一方面,一旦需要修改程序,只要修改被引用的地方即可。
【字体】命令用于打开【字体】对话框:FontDialog1,然后将从【字体】对话框中选 定的字体设置给文本 Memo1,其 OnClick 事件功能同【字体】按钮,可直接引用 Button2
Click。
【左对齐】命令用于将文本 Memo1 的文本左对齐,其 OnClick 事件的响应代码如下:
procedure TForm1.OptionAlignLeftClick(Sender: TObject);
begin Memo1.Alignment:=taLeftJustify; OptionAlignLeft.Checked:=True; OptionAlignRight.Checked:=False; OptionAlignCenter.Checked:=False;
RadioGroup1.ItemIndex:=0;
end;
【居中】命令用于将文本 Memo1 的文本居中对齐,其 OnClick 事件的响应代码如下:
procedure TForm1.OptionAlignCenterClick(Sender: TObject);
begin Memo1.Alignment:=taCenter; OptionAlignLeft.Checked:=False; OptionAlignRight.Checked:=False; OptionAlignCenter.Checked:=True; RadioGroup1.ItemIndex:=1;
end;
【右对齐】命令用于将文本 Memo1 的文本右对齐,其 OnClick 事件的响应代码如下:
procedure TForm1.OptionAlignRightClick(Sender: TObject);
begin Memo1.Alignment:=taRightJustify; OptionAlignLeft.Checked:=False; OptionAlignRight.Checked:=True; OptionAlignCenter.Checked:=False; RadioGroup1.ItemIndex:=2;
end;
5) 保存程序 将单元文件另存为“Unit4_1.pas”,将项目文件另存为“Project4_1.dpr”。
6) 编译运行程序 单击工具栏上的【Run】按钮即可运行程序。运行后,单击【选项】菜单的【颜色】
命令,可设置文本的颜色;单击【字体】命令,可设置文本的字体;而单击【左对齐】、
【居中】、【右对齐】命令,则可调整文本的对齐方式,如图 4.8 所示。
图 4.9 显示了将字体设置楷体、加粗、三号,颜色为红色,对齐方式为居中时的效果。
图 4.8 加入菜单后的窗口 图 4.9 响应菜单命令
4.4 运行时设置菜单
在应用程序运行时,可以进行一系列的操作来调整菜单结构和外观。如给菜单命令添 加单选或复选标记、将菜单命令灰显、隐藏等。
通常,有 5 种属性可用于应用程序运行时设置菜单。
(1) Checked 属性:可用于在运行时给菜单命令添加复选标记。 (2) RadioItem 属性:可用于在运行时给菜单命令添加单选标记。 (3) Enabled 属性:可用于在运行时将菜单命令灰显。
(4) Caption 属性:可用于在运行时调整菜单命令的文本。 (5) Visible 属性:可用于在运行时隐藏菜单命令。 下面介绍如何实现上述目的。并通过例 4.2 描述实现方法。
4.4.1 菜单命令灰显
当我们在进行菜单操作时,有时要求某项菜单或菜单命令项不能被用户操作,就把该 菜单或菜单命令项用灰色显示,用户对它的操作不会有任何响应。
菜单命令项灰显可以通过设置菜单命令项的 Enabled 属性来实现,当该属性为 True 时, 菜单命令项有响应;当该属性为 False 时,菜单命令项灰显,不响应鼠标和键盘操作。
【例 4.2(1)】 沿用上一节的例程 4.1,要求单击【隐藏】命令后,【帮助】菜单灰显,不 能再使用,再次单击【隐藏】命令,【帮助】菜单又恢复。
首先为【隐藏】命令(Name 属性为 OptionHide)添加 OnClick 事件,事件响应过程为
OptionHideClick。然后为该过程添加如下代码。
procedure TForm1.OptionHideClick(Sender: TObject);
begin
Help.Enabled:=Not Help.Enabled;
end;
这样,就可实现上述目的,其效果如图 4.10 所示。
4.4.2 隐藏菜单命令
菜单或菜单命令灰显是为了让用户不能对它操作,但是由于
它的可见性,总会吸引用户的注意,所以有时需要将菜单或菜单 命令项隐藏起来。这可利用菜单命令的 Visible 属性来实现,当该 属性为 True 时菜单命令可见;属性为 False 时,则该菜单命令被 隐藏。
【例 4.2(2)】将例 4.2(1)中的 OptionHideClick 过程的代码修改为
如下形式。
图 4.10 菜单命令灰显
procedure TForm1.OptionHideClick(Sender: TObject);
begin
Help.Visible:=Not Help.Visible;
end;
这样,就可以通过单击【隐藏】命令来控制【帮助】菜单的 显示和隐藏。图 4.11 显示了【帮助】菜单被隐藏的效果。
图 4.11 隐藏菜单命令
4.4.3 改变菜单命令文本
在运行程序时,可以让菜单命令根据运行的情况来调整菜单命令的文本内容,这主要 通过菜单命令的 Caption 属性来实现。
【例 4.2(3)】 在例 4.2(1)中,希望隐藏【帮助】菜单后,将【隐藏】命令改为【显示】命 令,这时可将 OptionHideClick 过程的代码修改为如下形式。
procedure TForm1.OptionHideClick(Sender: TObject);
begin
Help.Visible:=Not Help.Visible;
if Help.Visible then
OptionHide.Caption:='隐藏'
else
OptionHide.Caption:='显示'
end;
图 4.12 显示了修改菜单命令文本的效果。
4.4.4 菜单命令单选标记
所谓单选菜单命令就是一组相互排斥的菜单命令,用户只能
在该组命令中选择一个。
图 4.12 修改菜单命令文本
设计单选菜单命令,必须保证两个条件:首先这一组菜单命令位于同一个下拉菜单或 同一个级联菜单中,而且它们的 GroupIndex 属性必须相同;其次 RadioItem 属性都是 True。 这样,唯一被选中的菜单命令前面就出现一个圆点标记,表示该菜单命令被选中。菜单命 令的 Checked 属性为 True 时,就添加单选标记;为 False 时,取消单选标记。
【例 4.2(4)】 沿用例 4.2(1),将【左对齐】、【居中】和【右对齐】菜单命令的 GroupIndex
属性值都设置为 2,将 RadioItem 都设置为 True,则运行时选中 3 个菜单命令中的任一个, 该命令前都会出现一个单选标记,如图 4.13 所示。
图 4.13 单选标记
4.4.5 菜单命令复选标记
复选标记是指当用户选中某个菜单命令时,系统会在该菜单命令前添加一个复选标记 “√”。复选标记常用于一些状态设置的菜单命令,如果取消选中,则“√”标记消失。
设置复选标记很简单,只要把菜单命令的 Checked 属性设置为 True,该菜单项就有复 选标记,Checked 属性为 False 时,没有复选标记。
【例 4.2(5)】 在例 4.2(1)中,希望【隐藏】命令前显示复选标记,【帮助】菜单恢复显示 时,则取消【隐藏】命令前的复选标记,可将 OptionHideClick 过程的代码修改为如下 形式。
procedure TForm1.OptionHideClick(Sender: TObject);
begin
Help.Visible:=Not Help.Visible; OptionHide.Checked:= Not OptionHide.Checked;
end;