我想对Access2010实施QR码,结果发现https://github.com/yas78/QRCodeLibVBA。从Access引用XLAM无效,并且我不想将所有模块直接插入Access中,因为这会使项目混乱。 因此,我决定使用古老的VB6创建OCX文件,因为这似乎是将所有位封装到一个简单对象中的最简单方法。
最后,我制作了一个具有几个关键属性的OCX:DataString
是要显示的字符串,ByteModeCharsetName
,ErrorCorrectionLevel
,ForeRGB
和{{1 }},还有方法BackRGB
,Refresh
和事件Cls
和OnClick
它在VB6应用程序+ Excel工作表+ Excel表单中运行良好,但在Access表单,报表等中却表现异常。
OnDblClick
之类的控件事件不会显示在“属性表的事件”标签上这是我的问题:
OnClick
移至“格式”选项卡(如TextBoxes一样)?ForeRGB
属性(在“数据”选项卡上),可以直接绑定到记录集而无需使用VBA?我希望这样,我也可以在连续表单上使用控件。实际上,这是最重要的问题。我认为我已经很接近我的目标,但是我仍然停留在这一点上。我知道VB6已过时,但在阅读Creating Custom Controls for ms access 2010之后,VB6似乎是很容易的选择。编写OCX有其他选择吗?
编辑:最终工作控制在此处可用 https://github.com/Combinatix/QRCodeAX
答案 0 :(得分:1)
要一一回答您的问题:
是的。 Access中的ActiveX控件肯定与其他Office应用程序中的不同。
在Access中,有一个通用的 CustomControl 控件封装了所有ActiveX控件,并为任何控件提供了一组默认的事件,属性和方法,例如边框属性,requery方法和输入事件。
可以使用CustomControl.Object
属性来访问被封装的控件的对象
这些属性不会显示,因为您在一般意义上指的是自定义控件,而只能获取其属性。
要获取所需的对象,请使用以下命令:
Dim qrObj As QRCode
Set qrObj = QR.Object
这是不可能的,选项卡的布局由Access决定
也是不可能的。 ActiveX控件必须包含该功能,而这一功能则没有。通常,很难甚至不可能在连续子窗体中使用ActiveX控件为每行显示不同的内容
调整外部控件的大小,然后调用CustomControl.SizeToFit
通常应该可以正常工作
我认为某些不可能的事情可以通过修改ActiveX控件的源代码来实现。
答案 1 :(得分:1)
对于4.,请尝试设置控件的DataBindingBehavior
to vbSimpleBound
,以便可以通过ControlSource
和DataSource
属性绑定标量属性(在您的情况下为DataMember
)。
对于3.,使用Tools->Procedure Attributes...
菜单,在“名称”中选择ControlSource
,展开Advanced>>
,然后在Property Category
组合框中选择 Data 。您可以通过对象浏览器(F2)执行相同的操作。找到您的控件,右键单击您的属性/方法(应为粗体),然后选择Properties...
上下文菜单选项。该方法适用于方法,并且比Tools->Procedure Attributes...
方法更通用。
答案 2 :(得分:0)
一种非常不同且不那么麻烦的方法是在线生成QR码并将其下载以显示在(绑定的)图片控件中。
我写了一篇有关显示在线图像的文章:
当然需要一些代码,但比您在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