弹出菜单(快捷菜单)
继续菜单的讨论,在Delphi中,可以和主菜单一样地建立弹出菜单。Delphi的优点是可通过组建的PopupMenu属性把特殊弹出菜单赋给组建。当鼠标放在组件上时,点击右键,就会自动弹出菜单。弹出菜单的事件处理程序和主菜单一样。
文本编辑器的共同特点就是把Cut、Copy和Paste操作放到了快捷菜单上,下面将要为ScratchPad程序的Memo组建增加这样的功能。要建立弹出菜单,复制部分主菜单,遵循以下步骤:
1、从组件面板中选择PopupMenu组件,并放置到窗体上。
2、改变其Name属性为MemoPopup。
3、双击PopupMenu图标运行Menu Designer。
4、点击右键弹出Menu Designer的快捷菜单,从快捷菜单中选择“Select Menu”。出现的对话框显示出应用程序中可以获得的菜单,选择MainMenu点击OK。如下图:
5、点击Edit菜单,点击Cut菜单项,按住Shift键点击Paste菜单项。选中Cut、Copy和Paste三项。
6、复制选择的项到剪贴板,从Delphi主菜单中选择【Edit | Copy】或者Ctrl + C。
7、在从Menu Designer的快捷菜单中选择“Select Menu”,这次选择MemoPopup并点击OK。Menu Designer弹出空弹出菜单。
8、从Delphi主菜单选择【Edit | Paste】或Ctrl + V,Cut、Copy和Paste菜单项都插入到弹出菜单中,如下:
在做几件事情就完成了,更改新的菜单项的Name属性:
1、对于Cut菜单项,Name属性改为PopupCut。
2、对于Copy菜单项,Name属性改为PopupCopy。
3、对于Paste菜单项,Name属性改为PopupPaste。
最后步骤就是为弹出菜单写事件处理程序,主菜单中Cut、Copy和Paste事件处理已经写好了,重复写是多余的,还记得以前建立多个组件共享同一个事件处理程序吗?下面我来逐步实现:
1、在Cut菜单上点击。
2、在Object Inspector中点击Event标签。
3、在OnClick事件的Value栏中点击下列按钮,显示出当前已有事件处理程序清单。
4、从清单中选择EditCutClick。当点击弹出菜单的Cut时,Edit | Cut将被调用。
5、对弹出菜单中的Copy菜单项的OnClick事件设置为EditCopyClick,Paste菜单项的OnClick事件设置为EditPasteClick。
6、在主窗口上点击Memo组件,改变其PopupMenu属性为MemoPopup。
现在程序已经完成了,再次运行测试效果,如下:
创建并保存菜单模板
delphi提供了几个菜单模板,可以插入到主菜单和弹出菜单中。也可以在程序创建和保存自己的模板为将来使用。首先启动Menu Designer,建立菜单。
创建了菜单后,从Menu Designer的快捷菜单选择“Save As Template…”,显示Save Template对话框。给菜单起一个有意义的名称,点击OK按钮,菜单作为模板保存。如下:
要插入菜单,和以前一样从Menu Designer中选择“Insert From Template…”,在Insert Template对话框中选择即可。如下:
要删除菜单模板,从Menu Designer中选择“Delete Template…”,在Delete Template对话框选择要删除的模板名称,点击OK即可。如下:
Menu Designer是强有力的工具,特别由于输入菜单的能力,它使菜单的建立和编辑变得容易而有趣。
以上代码均在Delphi 7中测试通过,本节示例代码下载:ScratchPad(菜单设计器之三).rar