Chyba je poněkud samovysvětlující:ovládací prvek obrázku v aplikaci Microsoft Access může být buď vázán na umístění souboru, nebo může být nastaven na .dib
obrázek (bitmapa nezávislá na zařízení formát
, jeden z nejobskurnějších formátů obrázků).
Práce kolem toho však není tak snadná.
Toto omezení můžete obejít několika způsoby:
- Použijte ovládací prvek ActiveX, který podporuje více formátů obrázků (je jich několik)
- Uložte obrázek na disk do dočasné složky a nastavte zdroj ovládání obrázků na jeho umístění
- Použijte ovládací prvek webového prohlížeče a použijte HTML
<img />
tag pro zobrazení vašeho obrázku pomocí vloženého obrázku BASE64
Zde je příklad kódu pro přístup 3:
Nejprve musíme být schopni převést binární kód obsažený v objektu OLE na 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
Poté můžeme použít ovládací prvek webového prohlížeče a vložit do něj webovou stránku s obrázkem v kódování BASE64:
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
Kde MyWebbrowserControl
je název ovládacího prvku vašeho webového prohlížeče, image/jpg
je váš typ obrázku a MyOLEObject
je váš objekt OLE.
Tipy:
- Nepoužívejte ovládací prvek ActiveX WebBrowser, ale použijte ovládací prvek, který je součástí aplikace Access. V opačném případě získáte zastaralou verzi Internet Exploreru s 3D ohraničením, které nelze odstranit.
- Nastavte zdroj ovládacího prvku pro ovládací prvek webového prohlížeče na
="about:blank"
jej inicializovat jako prázdnou stránku