De fout spreekt voor zich:een afbeeldingsbesturingselement in Microsoft Access kan ofwel worden gebonden aan een bestandslocatie, of kan worden ingesteld op een .dib
afbeelding (apparaatonafhankelijke bitmap formaat
, een van de meer obscure beeldformaten).
Er omheen werken is echter niet zo eenvoudig.
Je kunt die beperking op verschillende manieren omzeilen:
- Gebruik een ActiveX-besturingselement dat meerdere afbeeldingsindelingen ondersteunt (er zijn er meerdere te vinden)
- Sla de afbeelding op schijf op in een tijdelijke map en stel de besturingsbron voor afbeeldingen in op zijn locatie
- Gebruik een webbrowserbesturing en gebruik de HTML
<img />
tag om uw afbeelding weer te geven, met behulp van een ingesloten BASE64-afbeelding
Hier is de voorbeeldcode voor benadering 3:
Eerst moeten we de binaire code in het OLE-object kunnen converteren naar BASE64:
Public Function ToBase64(Bytes As Variant) As String
Dim XMLElement As Object
Set XMLElement = CreateObject("Msxml2.DOMDocument.6.0").createElement("tmp")
XMLElement.DataType = "bin.base64"
XMLElement.nodeTypedValue = Bytes
ToBase64 = Replace(XMLElement.Text, vbLf, "")
End Function
Vervolgens kunnen we een webbrowserbesturing gebruiken en een webpagina invoegen met de BASE64-gecodeerde afbeelding erin:
Public Sub InsertImageInControl()
Dim wb As Object
Set wb = MyWebbrowserControl.Object
With wb
.Navigate2 "about:blank"
Do Until .ReadyState = 4 '=READYSTATE_COMPLETE
'This is a somewhat inefficient way to wait, but loading a blank page should only take a couple of milliseconds
DoEvents
Loop
.Document.Open
.Document.Write "<!DOCTYPE html><HTML><HEAD><TITLE>A</TITLE></HEAD><BODY scroll=""no"" style=""margin: 0px; padding: 0px;"">"
.Document.Write "<img alt="""" style=""width:100%; margin: 0px; padding: 0px;"" src=""data:image/jpg;base64,"
.Document.Write ToBase64(MyOLEObject.Value)
.Document.Write """ />"
.Document.Write "</BODY></HTML>"
.Document.Close
End With
End Sub
Waar MyWebbrowserControl
is de naam van uw webbrowserbesturing, image/jpg
is uw afbeeldingstype, en MyOLEObject
is uw OLE-object.
Tips:
- Gebruik niet het WebBrowser ActiveX-besturingselement, maar gebruik het besturingselement dat bij Access wordt geleverd. Anders krijgt u een verouderde versie van Internet Explorer met een 3D-rand die niet kan worden verwijderd.
- Stel de besturingsbron voor de webbrowserbesturing in op
="about:blank"
om het te initialiseren als een blanco pagina