供应室诊疗器械器具:细品RibbonX(40):技巧—在注册表中保存值和从注册表中获取值

来源:百度文库 编辑:中财网 时间:2024/05/11 15:00:43
Windows注册表是一个数据库,用于存储与计算机不同方面相关的设置,例如用户设置、应用程序设备、硬件设置,等等。
VBA提供了与注册表直接交互的方式,这不仅允许我们获取其它程序和硬件的信息,而且也能够使我们选择应用程序中的重要信息并将其存储在注册表中。
本文中,我们的目的是存储和获取关于UI的信息,我们将使用专门为VBA(和VB)配置而留出的部分。并且,我们不需要使用Windows APIs。
VBA提供了用于处理注册表的两个函数:GetSetting和SaveSetting,这两个函数仅能访问下面的注册表句柄键:
    HKEY_CURRENT_USER\Software\VB and VBA Program Settings

如下图所示,当切换按钮时,即使关闭了该工程,其状态值仍保存,因此,在重新打开该工程时,按钮的状态为关闭前的状态,不会因为关闭工程而使按钮的状态值丢失。

定义上图所示界面的XML代码如下:

代码包含了一些必须由VBA处理的关键回调。设置了getPressed属性,因为它返回从注册表中获取toggleButton的按下状态的回调,状态是true或false。
接下来,处理Click事件(该事件通过OnAction属性定义为共享的回调)。每次单击时,都会将按钮当前状态保存到注册表。
最后,getVisible属性根据toggleButton的状态决定是否选项卡可见。
本例中,将下面的两个VBA函数封装到自已的函数中,这样可以传递参数到自定义函数中,并且在一定程度上能够控制程序:

Function getRegistry(ByVal strKey As String) As BooleanOn Error Resume NextgetRegistry = GetSetting("AddInProject", "TabVisibility", strKey)If Err > 0 Then getRegistry = FalseEnd Function Function saveRegistry(ByVal strKey As String, _ByVal blnSetting As Boolean)SaveSetting "AddInProject", "TabVisibility", strKey, blnSettingEnd Function

因为如果键不存在的话,getRegistry函数将返回错误,所以需要添加错误处理以捕获错误。如果发生错误,那么知道该键不存在,getRegistry函数应该返回False。
回调代码如下:

Public gblnShowCustomReviewTab As BooleanPublic gblnShowCustomDataHandlingTab As BooleanPublic gblnCalledOnOpen As BooleanPublic grxIRibbonUI As IRibbonUI Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)Set grxIRibbonUI = ribbonEnd Sub Sub rxtglCustomReview_getPressed(control As IRibbonControl, ByRef returnedVal)returnedVal = getRegistry("CustomReviewTab")gblnShowCustomReviewTab = getRegistry("CustomReviewTab")grxIRibbonUI.InvalidateControl ("rxtabCustomReview")End Sub Sub rxtglDataHandling_getPressed(control As IRibbonControl, ByRef returnedVal)returnedVal = getRegistry("CustomDataHandlingTab")gblnShowCustomDataHandlingTab = getRegistry("CustomDataHandlingTab")grxIRibbonUI.InvalidateControl ("rxtabDataHandling")End Sub Sub rxtglShared_Click(control As IRibbonControl, pressed As Boolean)Select Case control.IDCase "rxtglCustomReview"gblnShowCustomReviewTab = pressedsaveRegistry "CustomReviewTab", pressedgblnCalledOnOpen = False Case "rxtglDataHandling"gblnShowCustomDataHandlingTab = pressedgblnCalledOnOpen = FalsesaveRegistry "CustomDataHandlingTab", pressedEnd SelectgrxIRibbonUI.InvalidateEnd Sub Sub rxtabCustomReview_getVisible(control As IRibbonControl, ByRef returnedVal)returnedVal = gblnShowCustomReviewTabIf Not gblnCalledOnOpen ThenIf gblnShowCustomReviewTab = True Then Application.SendKeys ("%K{RETURN}")End IfEnd Sub Sub rxtabDataHandling_getVisible(control As IRibbonControl, ByRef returnedVal)returnedVal = gblnShowCustomDataHandlingTabIf Not gblnCalledOnOpen Then If gblnShowCustomDataHandlingTab = True Then Application.SendKeys ("%Z{RETURN}")End IfEnd Sub

现在,就可以试试了!关闭工作簿后再打开,处理控件的设置将根据记录在注册表键中的值更新。