Page 1 sur 1

ExtractLargeIcon

Publié : jeu. 02/août/2007 23:24
par SpaceMan
Salut à tous
voici un code du soldat inconnu qui extrait les icones aux formats 16*16 et 32* 32. Mais je voudrais que ce code utilise le format 48*48
Merci pour votre aide

Code : Tout sélectionner

; Auteur : Denis - Le Soldat Inconnu 
; Version de PB : 3.90 
; 
; Explication du programme : 
; Récupérer l'icône au format 16*16 ou 32*32 associé à un fichier ou à un dossier. 


Procedure.l ExtractSmallIconFile(IconPath.s) 
  ; Cette procedure permet d'extraire l'ID de l'icône 16*16 associé au type de fichier ou au dossier dont l'adresse est IconPath 
  SHGetFileInfo_(IconPath, 0, @InfosFile.SHFILEINFO, SizeOf(SHFILEINFO), #SHGFI_ICON | #SHGFI_SMALLICON) 
  ProcedureReturn InfosFile\hIcon 
EndProcedure 

Procedure.l ExtractLargeIconFile(IconPath.s) 
  ; Cette procedure permet d'extraire l'ID de l'icône 32*32 associé au type de fichier ou au dossier dont l'adresse est IconPath 
  SHGetFileInfo_(IconPath, 0, @InfosFile.SHFILEINFO, SizeOf(SHFILEINFO), #SHGFI_ICON | #SHGFI_LARGEICON) 
  ProcedureReturn InfosFile\hIcon 
EndProcedure 



;- Exemple de chargement d'image 

Procedure Open_Window() 
  If OpenWindow(0, 0, 0, 200, 130, "Test - Icône", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 

    If CreateGadgetList(WindowID(0)) 
      
      ButtonGadget(2, 5, 5, 190, 25, "Ouvrir un fichier") 
      
      ImageGadget(0, 92, 45, 16, 16, ExtractSmallIconFile("C:\")) ; Affiche l'icône au format 16 * 16 de "C:\" 
      ImageGadget(1, 84, 70, 32, 32, ExtractLargeIconFile("C:\")) ; Affiche l'icône au format 32 * 32 de "C:\" 
      
    EndIf 
  EndIf 
EndProcedure 

Procedure bouton() 
Filtre$ = "Texte (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|Tous les fichiers (*.*)|*.*" 
  Filtre = 2    ; utiliser  par défaut le premier des trois filtres possibles 
  
  IconPath.s = OpenFileRequester("", "c:\", "Tous les fichiers|*.*", 0) 
  If IconPath <> "" 
    SetGadgetState(0, ExtractSmallIconFile(IconPath)) ; On change l'image 
     SetGadgetState(1, ExtractLargeIconFile(IconPath)) 
    ;SaveFileRequester("Choisissez un fichier à sauvegarder",Str(ExtractLargeIconFile(IconPath)), Filtre$, Filtre) 
  EndIf 
EndProcedure 


;- Debut du programme 

Open_Window() 

Repeat 
  event = WaitWindowEvent() 
  
  If event = #PB_Event_Gadget 
    Select EventGadget() ; boutons, zone de texte, ... 
      Case 2 
        bouton() ; Si on souhaite ouvrir un fichier 
    EndSelect 
  EndIf 
  
Until event = #PB_Event_CloseWindow 

End 

Publié : mer. 08/août/2007 20:18
par SpaceMan
Slt à tous jai eu la solution sur le forum anglais. Il fallait remplacer la constante API suivante #SHGFI_LARGEICON par #SHGFI_SHELLICONSIZE. et encore faudrait t-il que le système sois configurer pour afficher les icones 48*48.
voila :wink: