Rubrik: Grafik & Zeichnen | 15.03.02 |
ExtractIconEx-Funktion Diese Funktion bietet ein wenig mehr Funktionalität als die ExtractIcon-Funktion. Eines dieser erweiterten Features ist, alle vorhandenen Icons einer Datei in Arrays zu speichern. | ||
Betriebssystem: Win95, Win98, WinNT 4.0, Win2000, WinME | Views: 10.794 |
Deklaration:
Declare Function ExtractIconEx Lib "shell32.dll" _ Alias "ExtractIconExA" ( _ ByVal lpszFile As String, _ ByVal nIconIndex As Long, _ phiconLarge As Long, _ hiconSmall As Long, _ ByVal nIcons As Long) As Long
Beschreibung:
Diese Funktion bietet ein wenig mehr Funktionalität als die ExtractIcon-Funktion. Eines dieser erweiterten Features ist, alle vorhandenen Icons einer Datei in Arrays zu speichern.
Parameter:
lpszFile | Erwartet den Dateinamen der Datei, die die Icons enthält, die geladen werden sollen. |
nIconIndex | Wird hier der Wert "-1" und die beiden Optionen "phIconLarge" und "phIconSmall" auf "0" gesetzt, so gibt die Funktion die Anzahl der vorhandenen Icons innerhalb der Datei zurück. Wird hier einepositive Zahl übergeben, so ist das der Index des Icons bei dem das Extrahieren gestartet wir. Übergibt man hierz. B. eine "2", so wird für den Fall dass die Datei mindestens 3 Icons hat (0 Based Index) das Extrahieren bei 2 gestartet und bei "nIconIndex + nIcons" gestoppt. Die Arrays die man übergeben hat sind dann mit den Handles der Icons gefüllt dieextrahiert wurden. |
phiconLarge | Erwartet ein Array das genug Dimensionen hat um diegroßen Icons zu empfangen. Soll kein Icon extrahiert werden kann man hier eine "0" übergeben. |
phiconSmall | Erwartet ein Array das genug Dimensionen hat um diekleinen Icons zu empfangen. Soll kein Icon extrahiert werden kann man hier eine "0" übergeben. |
nIcons | Erwartet die Anzahl der Icons die von dem Index in "nIconIndex" ausextrahiert werden sollen. Wollen Sie z. B. die großen und kleinen Icons mit dem Index2, 3, 4 und 5 extrahieren, so dimensionieren Sie 2 Arrays mit 4 Feldern, geben den "nIconIndex" 2 ein und übergeben hier denWert "4". |
Rückgabewert:
Wurde "nIconIndex" auf "-1" gesetzt so gibt die Funktion die Anzahl der vorhandenen Icons der gefundenen Datei zurück. Andernfalls liefert die Funktion für einen erfolgreichen Aufruf die Anzahl der erfolgreichextrahierten Icons zurück bzw. bei einem Fehler "0".
Beispiel:
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("c:\windows\system\pifmgr.dll", -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("c:\windows\system\pifmgr.dll", 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