Private 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
Private 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
Private Declare Function DestroyIcon Lib "user32.dll" (ByVal hIcon As Long) As Long
Private Const DI_COMPAT = &H4 ' benutzt das als Standard festgelegte benutzerdefinierte Bild
Private Const DI_DEFAULTSIZE = &H8 ' zeichnet das Icon/Cursor mit der Standardgröße
Private Const DI_IMAGE = &H2 ' zeichnet nur die Bilddaten des Icons/Cursors
Private Const DI_MASK = &H1 ' zeichnet nur die Maske des Icons/Cursors
Private Const DI_NORMAL = &H3 ' zeichnet Maske und Bilddaten
Private hSmallIcons() As Long, hLargeIcons() As Long
Private Sub Form_Load()
Dim RetVal As Long, IconNum As Long
' Anzahl Icons in der Datei ermitteln
IconNum = ExtractIconEx("F:\Wolfenstein - Enemy Territory\ET.exe", -1, 0&, 0&, 0&)
If IconNum = 0 Then
MsgBox "Diese Datei hat keine Icons"
Exit Sub
End If
' Scrollbalken einrichten
HScroll1.Max = IconNum - 1
' Alle Icons der Datei in Arrays speichern
ReDim hSmallIcons(IconNum - 1)
ReDim hLargeIcons(IconNum - 1)
RetVal = ExtractIconEx("F:\Wolfenstein - Enemy Territory\ET.exe", 0&, hLargeIcons(0), _
hSmallIcons(0), IconNum)
End Sub
' beim Scrollen die Icons auf die Form zeichnen
Private Sub HScroll1_Change()
Me.Cls
RetVal = DrawIconEx(Me.hDC, 5, 5, hLargeIcons(HScroll1.Value), 0&, 0&, 0&, 0&, DI_NORMAL)
DrawIconEx Me.hDC, 5, 40, hSmallIcons(HScroll1.Value), 0&, 0&, 0&, 0&, DI_NORMAL
Me.Refresh
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
On Error Resume Next
'vVor dem Beenden Icons zerstören und Ressourcen wieder freigeben
For i = 0 To UBound(hSmallIcons)
DestroyIcon hSmallIcons(i)
DestroyIcon hLargeIcons(i)
Next i
End Sub