Warum noch ein Access-Buch?
Für wen ist das Buch?
Jetzt bestellen
+ direkter Download des eBooks!
Nur EUR 59,95!
Fehler gefunden?
Bitte melden!
Wünsche an das Buch?
Her damit!
Was denken die Leser über dieses Buch?
Lesen Sie aktuelle Rezensionen!
Kapitel des noch nicht veröffentlichten Buchs zum Downloaden, Probelesen und Kommentieren
Beispieldatenbanken
Zusätzliches Material

Das Buch im HTML-Format

Für unbestimmte Zeit bieten Addison-Wesley und André Minhorst den kompletten Inhalt des Buchs als Download an. Schauen Sie rein und informieren Sie sich über den Inhalt! Und wenn Ihnen das Buch nützlich erscheint und Sie glauben, dass Sie etwas gelernt haben oder durch das Gelesene sogar etwas Zeit und somit Geld bei Ihrer Arbeit einsparen konnten, können Sie sich ja beim Autor und beim Verlag revanchieren - beispielsweise durch den Kauf dieses Buchs.

Am schönsten wäre es natürlich, wenn Sie das Buch direkt hier bestellen - Sie erhalten das Buch dann direkt vom Verlag, und der Autor und Verlag haben dann noch mehr davon, als wenn Sie es anderswo kaufen.

Danke für Ihr Interesse!

11.10 Die Office Graphics Library

11.10.1 Bilder aus dem OLE-Feld in einem Formular anzeigen

Mit dem StdPicture-Objekt und dem Image-Steuerelement der MSForms 2.0-Bibliothek ist es möglich, in OLE-Feldern gespeicherte Bilder direkt - und zwar ohne Umweg über das Dateisystem - in einem Formular anzuzeigen. Der Entwurf des Formulars sieht wie in Abbildung 11.15 aus, die Anzeige der Bilder erfolgt mit besagtem Image-Steuerelement. Als Datensatzquelle dient die Tabelle tblOLEBilder.

Um den Inhalt des OLE-Feldes der Tabelle anzuzeigen, lesen Sie zunächst den Binärstrom aus dem passenden Tabellenfeld - hier das Feld OLEBild der Tabelle tblOLEBilder - aus und wandeln es in ein StdPicture-Objekt um.

Dazu verwenden Sie die Funktion PicFromField aus dem Modul mdlOLE, die ihrerseits die Funktion ArrayToPicture des Moduls mdlOGL2007 einsetzt.

Abbildung 11.15: Das Formular zum Anzeigen von Bildern direkt aus der Tabelle in der Entwurfsansicht

Public Function PicFromField(ByVal picField As DAO.Field) As Picture
    Dim arrBin() As Byte
    Dim LSize As Long

    On Error GoTo Fehler

    LSize = picField.FieldSize 'Größe des Biärstreams des Feldes bestimmen
    If LSize > 0 Then
        ReDim arrBin(LSize)
        'Feldinhalt in Byte-Array überführen
        arrBin() = picField.GetChunk(0, LSize)
        'Zu ArrayToPicture() siehe mdlOGL2007:
        InitGDIP
        Set PicFromField = ArrayToPicture(arrBin)
        ShutDownGDIP
    End If
Ende:
    On Error Resume Next
    Erase arrBin
    Exit Function
Fehler:
    MsgBox Err.Description
    Resume Ende
End Function

Listing 11.7: Inhalt eines OLE-Felds in ein StdPicture-Objekt einlesen

Die Routine BildAnzeigen macht sich die Funktion PicFromField zu Nutze, indem sie das Field-Objekt mit dem Bild ermittelt und dieses an die Funktion PicFromField übergibt, um ein passendes StdPicture-Objekt zurückzuerhalten. Dieses wiederum lässt sich einfach im Image-Steuerelement des Formulars anzeigen.

Private Sub BildAnzeigen()
    Dim objPicture As stdole.StdPicture
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim fld As DAO.Field
    Set db = CurrentDb
    Set rst = db.OpenRecordset("SELECT OLEBild FROM tblOLEBilder WHERE OLEBildID = " & Me.OLEBildID, dbOpenDynaset)
    Set fld = rst.Fields(0)
    InitGDIP
    Set objPicture = PicFromField(fld)
    Set Me.imgBild.Picture = objPicture
    ShutDownGDIP
End Sub

Listing 11.8: Diese Routine ermittelt das Field-Objekt mit dem Bild zum aktuell im Formular angezeigten Datensatz und wandelt dessen Inhalt in ein Format um, das vom Image-Steuerelement angezeigt werden kann

Wann nun wird das in der Tabelle enthaltene Bild in das Image-Steuerelement geladen? Natürlich in der Ereignisprozedur, die beim Anzeigen eines jeden Datensatzes ausgelöst wird. Diese prüft, ob das Feld OLEBild überhaupt gefüllt ist, und ruft dann die Routine BildAnzeigen auf, um das Image-Steuerelement damit zu füllen:

Private Sub Form_Current()
    If Not IsNull(Me.OLEBild) Then
        BildAnzeigen
    Else
        Set Me.imgBild.Picture = Nothing
    End If
End Sub

Listing 11.9: Bild im Formular anzeigen

Wenn bereits ein Bild im ersten Datensatz der Datensatzquelle des Formulars enthalten ist, sieht dieses nun beim Öffnen wie in Abbildung 11.16 aus.

In der Abbildung sehen Sie noch eine Schaltfläche zum Hinzufügen eines Bildes zu einem Datensatz. Diese füllen Sie natürlich auch noch mit Leben - Sie wollen ja schließlich auch komfortabel Daten zur Tabelle hinzufügen. Dazu legen Sie die folgende Ereignisprozedur an, die zunächst die Funktion WZHOpenFileName zum Auswählen der gewünschten Bilddatei aufruft (Sie finden diese Funktion im Modul mdlOpenSaveFile der Beispieldatenbank). Anschließend speichert die Routine den aktuellen Datensatz, weil gegebenenfalls noch keiner in der zugrunde liegenden Tabelle enthalten ist. Das ist notwendig, weil das Speichern des Bildes direkt in die Tabelle erfolgt. Schließlich speichert die Routine das Bild mit der Funktion SaveFileToOLEField in der passenden Tabelle und aktualisiert die Anzeige durch einen Aufruf der Funktion BildAnzeigen.

Abbildung 11.16: Ein direkt aus der Tabelle geladenes Bild im Binärformat

Private Sub cmdBildHinzufuegen_Click()
    Dim strFilename As String
    strFilename = WZHOpenFileName(CurrentProject.Path, "Bildddatei auswählen", , , False, ofnThumbs)
    Me!Dateiname = Mid(strFilename, InStrRev(strFilename, "\") + 1)
    DoCmd.RunCommand acCmdSaveRecord
    SaveFileToOLEField strFilename, "tblOLEBilder", "OLEBild", True, "OLEBildID", Me.OLEBildID
    BildAnzeigen
End Sub

Listing 11.10: Hinzufügen eines Bildes aus einer Datei in ein OLE-Feld

Nächster Abschnitt:

11.10.2 Bild aus einem OLE-Feld wiederherstellen

© 2006-2008 André Minhorst Alle Rechte vorbehalten.