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

Delphi Discussion :

afficher l'icone d'un fichier dans une listbox


Sujet :

Delphi

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Points : 91
    Points
    91
    Par défaut afficher l'icone d'un fichier dans une listbox
    Salut tout le monde,
    Derrière mon post se cachent en fait deux questions :
    1) Comment récupérer l'icône d'un fichier ?

    En fait jusqu'à présent j'arrive bien à récupérer l'icône associée au fichier que je met directement dans une TImage en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    img.Picture.Icon.ReleaseHandle;
    img.Picture.Icon.Handle := ExtractAssociatedIcon(hInstance, pchar(filename),lpiIcon);
    Mais ça ne me convient pas. Ce que je voudrais faire ce serait plutôt de la récupérer pour ensuite l'afficher dans une tlistbox. D'ou ma deuxième question :

    2) Comment afficher une image dans une listbox ?

    Encore une fois j'ai tenté quelques trucs mais qui ne répondent pas vraiment à mes espérances. J'ai notament étudié ce bout de code (dans le onDrawItem de ma listbox) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imagelist1.Draw(Listbox1.canvas, Rect.Left + 4, Rect.Top + marge, Index);
    Mais comme vous pouvez le constatez cette méthode utilise une TListImage. Tout irait bien si je le pouvais aussi mais il se trouve que les items de ma listbox sont crées dynamiquement et ma listbox est amenées à être souvent réinitialisée. Pour des raisons de performances je préfèrerais ne pas avoir à faire de même avec une TListImage.
    D'avance merci.

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    Il y a une autre méthode: récupérer la liste des icones directement dans la TImageList puis récupérer l'index de l'icone à l'aide du type de fichier.
    J'ai fait 2 routines pour ça:

    La première sert à charger la TImageList de la liste des icones. Le paramètre SmallImages permet de spécifier si on veut des petits(vsList/vsReport) ou des grands icones:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure GetWinIconList(ImageList:TImageList;SmallImages:boolean=false);
    var SHFileInfo:TSHFileInfo;
    begin
      ImageList.ShareImages:=true;
      if SmallImages then
          ImageList.Handle:=SHGetFileInfo('',0,SHFileInfo,SizeOf(SHFileInfo),SHGFI_SYSICONINDEX or SHGFI_SMALLICON)
      else
          ImageList.Handle:=SHGetFileInfo('',0,SHFileInfo,SizeOf(SHFileInfo),SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
    end;
    La suivante permet de récupérer l'index de l'icone associé au type de fichier spécifié dans le paramètre Extension (avec ou sans le .) dans la TImageList:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function GetExtIconIndex(Extension:string):Integer;
    var SHFileInfo:TSHFileInfo;
    begin
        if Extension<>'' then
      begin
            if Extension[1]<>'.' then Extension:='.'+Extension;
          Result:=-1;
     
          if SHGetFileInfo(PCHar(Extension), 0, SHFileInfo, SizeOf(TSHFileInfo),
              SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES or SHGFI_TYPENAME)<>0 then
                Result:=SHFileInfo.iIcon;
      end else result:=-1;
    end;
    De cette façon, la TImageList ne change pas. Tu auras seulement à chercher l'index pour chaque type de fichier

  3. #3
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par Pedro
    Il y a une autre méthode: récupérer la liste des icones directement dans la TImageList puis récupérer l'index de l'icone à l'aide du type de fichier.
    Merci Pedro pour ta réponse. Après quelques recherches je suis effectivement arrivé à cette méthode qui me convient plutôt bien. Le seul problème c'est qu'on récupère les icones par défaut de Windows et non les icones associées au fichier.

    Sinon j'ai bien réussi à faire ce que je désirais mais j'ai pas eu le choix je suis passé par une listImage (de toute façon je crois que je n'aurais pas le choix ). Le défaut, car malheureusement il y'en a un, c'est que l'icône affichée n'est qu'une réduction mal faite de l'icone associée au fichier. Au final j'ai donc bien ma listbox contenant les bonnes icones mais le rendu n'est pas top. Si quelqu'un voit une solution, je suis preneur.

    Pour finir je crois donc que je vais me tourner vers la solution que tu as cité. Au moins je ne toucherai plus à ma liste d'images et le rendu sera de meilleur qualité.

    En tout cas merci encore de ta réponse.
    ++

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

Discussions similaires

  1. Afficher les fichiers dans une listbox sans le chemin complet
    Par thewarior dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/10/2014, 22h11
  2. Afficher le nom d'un fichier dans une fenêtre
    Par GagnetYvon dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 04/09/2012, 18h03
  3. afficher le contenu d'un fichier dans une interface
    Par kawther dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 16/11/2008, 12h08
  4. [VB6]N'afficher que certain type de fichier dans une FileListBox
    Par Misha dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 03/11/2008, 18h34
  5. [VB6]Lire le contenu d'un fichier dans une listbox
    Par gizmorambo dans le forum VB 6 et antérieur
    Réponses: 24
    Dernier message: 11/04/2006, 12h51

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