nerix27
Messages postés86Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention21 juin 2007
-
15 déc. 2004 à 17:02
cs_gluk
Messages postés43Date d'inscriptionmercredi 30 avril 2003StatutMembreDernière intervention25 avril 2008
-
26 juil. 2005 à 22:26
Bonjour,
je développe une appli ressemblant à l'exploreur de Windows...
Pour lui ressembler à la goutte d'eau, je veux afficher l'icône type en face du fichier correspondant (ex : pour un fichier Word, il affiche l'îcone bleue avec le W)...
Je suis pas loin de réussir mais je bloque sur un truc...
Pour chaque fichier, je récupère son extension, après je vais dans la base de registre pour voir son type...
Après je vais chercher la valeur de la chaine suivante :
Là il me sort l'emplacement de l'icône de Word :
C:\WINNT\Installer\{0001040C-78E1-11D2-B60F-006097C998E7}\wordicon.exe,1
C'est dans un fichier exécutable, et le 1 signifie que c'est la première icône dans cette bibliothèque...
Alors maintenant, afin de pouvoir l'afficher dans mon listView, je suppose que je doive mettre mon icône dans une ImageList
ImageList img = new ImageList();
img.Images.Add(Image.FromFile("C:\WINNT\Installer\{0001040C-78E1-11D2-B60F-006097C998E7}\wordicon.exe,1"));
Et ce code plante...
Quand je vais dans les détails de l'erreur ça me met qu'il trouve pas le fichier : System.IO.FileNotFoundException
Est-ce parce que le répertoire c:\Winnt\Installer\ est un répertoire réservé à windows, et que mon prog n'aurait pas les droits pour rentrer dedans ????
Je n'ai pas encore trouvé le moyen d'ajouter cette icône à mon ImageList...
Et juste pour voir, j'ai retiré le '1' à la fin et ça met une autre erreur : out of memory
Alors, si quelqu'un s'y connait là dedans, qu'il me réponde...
Merci d'avance...
Et bonnes fêtes à tous...
NB : là je met dans mon code le chemin direct pour une icône Word afin de mieux vous expliquer , mais dans mon prog c'est automatisé dans une boucle...
nerix27
Messages postés86Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention21 juin 20072 15 déc. 2004 à 17:37
Re-re-bonjour,
à force de surfer, j'ai trouvé la soluce...
Alors, il faut ajouter le namespace
using System.Runtime.InteropServices;
Dans votre classe, vous devez déclarez une fonction système qui se trouve dans une dll du système :
[DllImport("Shell32.dll")]
public extern static int ExtractIconEx( string nomFich,
int iconIndex,
IntPtr[] tabLargeIcon,
IntPtr[] tabSmallIcon,
int nbIcons );
Et ensuite, dans le code, on met :
ImageList img = new ImageList();
...
IntPtr[] Icone = new IntPtr[1];
int n = ExtractIconEx(@"C:\\WINNT\\Installer\\{0001040C-78E1-11D2-B60F-006097C998E7}\\wordicon.exe", 1, null, Icone, 1 );
Icon ic = Icon.FromHandle(Icone[0]);
img.Images.Add(ic);
...
listView.SmallImageList = img;
listView.Items.Add("fichier_exemple.doc");
listView.Items[index].ImageIndex = 0;