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