Office中国论坛/Access中国论坛

标题: ADP自定义功能区怎样加载回调函数 [打印本页]

作者: guzhonghua26    时间: 2014-1-14 09:57
标题: ADP自定义功能区怎样加载回调函数
ADP设计好自定义功能区后,怎样通过回调函数打开窗体。

作者: zhuyiwen    时间: 2014-1-15 09:17
我将你的模块1改名为modRibbon
修改其内容为
  1. Public Function LoadRibbon() As Boolean
  2.     ' 从 xml 文件加载功能区
  3.     On Error GoTo Err_LoadRibbon
  4.     Dim fn As Long
  5.     Dim strText As String
  6.     Dim strOut As String
  7.    
  8.     fn = FreeFile       ' 获取一个文件号
  9.    
  10.     ' 打开当前工程文件夹中 AccRibbon.xml 文件
  11.     ' 该文件中存储功能区的 xml 代码
  12.     Open CurrentProject.Path & "\AccRibbon.xml" For Input As fn
  13.    
  14.     ' 按行读取并连接起来保存到 strOut 变量
  15.     Do While Not EOF(fn)
  16.         Line Input #fn, strText
  17.         strOut = strOut & strText
  18.     Loop
  19.     Close fn            ' 关闭文件

  20.     ' 加载功能区,其名称为 "Main"
  21.     Application.LoadCustomUI "Main", strOut

  22.     LoadRibbon = True

  23. LoadRibbon_Exit:
  24.    
  25.     Exit Function

  26. Err_LoadRibbon:
  27.     Select Case Err.Number
  28.         Case 32609
  29.             ' Ribbon already loaded
  30.             Debug.Print "功能区已经加载"
  31.         Case Else
  32.             MsgBox "Error: " & Err.Number & vbCrLf & _
  33.                Err.Description, vbCritical, _
  34.                "Error", Err.HelpFile, Err.HelpContext
  35.     End Select
  36.     Err.Clear
  37.    
  38.     GoTo LoadRibbon_Exit
  39. End Function
复制代码

作者: zhuyiwen    时间: 2014-1-15 09:19
你的xml文件的内容为
  1. <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" loadImage="CallBackLoadImage" onLoad="onRibbonLoad">
  2.         <ribbon startFromScratch="false">      
  3.                 <tabs>
  4.                         <tab id="tabMain" label="自定义">                                             
  5.                                 <group id="dbCustomGroup4" label="刷新">
  6.                                         <button idMso="DataRefreshAll" label="全部刷新" size="large" enabled="true"/>
  7.                                 </group>
  8.                                 <group id="grpMenu" label="自定义">
  9.                                         <button id="cmdMenu" label="打开窗体" size="large" imageMso="SlideMasterInsertLayout" onAction="onOpenFormEdit" tag="打开窗体"/>
  10.                                 </group>
  11.                         </tab>
  12.                 </tabs>
  13.         </ribbon>
  14. </customUI>
复制代码

作者: zhuyiwen    时间: 2014-1-15 09:30
在xml的第一行,指定了两个回调函数
loadImage="CallBackLoadImage" onLoad="onRibbonLoad"

loadImage指定功能区加载功能区中所使用的图片要使用的回调函数 CallBackLoadImage
onLoad指定功能加载时执行的回调函数 onRibbonLoad

第一个选项卡的名称为"tabMain",显示标签为“自定义”
在这个选项卡中有两个分组
"dbCustomGroup4"  刷新
"grpMenu" 自定义

在"grpMenu"选项卡中有一个"cmdMenu"(打开窗体)的按钮,其指定的回调函数名为"onOpenFormEdit"
作者: zhuyiwen    时间: 2014-1-15 09:50
这样,你必须在一个模块中编写全局的回调函数
例如,模块名为modCallBack
  1. Option Explicit

  2. Public Sub onRibbonLoad(ByRef Ribbon As IRibbonUI)
  3.     MsgBox "加载了功能区"
  4. End Sub

  5. Public Sub CallBackLoadImage(strImage As String, image)
  6.     MsgBox "加载功能区图片"
  7. End Sub

  8. Public Sub onOpenFormEdit(control As IRibbonControl)
  9.     MsgBox "you click id:" & control.id & " tag:" & control.Tag
  10.     DoCmd.OpenForm "窗体1"
  11. End Sub
复制代码

作者: zhuyiwen    时间: 2014-1-15 10:43
[attach]53010[/attach]


附件传上,自己细看

作者: guzhonghua26    时间: 2014-1-15 13:46
非常感谢朱总的实例。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3