Hallo Disaster,
mit der shell32.dll lässt sich das *relativ* einfach realisieren.
Erstelle zunächst ein Modul und kopier folgenden Code hinein:
Public Declare Function ExtractIconEx Lib "shell32.dll" Alias "ExtractIconExA" _
(ByVal lpszFile As String, ByVal nIconIndex As Long, phiconLarge As Long, _
phiconSmall As Long, ByVal nIcons As Long) As Long
Public Declare Function DrawIconEx Lib "user32.dll" (ByVal hDC As Long, ByVal _
xLeft As Long, ByVal yTop As Long, ByVal hIcon As Long, ByVal cxWidth As _
Long, _
ByVal cyWidth As Long, ByVal istepIfAniCur As Long, ByVal hbrFlickerFreeDraw _
As _
Long, ByVal diFlags As Long) As Long
Public Declare Function DestroyIcon Lib "user32.dll" (ByVal hIcon As Long) As _
Long
Public Const DI_COMPAT = &H4 ' benutzt das als Standard festgelegte
' benutzerdefinierte Bild
Public Const DI_DEFAULTSIZE = &H8 ' zeichnet das Icon/Cursor mit der
' Standardgröße
Public Const DI_IMAGE = &H2 ' zeichnet nur die Bilddaten des Icons/Cursors
Public Const DI_MASK = &H1 ' zeichnet nur die Maske des Icons/Cursors
Public Const DI_NORMAL = &H3 ' zeichnet Maske und Bilddaten
Public Icons_Klein() As Long, Icons_Groß() As Long
Public Function Symbol_Laden(pPfad As String)
Dim RetVal As Long
Dim IconNr As Long
' Anzahl Symbole in der Datei ermitteln
IconNr = ExtractIconEx(pPfad, -1, 0&, 0&, 0&)
If IconNr = 0 Then
Exit Function ' Diese Datei enthält keine Symbole
End If
' Alle Symbole der Datei in Arrays speichern
ReDim Icons_Klein(IconNr - 1)
ReDim Icons_Groß(IconNr - 1)
RetVal = ExtractIconEx(pPfad, 0&, Icons_Groß(0), _
Icons_Klein(0), IconNr)
End Function Mal angenommen wir wollen das Icon "Beispiel-Symbol.ico" im Ordner "C:\Beispiel-Ordner\" als Bild einlesen:
Zunächst erstellen wir auf einer Form eine PictureBox
Name = picVorschau
Autoredraw = True
ScaleMode = 3 - Pixel
und einen CommandButton
Name = cmdVorschau
Nun laden und zeichnen wir das gewünschte Symbol in die PictureBox:
Private Sub cmdVorschau_Click()
' Die PictureBox vor dem laden des Symbols "leeren"
picVorschau.Cls
' Jetzt greifen wir auf unsere Function "Symbol_Laden" im Modul zu _
und geben den Pfad für unser Symbol an.
Call Symbol_Laden("C:\Beispiel-Ordner\Beispiel-Symbol.ico")
' Jetzt können wir das geladene Symbol in die PictureBox zeichnen.
RetVal = DrawIconEx(picVorschau.hDC, 5, 5, Icons_Groß(0), 0&, 0&, 0&, _
0&, DI_NORMAL)
' Um sicher zu gehen, dass das Icon wirklich angezeigt wird, muss _
die PictureBox aktualisiert werden.
picVorschau.Refresh
End Sub Mit Icons_Groß(0) wird das Symbol im Format 32x32 Pixel geladen
Mit Icons_Klein(0) wird das Symbol im Format 16x16 Pixel geladen
Die Zahl in der Klammer hinter z.B. Icons_Groß(0) gibt den Index des Symbols in der Datei an. Bei normalen Symbolen ist dies immer der Index 0.
Manche DLL- und EXE-Dateien beinhalten mehrere Symbole. Auf diese kann man zugreifen, indem man einen höhren Index angibt.
Beispiel: C:\Windows\Explorer.exe
Index Symbol
0 Arbeitsplatz
1 Suchen
2 Drucker
3 Desktop
...
Gruß,
Andreas |