|
| Iniciado por arnaud.borschneck, 12,ago. 2010 13:44 - 6 respuestas |
| |
| | | |
|
| |
| Publicado el 12,agosto 2010 - 13:44 |
bonjour,
je recherche comment afficher l'icône d'un fichier (ou l'icône associé à un fichier) dans un tableau
j'ai tenté d'utiliser les différents exemples trouvés sur le net qui ne concernent que les icônes associés (API("SHELL32","ExtractIconExA", sDefaultIcon, nIconIndex, Null, &hIcon, 1) et API("SHELL32","ExtractIconA", 0, sDefaultIcon, nIconIndex) )
ils marchent pour beaucoup de cas, mais pas, par exemple pour les fichiers PDF.
Quelqu'un connaitrait-il un code qui fonctionne dans tous les cas ?
merci pour toute aide
Arnaud |
| |
| |
| | | |
|
| | |
| |
| Publicado el 12,agosto 2010 - 17:05 |
| |
| |
| | | |
|
| | |
| |
| Publicado el 12,agosto 2010 - 19:32 |
merci pour votre réponse
étrangement, le problème est inverse du programme que j'avais trouvé sur le net. Il me trouve l'icône du PDF, mais pas celui de Word ou Excel...
J'ai donc très légèrement modifié les deux codes pour que cela me donne un résultat.
dans le première procédure, si on ne trouve pas d'icône, au lieu de s'arrêter, on lance la procédure qui se trouve après (celle de FreeDev)
Dans les deux cas, je renvoie un image mémoire (car je veux ajouter l'icône en question dans un tableau)
Les problèmes que je rencontre : - ce code ne fonctionne pas dans tous les cas (fichier TXT par exemple). - je suis obligé de passer par un champs image dans la fenêtre. - il est sans doute loin d'être optimisé
en attendant, il répond en bonne partie à mon souhait si quelqu'un à une idée pour pour l'améliorer, je suis preneur ^_^
//////
// Résumé : Dessine l'icone associée à une extension de fichier, ou d'un fichier en particulier // Paramètres : // sFileName (chaîne) : Nom du fichier ou extension avec le "." (ex: ".doc") // sNomChpImage (chaîne - valeur par défaut="") : Nom du Champ Image // hDC (entier système - valeur par défaut=0) : ou hDC du champ image renvoyé par dDebutDessin() // nTaille (entier - valeur par défaut=16) : 16, 32, 48, 64 // Valeur de retour : // Type indéterminé : // booléen // // Exemples : // DessineIconeFichier(".doc","IMG_Icone") // DessineIconeFichier("C:\Test.exe","",hDC)
PROCEDURE DessineIconeFichier(sFileName est chaîne, sNomChpImage est chaîne="", ... LOCAL hDC est entier système=0, nTaille est entier = 32) SI sNomChpImage<>"" _ET_ PAS ChampExiste(sNomChpImage) ALORS RENVOYER "" FIN
bRes est booléen
sDefaultIcon est chaîne = SysRep(srSystème) + "\SHELL32.DLL" nIconIndex est entier sFileExt est chaîne sProgramName est chaîne nbIcons,nIndex,nError sont entier hIcon est entier système SNomProgramme est une chaîne nHndIcone est une chaîne
sFileExt = Minuscule(fExtraitChemin(sFileName,fExtension))
SELON sFileExt CAS ".ico" SI fFichierExiste(sFileName) ALORS sDefaultIcon=sFileName nIconIndex = 0 GOTO DRAW_ICON FIN CAS ".exe" //sDefaultIcon = SysRep(srSystème) + "\SHELL32.DLL" nIconIndex = 2 //Icone de l'executable (si nom de fichier complet fourni) SI fFichierExiste(sFileName) ALORS sDefaultIcon=sFileName nIconIndex = 0 FIN GOTO DRAW_ICON FIN
SI RegistreExiste("HKEY_CLASSES_ROOT\"+sFileExt) ALORS sProgramName = RegistreLit("HKEY_CLASSES_ROOT\"+sFileExt,0) sDefaultIcon = RegistreLit("HKEY_CLASSES_ROOT\"+sProgramName + "\DefaultIcon",0) nIndex = Position(sDefaultIcon, ",", Taille(sDefaultIcon), DepuisFin) SI nIndex ALORS sDefaultIcon = sDefaultIcon[[A nIndex-1]] nIconIndex = sDefaultIcon[[nIndex+1 A]] FIN FIN
DRAW_ICON: SI nTaille=16 ALORS //Petite icone nbIcons = API("SHELL32","ExtractIconExA", sDefaultIcon, nIconIndex, Null, &hIcon, 1) FIN
SI hIcon DANS (-1,0,1) ALORS //Icone standard hIcon = API("SHELL32","ExtractIconA", 0, sDefaultIcon, nIconIndex) FIN
SI hIcon DANS (-1,0,1) ALORS RENVOYER IconeAssocieeFichier(sFileName, sNomChpImage) SINON SI sNomChpImage<>"" ALORS {sNomChpImage,indChamp}..Visible=Faux hDC = dDébutDessin(sNomChpImage) nError = API("USER32","DrawIconEx",hDC, 0, 0, hIcon, nTaille, nTaille, 0, 0, 3) {sNomChpImage,indChamp}..Visible=Vrai SINON nError = API("USER32","DrawIconEx",hDC, 0, 0, hIcon, nTaille, nTaille, 0, 0, 3) FIN FIN
API("USER32","DestroyIcon",hIcon)
RENVOYER dSauveImageJPEG(sNomChpImage,enMémoire)
///////
PROCEDURE IconeAssocieeFichier(sNomFichier, SChampImage)
sExtension est une chaîne sNomProgramme est une chaîne nHndIcone est un entier
SI sNomFichier = "" ALORS RENVOYER "" FIN
sExtension = fExtraitChemin(sNomFichier,fExtension)//Minuscule("." + ExtraitChaîne( sNomFichier, ChaîneOccurrence(sNomFichier,"."), 1,".")) sNomProgramme = RegistreLit("HKEY_LOCAL_MACHINE\SOFTWARE\Classes\" + sExtension,"") sNomProgramme = RegistreLit( "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\" + sNomProgramme + "\shell\open\command", "") sNomProgramme = Minuscule(sNomProgramme)
SI Position(sNomProgramme,"%systemroot%") <> 0 ALORS sNomProgramme = Remplace(sNomProgramme,"%systemroot%",SysRep()) FIN sNomProgramme = SansEspace(ExtraitChaîne(sNomProgramme,1,"%"))
//Suppression des guillemets : sNomProgramme = Remplace(sNomProgramme,"""""","") sNomProgramme = Remplace(sNomProgramme,Caract(34),"") sNomProgramme = SansEspace(sNomProgramme)
//// Appel d`api pour recuperer le handle de l`icone de l`executable nHndIcone = API("SHELL32","ExtractIconA",SysInstance(),sNomProgramme,0) nHandleChpImage est un entier nHandleChpImage = dDébutDessin(SChampImage) API("user32","DrawIcon",nHandleChpImage,0,0,nHndIcone)
RENVOYER dSauveImageJPEG(SChampImage,enMémoire) |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 88 mensajes |
|
| Publicado el 12,febrero 2017 - 19:48 |
Bonjour,
Ayant la même problématique, je déterre ce sujet ancien.
Ci-joint un code que j'ai récupéré et adapté car j'avais des soucis pour récupérer les icônes des .txt et des .pdf.
PROCEDURE GLOBALE IconeFichier_Récupèrer(sFileName est chaîne, sNomChpImage est chaîne="",LOCAL hDC est entier système=0, nTaille est entier = 16) SI sNomChpImage<>"" _ET_ PAS ChampExiste(sNomChpImage) ALORS RENVOYER Faux FIN
bRes est booléen
sDefaultIcon est chaîne = SysRep(srSystème) + "\SHELL32.DLL" nIconIndex est entier Extension est chaîne sProgramName est chaîne nbIcons,nIndex,nError sont entier hIcon est entier système
Extension = Minuscule(fExtraitChemin(sFileName,fExtension))
SELON Extension CAS ".ico" SI fFichierExiste(sFileName) ALORS sDefaultIcon=sFileName nIconIndex = 0 GOTO DRAW_ICON FIN CAS ".exe" // sDefaultIcon = SysRep(srSystème) + "\SHELL32.DLL" nIconIndex = 2 // Icône de l'executable (si nom de fichier complet fourni) SI fFichierExiste(sFileName) ALORS sDefaultIcon=sFileName nIconIndex = 0 FIN GOTO DRAW_ICON FIN
SI RegistreExiste("HKEY_CLASSES_ROOT\"+Extension) ALORS sProgramName = RegistreLit("HKEY_CLASSES_ROOT\"+Extension,0) sDefaultIcon = RegistreLit("HKEY_CLASSES_ROOT\"+sProgramName + "\DefaultIcon",0) SI sDefaultIcon="" ALORS sDefaultIcon = RegistreLit("HKEY_CLASSES_ROOT\"+sProgramName + "\shell\Open\command","") SI sDefaultIcon="" sDefaultIcon = RegistreLit("HKEY_LOCAL_MACHINE\SOFTWARE\Classes\"+sProgramName + "\shell\Open\command","") FIN sDefaultIcon=SansCaractèreGauche(ExtraitChaîne(Minuscule(sDefaultIcon),1,".exe")+".exe","""") nIconIndex = 0 GOTO DRAW_ICON FIN nIndex = Position(sDefaultIcon, ",", Taille(sDefaultIcon), DepuisFin) SI nIndex ALORS nIconIndex = sDefaultIcon[[nIndex+1 A]] sDefaultIcon = sDefaultIcon[[A nIndex-1]] FIN FIN
DRAW_ICON: OuvreFille(FEN_Icone) FichierIcone est chaîne = fRepDonnées+"\"+Majuscule(SansCaractèreGauche(Extension,"."))+".BMP" sNomChpImage=FEN_Icone.IMG_Icone..NomComplet {sNomChpImage,indChamp}..Largeur=nTaille {sNomChpImage,indChamp}..Hauteur=nTaille
SI nTaille=16 ALORS // Petite icône nbIcons = API("SHELL32","ExtractIconExA", sDefaultIcon, nIconIndex, Null, &hIcon, 1) SINON //Icone standard hIcon = API("SHELL32","ExtractIconA", 0, sDefaultIcon, nIconIndex) FIN
SI hIcon DANS (-1,0,1) ALORS Ferme(FEN_Icone) RENVOYER Faux FIN
SI sNomChpImage<>"" ALORS {sNomChpImage,indChamp}..Visible=Faux hDC = dDébutDessin(sNomChpImage) nError = API("USER32","DrawIconEx",hDC, 0, 0, hIcon, nTaille, nTaille, 0, 0, 3) {sNomChpImage,indChamp}..Visible=Vrai SINON nError = API("USER32","DrawIconEx",hDC, 0, 0, hIcon, nTaille, nTaille, 0, 0, 3) FIN dSauveImageBMP(FEN_Icone.IMG_Icone, FichierIcone)
API("USER32","DestroyIcon",hIcon) Ferme(FEN_Icone)
RENVOYER Vrai
Si cela peut servir à quelqu'un. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 88 mensajes |
|
| Publicado el 21,febrero 2017 - 14:54 |
Bonjour,
Face à des cas particuliers non pris en compte par le code précédent, j'ai amélioré ce dernier.
Si cela intéresse quelqu'un, je tiens ce code à dispo.
A+ |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 197 mensajes |
|
| Publicado el 30,agosto 2018 - 17:12 |
Bonjour
ayant voulu mettre les images des icones associées au fichier, je suis tombé sur la même problématique. Je suis surpris qu'il n'existe pas de fonction native en windev permettant d'obtenir ceci. 
Pourrais tu fournir ton code amélioré Sylvain STP? Pas insurmontable mais pas trop envie de me creuser la tête avec les API et compagnie...
Merci |
| |
| |
| | | |
|
| | |
| |
| Publicado el 27,agosto 2019 - 19:29 |
Bonsoir,
Ajoutez dans votre programme la ligne suivante
sNomProgramme= ExtraitChaîne(sNomProgramme,1,"/")
et ça fonctionne |
| |
| |
| | | |
|
| | | | |
| | |
|