Błąd jest dość oczywisty:kontrolka obrazu w programie Microsoft Access może być powiązana z lokalizacją pliku lub może być ustawiona na .dib
obraz (niezależna od urządzenia mapa bitowa format
, jeden z mniej znanych formatów graficznych).
Jednak obejście tego nie jest takie proste.
Możesz obejść to ograniczenie na kilka sposobów:
- Użyj kontrolki ActiveX, która obsługuje wiele formatów obrazów (można znaleźć wiele)
- Zapisz obraz na dysku w folderze tymczasowym i ustaw źródło sterowania obrazami na jego lokalizację
- Użyj kontrolki przeglądarki internetowej i użyj HTML
<img />
do wyświetlenia obrazu, używając osadzonego obrazu BASE64
Oto przykładowy kod dla podejścia 3:
Po pierwsze, musimy być w stanie przekonwertować kod binarny zawarty w obiekcie 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
Następnie możemy użyć kontrolki przeglądarki internetowej i wstawić do niej stronę z obrazem zakodowanym w 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
Gdzie MyWebbrowserControl
to nazwa kontrolki przeglądarki internetowej, image/jpg
to Twój typ obrazu, a MyOLEObject
jest twoim obiektem OLE.
Wskazówki:
- Nie używaj formantu WebBrowser ActiveX, ale użyj tego, który jest dostarczany z programem Access. W przeciwnym razie otrzymasz przestarzałą wersję Internet Explorera z trójwymiarową ramką, której nie można usunąć.
- Ustaw źródło kontrolki dla kontrolki przeglądarki internetowej na
="about:blank"
aby zainicjować go jako pustą stronę