Page 1 sur 1

enregistrer une icone

Publié : ven. 31/août/2007 17:23
par djfeeler2
Salut a tous !

J'aimerais savoir s'il existe une fonction ou un moyen pour récupérer l'icone d'un fichier pous que je puisse l'afficher dans une listeicongadget ???

merci d'avance

Re: enregistrer une icone

Publié : ven. 31/août/2007 18:45
par Backup
djfeeler2 a écrit :Salut a tous !

J'aimerais savoir s'il existe une fonction ou un moyen pour récupérer l'icone d'un fichier pous que je puisse l'afficher dans une listeicongadget ???

merci d'avance
voir comment fonctionne ce code :)

Code : Tout sélectionner

; Idea from Rikuk
; File specifies the File where Icon is extracted
; Icon = 0 To ? --> Return handle of Image
; Icon = -1 --> Return the count of Icon

Procedure IconExtract(File.s,Icon.l)
  ProcedureReturn ExtractIcon_(0,File,Icon)
EndProcedure

fichier$ = OpenFileRequester("ouvrir fichier icone","","Fichier|*.*",0)
;/ Test

Count=IconExtract(fichier$,-1)
OpenWindow(0,0,0,130,80,Str(Count)+" Icons",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
ButtonImageGadget(0,10,10,48,48,IconExtract(fichier$,pointer))
TextGadget(1,80,30,40,20,"n° 1")
TextGadget(2,10,60,130,20,GetFilePart(fichier$))


Repeat
  event=WaitWindowEvent()
 
  If event= #PB_Event_Gadget And EventGadget()=0 And EventType()=#PB_EventType_LeftClick
    pointer+1
    If pointer=Count : pointer=0 : EndIf
    SetGadgetState(0,IconExtract(fichier$,pointer))
    SetGadgetText(1,"n° "+Str(pointer+1))
  EndIf
Until event=#PB_Event_CloseWindow

Publié : ven. 31/août/2007 18:45
par Chris
Non. Pas de commmande dans PureBasic pour faire ça.

Si tu as la licence de PureBasic, tu peux le faire avec l'Api, sinon, tu peux .... heu... je sais pas. :lol:

Publié : ven. 31/août/2007 22:17
par djfeeler2
Merci pour vos reponse

oui j'ai la licence ! avec un peu de recherche j'ai trouvé ce code

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