细品RibbonX(43):禁用和重利用功能区中的命令
资料整理来自于论坛
完整版下载地址:http://download.csdn.net/download/nodeman/10264659
Loading ...
与以前的版本不一样,Office 2007允许全局地禁用和重利用命令。在过去,禁用命令必需禁用UI中执行该命令的控件的每一单个的实例,这显然是一项巨大的工作。
禁用命令
禁用Office 2007中的命令是非常简单的,最重要的是知道打算禁用的命令的控件名以及这些命令在哪类控件之下。从commands集合中完全禁用某命令,而不是从Ribbon对象和该对象的父容器。试图从父容器里禁用某命令将产生一条错误消息。
例如,假设希望禁用“加粗”命令,可以使用下列代码:
<commands>
<commandidMso="Bold"
enabled="false"/>
</commands>
就这么简单!关键是确保正确使用了你希望禁用的命令的idMso。
禁用与应用程序选项和退出应用程序相关的命令
虽然应用程序选项和退出应用程序控件属于officeMenu元素,然而不能从officeMenu容器里禁用这两个控件。相反,必须使用command元素,如下所示:
<commands>
<commandidMso="FileExit"
enabled="false"/>
<commandidMso="ApplicationOptionsDialog"
enabled="false"/>
</commands>
当要禁用许多控件时,一个更好的选择是共享回调,这样不需要指定每个命令的enabled属性。这种情况下,代码如下所示:
<commands>
<commandidMso="FileExit"
getEnabled="rxshared_getEnabled"/>
<commandidMso="ApplicationOptionsDialog"
getEnabled="rxshared_getEnabled"/>
<commandidMso="Bold"
getEnabled="rxshared_getEnabled"/>
</commands>
下面来处理回调,禁用控件,代码如下:
Sub rxshared_getEnabled(control As IRibbonControl, ByRef returnedVal)
returnedVal = False
End Sub
重利用与通用控件相关的命令
重利用命令与禁用命令所采取的方式相同,也是在commands集合中进行处理。
同样,重利用命令成功的关键在于知道希望重利用的命令所在的控件。此外,虽然某命令是不可见的,但是如果通过快捷键调用的话,仍然具有所设计的功能。这也带来了一些问题,例如事件的重复触发。
下面,我们来重利用应用程序选项按钮:
<commandidMso="ApplicationOptionsDialog"
onAction="rxApplicationOptionsDialog_repurpose"/>
回调代码如下:
Sub rxApplicationOptionsDialog_repurpose(control As IRibbonControl, ByRef cancelDefault)
MsgBox "对不起,Excel选项目前已经被禁用.", vbCritical
End Sub
与前面的示例一样,如果多个控件共享相同的回调签名,那么可以使用同一过程。
影响键盘快捷键和键击键
有时,可能希望覆盖掉内置快捷键和键击键。重载键击键是非常简单的,只需引用该控件,然后给它赋新的键击键,如下面的XML代码所示:
<tabidMso="TabInsert"keytip="$">
通过将“$”赋值给“插入”选项卡作为键击键,从而将其键击键从“I”修改为“$”。如下图所示,尽管使用了特殊字符$,然而仍然显示自定义的结果。
提示:键击键通过“键,然后键”的方式访问,即按下并释放第一个键,然后按第二个键。而快捷键则通过“键加键”的方式访问,即同时按下所有的键。
下面,我们演示重载内置快捷键,例如Ctrl+c。这里介绍使用OnKey方法来重载内置快捷键。OnKey方法用于运行指定的过程,与SendKeys方法类似,因此可以使用与之相同的键代码。但是,OnKey方法稍微有点不同,使用下表所列的参数。
名称 | 必需/可选 | 数据类型 | 描述 |
Key | 必需 | 字符串 | 代表键或按键组合的字符串 |
Procedure | 可选 | Variant | 代表要运行的过程名称的字符串。如果值为””(空文本),当按下键或键组合时没有任何操作,这种形式的OnKey修改了键击的正常结果。如果忽略参数,那么键或键组合将恢复到正常行为(即OnKey方法清除的任何键或键组合以前被赋予的功能) |
OnKey方法的通用语法如下:
Application.OnKey Key,ProcedureName
正如上表如所,参数Key指定计划捕获的键或键组合,而参数ProcedureName指定当按下键或键组合时必须执行的过程名。假设希望捕获打印快捷键(Ctrl+p),可以使用下列代码:
Sub print_override()
Application.OnKey "^p", "myPrintMsg"
End Sub
为了恢复快捷键的正常功能,必须忽略OnKey方法参数中的过程名,如下代码所示:
Sub print_override()
Application.OnKey "^p"
End Sub
该快捷键命名将恢复其默认的功能。