IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

icon dans treeview ou listview


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut icon dans treeview ou listview
    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?

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    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?

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    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

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    bon, je suis arrive ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HICON IconApp; 
         IconApp = ExtractIcon(HInstance, NomFichier, 0);
    ceci me recupere l'icone de l'application dans IconApp

    mais je vois pas du tout comment faire pour charger l'icon du fichier dans le listview

    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");
      }
    Si qq a une piste?

  6. #6
    Membre habitué
    Homme Profil pro
    Mickaël
    Inscrit en
    Mai 2003
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Mickaël
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2003
    Messages : 106
    Points : 133
    Points
    133
    Par défaut
    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
    Nova Music Player, lecteur de musique pour win10
    http://novamusic.fpc-france.com

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    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:

    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);
             }
      }
    }
    mais sa fonctionne toujours pas! je ne recupere pas l'icon du fichier!
    j'ai un icon qui represente une main!
    je comprends pas du tout

  8. #8
    Membre habitué
    Homme Profil pro
    Mickaël
    Inscrit en
    Mai 2003
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Mickaël
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2003
    Messages : 106
    Points : 133
    Points
    133
    Par défaut
    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
    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);
     ...
    dans la création de mon formulaire, cela initialise mon TImageList.


    Puis lorsque j'ai besoin de connaitre l'icone d'un fichier, j'appel
    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);
     ...
    et cela me retourne l'index de l'icone se trouvant dans le TImageList
    Nova Music Player, lecteur de musique pour win10
    http://novamusic.fpc-france.com

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    merci pour ton aide mikyfpc mais rien ne fonctionne!
    A l'aide! j'en peux plus!

  10. #10
    Membre habitué
    Homme Profil pro
    Mickaël
    Inscrit en
    Mai 2003
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Mickaël
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2003
    Messages : 106
    Points : 133
    Points
    133
    Par défaut
    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 ?
    Nova Music Player, lecteur de musique pour win10
    http://novamusic.fpc-france.com

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    voila le source de mon code avec tes modifs!

    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);
        }
    j'ai une fenetre Debbugger Exception Notification avec ecris:
    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.

  12. #12
    Membre habitué
    Homme Profil pro
    Mickaël
    Inscrit en
    Mai 2003
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Mickaël
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2003
    Messages : 106
    Points : 133
    Points
    133
    Par défaut
    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...
    Nova Music Player, lecteur de musique pour win10
    http://novamusic.fpc-france.com

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    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?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème affichage icon dans treeView
    Par midos_ab dans le forum JSF
    Réponses: 2
    Dernier message: 01/02/2011, 16h00
  2. Image ou icon dans un Treeview
    Par Dereck07 dans le forum Delphi
    Réponses: 8
    Dernier message: 23/04/2007, 18h45
  3. image(icone) dans un treeview
    Par t0ine dans le forum C++Builder
    Réponses: 8
    Dernier message: 19/03/2007, 13h31
  4. icone dans un treeview
    Par maxxou dans le forum VB.NET
    Réponses: 2
    Dernier message: 15/03/2007, 20h01
  5. Problème d'icone dans un treeview
    Par t0ine dans le forum C++Builder
    Réponses: 1
    Dernier message: 09/03/2006, 16h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo