enregistrer une icone

Programmation d'applications complexes
djfeeler2
Messages : 65
Inscription : lun. 02/juil./2007 20:57

enregistrer une icone

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: enregistrer une icone

Message 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
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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:
djfeeler2
Messages : 65
Inscription : lun. 02/juil./2007 20:57

Message 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
Répondre