jpg in UserForm anzeigen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: jpg in UserForm anzeigen
von: Weber
Geschrieben am: 27.07.2015 11:18:02

Hallo,
ich komm bei einem kleinem "Problem" nicht weiter. Ich habe schon mit VBA (vor 2 Jahren) gearbeitet und einige Programme geschrieben, darunter auch Text ausgaben in UserForm.
Vielleicht ist das Problem auch nicht mit Userform lösbar.
Ich habe drei sheets in meiner Mappe. Allgemein, Styles und Spezial.
In Styles habe ich verschiedene Bilder kopiert. Diese Bilder möchte ich mit einem Button im Sheet Allgemein in einer Box (hier UserForm) ausgeben lassen.
Meine Sub habe ich so aufgerufen:

Private Sub CommandButton1_Click()
End Sub

Ich schaffe es aber nicht, die Verschiedenen Bilder (die nennen sich nur Picture 1- x) in die Box anzeigen zu lassen.
Ich weiss nicht wie ich das mit Grafiken machen kann. Könnt ihr mir bitte weiter helfen?
Gruß

Bild

Betrifft: AW: jpg in UserForm anzeigen
von: Nepumuk
Geschrieben am: 27.07.2015 13:38:22
Hallo,
hast du für jedes Bild einen Button oder wie hast du dir das vorgestellt?
Gruß
Nepumuk

Bild

Betrifft: AW: jpg in UserForm anzeigen
von: Weber
Geschrieben am: 27.07.2015 13:40:41
Hi,
ich möchte jedes Bild mit einem anderen Button anzeigen. Also jedes Bild hat nen anderen Button.

Bild

Betrifft: AW: jpg in UserForm anzeigen
von: Nepumuk
Geschrieben am: 27.07.2015 13:58:02
Hallo,
ich hab dir mal eine Mustermappe gemacht: https://www.herber.de/bbs/user/99092.xlsm
Gruß
Nepumuk

Bild

Betrifft: AW: jpg in UserForm anzeigen
von: Weber
Geschrieben am: 27.07.2015 15:20:06
Danke für deine Mühe....
Jedoch habe ich mich nicht richtig erklärt. Auf dem Sheet "Allgemein" ist ein Button, der aus dem Sheet "Styles" mir das Bild in einer Box ausgibt. Es spielt sich alles auf dem Sheet "Allgemein" ab.
Ich habe mal deinen Code genutzt, komme da aber nicht so recht mit klar.

Bild

Betrifft: AW: jpg in UserForm anzeigen
von: Nepumuk
Geschrieben am: 27.07.2015 16:15:09
Hallo,
so besser?
https://www.herber.de/bbs/user/99097.xlsm
Gruß
Nepumuk

Bild

Betrifft: AW: jpg in UserForm anzeigen
von: Rudi Maintaire
Geschrieben am: 27.07.2015 14:01:47
Hallo,
ich komm bei einem kleinem "Problem" nicht weiter
so klein ist das gar nicht.
In ein Modul:

Option Explicit
'Code von Nepumuk  *********************************************************
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" ( _
    ByRef PicDesc As PIC_DESC, _
    ByRef RefIID As GUID, _
    ByVal fPictureOwnsHandle As Long, _
    ByRef IPic As IPictureDisp) As Long
Private Declare Function CopyImage Lib "user32.dll" ( _
    ByVal handle As Long, _
    ByVal un1 As Long, _
    ByVal n1 As Long, _
    ByVal n2 As Long, _
    ByVal un2 As Long) As Long
Private Declare Function IsClipboardFormatAvailable Lib "user32.dll" ( _
    ByVal wFormat As Integer) As Long
Private Declare Function OpenClipboard Lib "user32.dll" ( _
    ByVal hWnd As Long) As Long
Private Declare Function GetClipboardData Lib "user32.dll" ( _
    ByVal wFormat As Integer) As Long
Private Declare Function EmptyClipboard Lib "user32.dll" () As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
End Type
Private Type PIC_DESC
    lngSize As Long
    lngType As Long
    lnghPic As Long
    lnghPal As Long
End Type
Private Const PICTYPE_BITMAP = 1
Private Const CF_BITMAP = 2
Private Const IMAGE_BITMAP = 0
Private Const LR_COPYRETURNORG = &H4
Private Const GC_CLASSNAMEMSEXCEL = "XLMAIN"
Private Function Paste_Picture() As IPictureDisp
Dim lngReturn As Long, lngCopy As Long, lngPointer As Long
Dim i As Long
    If IsClipboardFormatAvailable(CF_BITMAP) <> 0 Then
        lngReturn = OpenClipboard(FindWindow(GC_CLASSNAMEMSEXCEL, Application.Caption))
        If lngReturn > 0 Then
            lngPointer = GetClipboardData(CF_BITMAP)
            lngCopy = CopyImage(lngPointer, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG)
            Call CloseClipboard
            If lngPointer <> 0 Then Set Paste_Picture = Create_Picture(lngCopy, 0&, CF_BITMAP)
        End If
    End If
    
End Function
Private Function Create_Picture( _
        ByVal lnghPic As Long, _
        ByVal lnghPal As Long, _
        ByVal lngPicType As Long) As IPictureDisp
    
    Dim udtPicInfo As PIC_DESC, udtID_IDispatch As GUID
    Dim objPicture As IPictureDisp
    
    With udtID_IDispatch
        .Data1 = &H7BF80980
        .Data2 = &HBF32
        .Data3 = &H101A
        .Data4(0) = &H8B
        .Data4(1) = &HBB
        .Data4(2) = &H0
        .Data4(3) = &HAA
        .Data4(4) = &H0
        .Data4(5) = &H30
        .Data4(6) = &HC
        .Data4(7) = &HAB
    End With
    
    With udtPicInfo
        .lngSize = Len(udtPicInfo)
        .lngType = PICTYPE_BITMAP
        .lnghPic = lnghPic
        .lnghPal = lnghPal
    End With
    
    Call OleCreatePictureIndirect(udtPicInfo, udtID_IDispatch, 0&, objPicture)
    
    Set Create_Picture = objPicture
    
End Function
Public Sub Show_Picture(ImageControl As MSForms.Image)
    
    Dim objPicture As IPictureDisp
    
    Call EmptyClipboard
    
    Set objPicture = Paste_Picture
    
    If Not objPicture Is Nothing Then
        ImageControl.Picture = objPicture
    Else
        ImageControl.Picture = LoadPicture("")
    End If
    
End Sub

In der UF (CommandButton 'cmd1' und ImageControl 'Image1'):
Private Sub cmd1_Click()
  Tabelle2.Shapes(1).CopyPicture xlScreen, xlBitmap
  Show_Picture Image1
End Sub

Gruß
Rudi

Bild

Betrifft: AW: jpg in UserForm anzeigen
von: JoWE
Geschrieben am: 27.07.2015 15:24:30
Hallo Rudi,
eine tolle Lösung. Kann ich bestimmt irgendwann anwenden.
Bisher habe ich die Bilder stets über Ihren Speicherpfad eingefügt.
Wusste nicht das das auch über die Zwischenablage klappt.
Danke.
Doch noch eine Frage: Wie verhält es sich mit der Dateigröße bei derartigem Vorgehen?
Gruß
Jochen

Bild

Betrifft: AW: jpg in UserForm anzeigen
von: Nepumuk
Geschrieben am: 27.07.2015 16:20:25
Hallo Jochen,
das ist ein relativ alter Code von mir der noch Speicher frisst weil das Bild im Arbeitsspeicher nicht mehr gelöscht wird. Sprich mit jedem Bild wächst der Speicherbedarf um die Größe des Bildes an. Schau mal in die letzte Mappe die ich hochgeladen habe, da ist das Löschen drin. Auch das Erstellen der GUID-Struktur ist aktueller.
Gruß
Nepumuk

Bild

Betrifft: AW: jpg in UserForm anzeigen
von: JoWE
Geschrieben am: 27.07.2015 17:22:34
Hallo Nepumuk,
ah, sowas hatte ich mir schon gedacht.
Danke für den Hinweis.
Gruß
Jochen

Bild

Betrifft: AW: jpg in UserForm anzeigen
von: Weber
Geschrieben am: 28.07.2015 13:40:32
Ich möchte mich bedanken.....aber leider bekomme ich es nicht ans laufen. Ich denke ich werde das Thema mal sacken lassen und mich am WE nochmal dran hängen.....
Also das hochgeladene Sheet von Nepomuk läuft...und das anpassen an meine "Bedingung" läuft ohne Fehler, jedoch wird

Private Sub CommandButton1_Click()
    Call Show_Picture("Picture 1")
End Sub
endlos aufgerufen....
Aber nochmal danke!!!
Gruß

Bild

Betrifft: AW: jpg in UserForm anzeigen
von: Weber
Geschrieben am: 28.07.2015 15:19:50
Ok...habs geschnallt. Es läuft. Danke euch herzlich!

 Bild

Beiträge aus den Excel-Beispielen zum Thema "jpg in UserForm anzeigen"