ExtractIconEx_()-Demo

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

ExtractIconEx_()-Demo

Beitrag von Kiffi »

Hallo,

die Windows API-Funktion ExtractIconEx() ermöglicht es, unterschiedliche
Formate aus Icons auszulesen. In nachfolgendem Beispiel werden die in
der Datei 'pifmgr.dll' vorhandenen Icons und deren Formate ermittelt und
dargestellt.

Code: Alles auswählen

Structure SHELLICONLIST
  hLarge.l
  hSmall.l
EndStructure

Enumeration
  #frmMain
  #lvwLargeIcons
  #lvwSmallIcons
EndEnumeration
 

; API-Definition:
; UINT ExtractIconEx(
;  LPCTSTR lpszFile,
;  int nIconIndex,
;  hIcon *phiconLarge,
;  hIcon *phiconSmall,
;  UINT nIcons
; );

; Pfad und Name ggf. anpassen
sIcon.s = "C:\WINNT\system32\pifmgr.dll"

If FileSize(sIcon) = -1
  MessageRequester("","Datei " + sIcon + " ist nicht vorhanden!")
  End
EndIf  

; Anzahl Dateien in der Datei auslesen
AnzahlIcons = ExtractIconEx_(sIcon,-1,0,0,0)

If AnzahlIcons = 0
  MessageRequester("","Keine Icons gefunden!")
  End
EndIf

myIcon.SHELLICONLIST

If OpenWindow(#frmMain, 0, 0, 500, 400, #PB_Window_SystemMenu | #PB_Window_ScreenCentered , "ExtractIconEx_()-Demo")
  
  If CreateGadgetList(WindowID(#frmMain))
    
    ListIconGadget(#lvwLargeIcons, 0, 0, 250, 400, "", 0)
    ChangeListIconGadgetDisplay(#lvwLargeIcons, 0)
    
    ListIconGadget(#lvwSmallIcons, 251, 0, 249, 400, "", 0)
    ChangeListIconGadgetDisplay(#lvwSmallIcons, 2)
    
    ; Auslesen aller Icons
    
    For Counter = 0 To AnzahlIcons - 1
      
      RetVal = ExtractIconEx_(sIcon,Counter,@myIcon\hLarge,@myIcon\hSmall,1)
      
      If RetVal
        
        Debug myIcon\hLarge
        Debug myIcon\hSmall
      
        AddGadgetItem(#lvwLargeIcons,-1,"",myIcon\hLarge)
        AddGadgetItem(#lvwSmallIcons,-1,"",myIcon\hSmall)
        
      EndIf
      
    Next
    
    Repeat
      
    Until WaitWindowEvent() = #PB_Event_CloseWindow
      
    CloseWindow(#frmMain)
    
  EndIf
  
EndIf
Thanks to Justy für den entscheidenden Hinweise zur ExtractIconEx_()-API!

Grüße ... Kiffi
a²+b²=mc²