salut a tous,
comment faire pour trouver lister les fichiers d'un repertoire dans un treeview ou list view et surtout affichier les icons suivant le type de fichiers?
salut a tous,
comment faire pour trouver lister les fichiers d'un repertoire dans un treeview ou list view et surtout affichier les icons suivant le type de fichiers?
Salut
Tu dois associer une ImageList au TreeView et ensuite affecter un numéro d'image au noeud en fonction du type de fichier.
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
y a pas une autre solution?
je veux dire y a pas un moyen de recuperer les icons system de tel ou tel autres fichiers?
je vais pas devoir creer autant de image que de type de fichier?
dois bien avoir une autre soluce qd meme?
genre recupere l'icon d'un fichier? non?
Fais une recherche approfondie sur le forum avec "ExtractIcon", où un truc comme ça.
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
bon, je suis arrive ici:
ceci me recupere l'icone de l'application dans IconApp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 HICON IconApp; IconApp = ExtractIcon(HInstance, NomFichier, 0);
mais je vois pas du tout comment faire pour charger l'icon du fichier dans le listview
Si qq a une piste?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 if (OpenDialog1->Execute()) { ListItem = ListView1->Items->Add(); ListItem->Caption = OpenDialog1->FileName; ListItem->SubItems->Add("taille"); ListItem->SubItems->Add("attribut"); ListItem->SubItems->Add("date"); }
pour afficher les icones correspond a un fichier, je passe par un TImageList contenant les icones.
ensuite il suffit de mettre a jour la propriété ImageIndex de ton item.
Pour remplir un TImageList avec les icones des fichiers :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 DWORD ImageHandle; SHFILEINFO info; ImageHandle = SHGetFileInfo("", 0, &info, sizeof(info), SHGFI_ICON | SHGFI_LARGEICON | SHGFI_SYSICONINDEX); if (ImageHandle != 0) { ObjImgFichierLarge->Handle = ImageHandle; ObjImgFichierLarge->ShareImages = true; }
Miky
bon voila, j'ai place dans une form:
un Tbutton, un Topendialogue, un Timagelist, un Tlistview et dans l'evenement buttonclick j'ai mis ceci:
mais sa fonctionne toujours pas! je ne recupere pas l'icon du fichier!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 void __fastcall TForm1::Button1Click(TObject *Sender) { TListItem *ListItem; DWORD ImageHandle; SHFILEINFO info; OpenDialog1->Title = "Visualisation de l'icon"; if (OpenDialog1->Execute()) { ImageHandle = SHGetFileInfo(OpenDialog1->FileName.c_str(), 0, &info, sizeof(info), SHGFI_ICON | SHGFI_LARGEICON | SHGFI_SYSICONINDEX); if (ImageHandle != 0) { ListView1->ViewStyle = vsIcon; ListView1->SmallImages = ImageList1; ListView1->LargeImages = ImageList1; ImageList1->Handle = ImageHandle; ImageList1->ShareImages = true; ListItem = ListView1->Items->Add(); ListItem->Caption = ExtractFileName(OpenDialog1->FileName); } } }![]()
j'ai un icon qui represente une main!![]()
je comprends pas du tout
salut,
Il te manque l'affectation de l'icon dans l'item de ta liste (ListItem->ImageIndex) .
je ne connais plus le nom exacte de la propriété, mais c'est dans "info"
Par contre, ce que je fais, j'appel
dans la création de mon formulaire, cela initialise mon TImageList.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ImageHandle = SHGetFileInfo("", 0, &info, sizeof(info), SHGFI_ICON | SHGFI_LARGEICON | SHGFI_SYSICONINDEX); ...
Puis lorsque j'ai besoin de connaitre l'icone d'un fichier, j'appel
et cela me retourne l'index de l'icone se trouvant dans le TImageList
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ImageHandle = SHGetFileInfo(nomFichier, 0, &info, sizeof(info), SHGFI_ICON | SHGFI_LARGEICON | SHGFI_SYSICONINDEX); ...
merci pour ton aide mikyfpc mais rien ne fonctionne!![]()
![]()
A l'aide! j'en peux plus!
voilà le code exact d'une fonction que j'utilise pour récupérer l'icone d'un fichier.
Au préalable, dans le constructeur de ma form, je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SHFILEINFO info; DWORD ImageHandle = SHGetFileInfo("", 0, &info, sizeof(info), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_SYSICONINDEX); if (ImageHandle != 0) { ObjImageFichier->Handle = ImageHandle; // ObjImageFichier est un TImageList ObjImageFichier->ShareImages = true; }
J'ai attaché mon objet TImageList a ma listview (SmallImage pour mon cas)
Et la, c'est le code de ma fonction qui place l'icone du fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SHFILEINFO info; DWORD result; ... result = SHGetFileInfo(filenamepath.c_str(), 0, &info, sizeof(info), SHGFI_TYPENAME | SHGFI_ICON |SHGFI_SMALLICON | SHGFI_SYSICONINDEX); if(result != 0) { pItem->ImageIndex = info.iIcon; } ...
il se passe quoi dans ton cas ? Erreur de compil, erreur d'execution, ou rien ?
voila le source de mon code avec tes modifs!
j'ai une fenetre Debbugger Exception Notification avec ecris:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; SHFILEINFO info; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { DWORD ImageHandle = SHGetFileInfo("", 0, &info, sizeof(info), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_SYSICONINDEX); if (ImageHandle != 0) { ObjImageFichier->Handle = ImageHandle; // ObjImageFichier est un TImageList ObjImageFichier->ShareImages = true; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { DWORD result; TListItem *pItem; OpenDialog1->Title = "Visualisation de l'icon"; if (OpenDialog1->Execute()) { result = SHGetFileInfo(OpenDialog1->FileName.c_str(), 0, &info, sizeof(info), SHGFI_TYPENAME | SHGFI_ICON |SHGFI_SMALLICON | SHGFI_SYSICONINDEX); if(result != 0) { pItem->ImageIndex = info.iIcon; pItem = ListView1->Items->Add(); pItem->Caption = ExtractFileName(OpenDialog1->FileName); }
Project .exe raised execption class EAccessViolation with message 'Access violation at adresse 4013cffb in module vcl60.bpl. read of adresse 00000025. process Stopped. use step or run to conitnue.
si je fais run sa me donne :
'Access violation at adresse 4013cffb in module vcl60.bpl. read of adresse 00000025.
le probleme vient de ta création d'item. Tu déclares un pointeur vers un TListItem et tu essayes de renseigner ImageIndex avant l'allocation de ton pointeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 TListItem *pItem; pItem = ObjLFichiers->Items->Add(); pItem->ImageIndex = info.iIcon; etc...
Merci mikyfpc sa marche nickel!
j'avais pas capter l'histoire d'allocation!![]()
merci bien! vais pouvoir finir le reste de mon prog!
tu pense que dans le cas d'un fichier sur une serveur ou fichier sur FTP sa marche aussi?
Partager