制作用于MS Access的QRCode ActiveX控件:控件源属性

时间:2018-11-10 23:58:57

标签: vba ms-access vb6 activex qr-code

我想对Access2010实施QR码,结果发现https://github.com/yas78/QRCodeLibVBA。从Access引用XLAM无效,并且我不想将所有模块直接插入Access中,因为这会使项目混乱。 因此,我决定使用古老的VB6创建OCX文件,因为这似乎是将所有位封装到一个简单对象中的最简单方法。

最后,我制作了一个具有几个关键属性的OCX:DataString是要显示的字符串,ByteModeCharsetNameErrorCorrectionLevelForeRGB和{{1 }},还有方法BackRGBRefresh和事件ClsOnClick

它在VB6应用程序+ Excel工作表+ Excel表单中运行良好,但在Access表单,报表等中却表现异常。

一切在Excel中都可以期待: Excel printscreen

这是Access中的外观: MS Access printscreen

  • 自定义属性在“其他”选项卡上可见,但VBA编辑器中根本不提供它们!但是,手动输入时确实会编译。
  • 调整大小的行为很奇怪
  • 诸如OnDblClick之类的控件事件不会显示在“属性表的事件”标签上

这是我的问题:

  1. 与其他Office应用程序相比,访问控制是否“不同”?
  2. 为什么这些属性隐藏在编辑器中?
  3. 如何将某些属性“移动”到其他选项卡(类别),例如将OnClick移至“格式”选项卡(如TextBoxes一样)?
  4. 如何创建ForeRGB属性(在“数据”选项卡上),可以直接绑定到记录集而无需使用VBA?我希望这样,我也可以在连续表单上使用控件。实际上,这是最重要的问题。
  5. 一些调整大小的技巧? (不重要)

我认为我已经很接近我的目标,但是我仍然停留在这一点上。我知道VB6已过时,但在阅读Creating Custom Controls for ms access 2010之后,VB6似乎是很容易的选择。编写OCX有其他选择吗?

编辑:最终工作控制在此处可用 https://github.com/Combinatix/QRCodeAX

3 个答案:

答案 0 :(得分:1)

要一一回答您的问题:

  1. 是的。 Access中的ActiveX控件肯定与其他Office应用程序中的不同。

    在Access中,有一个通用的 CustomControl 控件封装了所有ActiveX控件,并为任何控件提供了一组默认的事件,属性和方法,例如边框属性,requery方法和输入事件。

    可以使用CustomControl.Object属性来访问被封装的控件的对象

  2. 这些属性不会显示,因为您在一般意义上指的是自定义控件,而只能获取其属性。

    要获取所需的对象,请使用以下命令:

    Dim qrObj As QRCode
    Set qrObj = QR.Object
    
  3. 这是不可能的,选项卡的布局由Access决定

  4. 也是不可能的。 ActiveX控件必须包含该功能,而这一功能则没有。通常,很难甚至不可能在连续子窗体中使用ActiveX控件为每行显示不同的内容

  5. 调整外部控件的大小,然后调用CustomControl.SizeToFit通常应该可以正常工作

我认为某些不可能的事情可以通过修改ActiveX控件的源代码来实现。

答案 1 :(得分:1)

对于4.,请尝试设置控件的DataBindingBehavior to vbSimpleBound,以便可以通过ControlSourceDataSource属性绑定标量属性(在您的情况下为DataMember)。

对于3.,使用Tools->Procedure Attributes...菜单,在“名称”中选择ControlSource,展开Advanced>>,然后在Property Category组合框中选择 Data 。您可以通过对象浏览器(F2)执行相同的操作。找到您的控件,右键单击您的属性/方法(应为粗体),然后选择Properties...上下文菜单选项。该方法适用于方法,并且比Tools->Procedure Attributes...方法更通用。

答案 2 :(得分:0)

一种非常不同且不那么麻烦的方法是在线生成QR码并将其下载以显示在(绑定的)图片控件中。

我写了一篇有关显示在线图像的文章:

groupby

当然需要一些代码,但比您在GiHub上引用的代码少得多,尽管在这里完整列出了很多代码。

它使用此功能检索图像:

' Download (picture) file from a URL of a hyperlink field to a
' (temporary) folder, and return the full path to the downloaded file.
'
' This can be used as the control source for a bound picture control.
' If no Folder is specified, the user's IE cache folder is used.
'
' Typical usage in the RecordSource for a form or report where Id is
' the unique ID and Url is the hyperlink field holding the URL to
' the picture file to be displayed:
'
'   - to a cached file where parameter Id is not used:
'
'   Select *, UrlContent(0, [Url]) As Path From SomeTable;
'
'   - or, where Id is used to create the local file name:
'
'   Select *, UrlContent([Id], [Url], "d:\somefolder") As Path From SomeTable;
'
' Then, set ControlSource of the bound picture control to: Path
'
' 2017-05-28. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function UrlContent( _
    ByVal Id As Long, _
    ByVal Url As String, _
    Optional ByVal Folder As String) _
    As Variant

    Const NoError   As Long = 0
    Const Dot       As String = "."
    Const BackSlash As String = "\"

    Dim Address     As String
    Dim Ext         As String
    Dim Path        As String
    Dim Result      As String

    ' Strip leading and trailing octothorpes from URL string.
    Address = HyperlinkPart(Url, acAddress)
    ' If Address is a zero-length string, Url was not wrapped in octothorpes.
    If Address = "" Then
        ' Use Url as is.
        Address = Url
    End If

    If Folder = "" Then
        ' Import to IE cache.
        Result = DownloadCacheFile(Address)
    Else
        If Right(Folder, 1) <> BackSlash Then
            ' Append a backslash.
            Folder = Folder & BackSlash
        End If

        ' Retrieve extension of file name.
        Ext = StrReverse(Split(StrReverse(Address), Dot)(0))
        ' Build full path for downloaded file.
        Path = Folder & CStr(Id) & Dot & Ext

        If DownloadFile(Address, Path) = NoError Then
            Result = Path
        End If
    End If

    UrlContent = Result

End Function

我将此URL粘贴到了记录中:

https://chart.googleapis.com/chart?cht=qr&chs=300x300&chl=23457

它立即起作用:

Show pictures directly from URLs in Access forms and reports

完整代码可在GitHub上找到:Sample