Vor langer langer Zeit haben wir Ihnen schon einmal eine Lösung aufgezeigt, wie sich GIF- oder JPG-Bilder aus einer Ressourcen-Datei laden und anzeigen lassen. Über die VB-Funktion LoadResPicture lassen sich bekanntlich nur 32x32 Icons und BMP-Bilder aus der RES-Datei auslesen. Für andere Bildformate muss man auf die LoadResData-Funktion zurückgreifen, die den Inhalt in ein Byte-Array einliest. Dieses Byte-Array hatten wir dann in eine Datei gespeichert, so dass das Bild dann über die LoadPicture-Anweisung in einer PictureBox oder einem Image-Control angezeigt werden konnte. Dass es auch ohne das "umständliche" Zwischenspeichern in eine temporäre Datei geht, das möchten wir Ihnen heute zeigen. Nachfolgender Tipp basiert auf unseren Extra-Tipp Dezember 2003 von LonelySuicide: Bild laden - mit Fortschrittsanzeige Hier wurde sehr schön gezeigt, wie sich ein im Speicher (Memory) befindliches Bild mit Hilfe der API-Funktionen CreateStreamOnHGlobal und OleLoadPicture in ein StdPicture-Objekt auslesen lässt. Erstellen Sie zunächst eine RES-Datei, mit folgendem Aufbau: // RTF-Dokumente 1000 ICO DISCARDABLE "icon16x16.ico" // JPG-Bilder 2000 JPG DISCARDABLE "cd.jpg" // GIF-Bilder 3000 GIF DISCARDABLE "logo.gif" Diese Datei wird nun mit Hilfe des Microsoft Ressourcen-Compiler zu einer .RES-Datei kompiliert und muss dem VB-Projekt hinzugefügt werden. Die neue LoadImageFromRES-Funktion fügen Sie am besten in ein Modul ein: Option Explicit ' Benötigte API-Deklarationen Private Declare Function CreateStreamOnHGlobal Lib "ole32.dll" ( _ ByVal hGlobal As Long, _ ByVal fDeleteOnRelease As Long, _ lpIStream As IUnknown) As Long Private Declare Function OleLoadPicture Lib "oleaut32.dll" ( _ ByVal lpStream As IUnknown, _ ByVal lSize As Long, _ ByVal fRunmode As Long, _ riid As Any, _ lpIPicture As IPicture) As Long ' Bild aus RES-Datei laden und ' als StdPicture-Objekt zurückgeben Public Function LoadImageFromRES(ByVal nResID As Long, sType) As StdPicture Dim IID_IPicture(3) As Long Dim oPicture As IPicture Dim bImg() As Byte Dim nResult As Long Dim oStream As IUnknown Dim hGlobal As Long ' Bild als ByteArray aus RES-Datei laden bImg = LoadResData(nResID, sType) ' Array füllen um den KlassenID (CLSID) IID_IPICTURE ' zu simulieren IID_IPicture(0) = &H7BF80980 IID_IPicture(1) = &H101ABF32 IID_IPicture(2) = &HAA00BB8B IID_IPicture(3) = &HAB0C3000 ' Stream erstellen Call CreateStreamOnHGlobal(VarPtr(bImg(LBound(bImg))), 0, oStream) ' OLE IPicture-Objekt erstellen nResult = OleLoadPicture(oStream, 0, 0, IID_IPicture(0), oPicture) If nResult = 0 Then Set LoadImageFromRES = oPicture End If End Function Der Aufruf erfolgt so: Set Image1.Picture = LoadImageFromRES(1000, "ICO") Set Image1.Picture = LoadImageFromRES(2000, "JPG") Set Image1.Picture = LoadImageFromRES(3000, "GIF") Dieser Tipp wurde bereits 34.713 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
TOP! Unser Nr. 1 Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |