【问题标题】:Load Picture to Microsoft Access 2010 Ribbon from Table将图片从表格加载到 Microsoft Access 2010 功能区
【发布时间】:2014-11-12 06:51:56
【问题描述】:

我正在使用 Access 2010 的新功能区功能,并试图找出将图像从表格加载到功能区的最简单方法。我知道我可以通过使用 GDI API 函数来做到这一点,但是从我所看到的代码看起来很复杂,并且似乎使用了额外的 dll,如果我不需要的话,我也会避免调用这些 dll。我也知道我可以在表单上创建一个控件,将图像加载到表单,然后将图像从表单加载到功能区图像变量。虽然使用表格是可行的,但它似乎很草率。最终,如果必须,我将采用上述两种方法之一,但似乎应该有一些简单的方法可以将表格中的图像直接加载到功能区的图像变量中。

需要注意的一点是,我愿意使用最简单的任何图像格式。这些图标文件非常小,所以我不关心文件大小,也不关心它们是否能够透明。所以,如果有一种方法只适用于位图文件类型,我觉得很好。

这是功能区 XML 中按钮的代码:

<button id="CCTrans" label="Credit Card Trans." getImage="GetMnuIcn" onAction="=OpenCCTrans()" />

这是我用于检索图像的代码:

Sub GetMnuIcn(control As IRibbonControl, ByRef Image)
    Set Image = DLookup("Img", "LtblImg", "Lbl=""" & control.ID & """")
End Sub

我尝试将图像存储为 OLE 对象和附件。无论哪种方式,当我尝试检索它时,它都会给我错误“类型不匹配”。为简单起见,我一直将其存储为位图,但我在第一次尝试时也尝试了 .gif 和 .png。

注意:显然功能区图标是 IPictureDisp 对象。如果我能弄清楚如何将表格中的图像加载到其中一种对象类型中,我应该能够将它用于功能区。

此外,微软网站上有很多很好的信息,但我还没有能够将它们拼凑成一个解决方案。这是一个链接:http://msdn.microsoft.com/en-us/library/bb187398.aspx

【问题讨论】:

    标签: image bitmap ms-access-2010 ribbon


    【解决方案1】:

    在尝试找到更好的解决方案的乏味日子之后,我不得不在我认为是各种平庸的方法之间做出选择。我真的很想直接将它加载到一个变量中,但是这样做的唯一方法需要引用一堆 dll 并且代码非常复杂。为了避免任何额外的依赖关系并使我的代码更简单,我决定将包含附加图像的表格分配给表单,以隐藏模式打开该表单,然后从表单分配图片变量。

    由于某种原因,我在其他地方看到的通过此方法按需加载图片的代码导致我的程序崩溃,因此我不得不在程序打开时将图片加载到变量中,然后让菜单栏设置图标选择菜单时的那些变量。

    我的代码如下:

    Dim Icn(15) As IPictureDisp, IcnLbl(15) As String   
    
    Function SetMnuIcn()
        Dim Img As Recordset, i As Byte
        DoCmd.OpenForm "frmImg", acNormal, , , acFormReadOnly, acHidden  
        Set Img = Forms!frmImg.Recordset
        While Not Img.EOF
            i = i + 1
            Set Icn(i) = Forms!frmImg!Img.PictureDisp
            IcnLbl(i) = Img!Lbl
            Img.MoveNext
        Wend
        DoCmd.Close acForm, "frmImg", acSaveNo
    End Function
    
    Sub GetMnuIcn(control As IRibbonControl, ByRef Image)
        Set Image = Icn(GetAryLoc(IcnLbl, control.ID, 15))
    End Sub
    
    Function GetAryLoc(varValues As Variant, varMatch As Variant, NumOfValues As Integer) As Integer
        Dim i As Integer
        For i = 1 To NumOfValues
            If varValues(i) = varMatch Then GetAryLoc = i
        Next
    End Function
    

    注意:为确保在需要图标之前已加载图标,我指定 SetMnuIcn 在功能区加载时运行:

    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="=SetMnuIcn()">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多