begin process at 2008 07 21 02:02:00
1 213 553 membres
22 nouveaux aujourd'hui
14 167 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[ASTUCE] COMMENT AFFICHER LES ICÔNES DES FICHIERS LISTÉS DANS UN TFILELISBOX


Information sur la source

Description

  Unité : CustomFileCtrl

  Crée en réponse à une question posée sur le forum de DelphiFr :
    Comment afficher les icônes des fichiers listés dans un TFileLisBox
  http://www.delphifr.com/infomsg_TFILELISTBOX_861879.aspx#13
  Et
  http://www.delphifr.com/infomsg_TFILELISTBOX_867341.aspx#5

  J'en ai profité pour modifier également  TDirectoryListBox et  TDriveComboBox

  ceci sans installation supplémentaire de composants contrairement au composant qui se trouve ici :
  http://jansfreeware.com/janfilelistbox.zip qui était proposé par WhiteHippo

  Il suffit simplement d'ajouter "CustomFileCtrl" dans les uses
  (dans la partie Interface) de l'unité et surtout après FileCtrl (Voir Démo)

  Les modifications ne sont pas visible en mode Designe Time
  Uniquement en mode Run Time

Je précise également que je n'utilise pas d'ImageList
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de cincap le 09/01/2007 09:59:52

    Salut,

    Désolé d'être empéché de mettre ma note 10/10.

    Ce problème persiste assez souvent.

    @+,

    Cincap

  • signaler à un administrateur
    Commentaire de cincap le 09/01/2007 10:03:31

    Mon premier message à l'air d'avoir été effacé.

    Bonjour,

    Bravo pour ce super code qui répond au challenge lancé il y a quelque temps.

    Cela ne m'étonne pas que ce soit l'ami Cirec à l'origine de cette réponse, comme quoi.............

    @+,

    Cincap

  • signaler à un administrateur
    Commentaire de DorotheeJ le 09/01/2007 19:46:36

    bonjour,

    finalement tu as fait comme t'avais indiqué "DRJEROME", j'ai reconnu aussi la méthode "halftone" de "DRJEROME" (il avait réussi à réduire les icônes de manière jolie avec la méthode qu'il utilisait déjà pour les images)

    merci à tous les deux

    Dorotheej

  • signaler à un administrateur
    Commentaire de cincap le 09/01/2007 22:02:34

    Bonsoir,

    @ DorotheeJ, pourquoi après des messages d'insistance, l'ami DRJEROME n'a jamais répondu, n'a jamais voulu montrer même un bout de code de son astuce.

    Je pense tout simplement que si il avait su faire cette application sans composant externe, il n'aurait pas hésité à le placer sur le forum, car vu la difficulté, personne sur les forums n'a su répondre à ce challenge.

    Nous a t'il tous bluffé ??????????????????????

    L'important c'est que l'ami CIREC n'a pas hésité à en faire profiter tout le monde et je l'en félicite.

    @+,

    Cincap

  • signaler à un administrateur
    Commentaire de DorotheeJ le 09/01/2007 22:26:41

    en fait tu aimerais connaître sa méthode ? laisse-lui le temps de répondre, il n'a peut-être pas suivi la fin du débat

  • signaler à un administrateur
    Commentaire de japee le 09/01/2007 23:22:35 administrateur CS

    Bonsoir,

    On fait confiance à DorotheeJ pour mettre DRJerome au courant des dernières évolutions du débat, pas vrai ? ;-)

    Cirec > Simplement bravo et merci.
    - Bravo pour l'intérêt technique du code. Je n'ai pas encore eu le temps de me pencher sur ses finesses, mais je compte bien le faire, tu peux me croire.
    - Merci de mettre à la disposition des pauvres malheureux qui codent encore sous D4 cette belle TFileListBox qui agrémentera leurs tristes interfaces (ah, les beaux ShellListView et ShellListView des versions ultérieures...) :-)

    A +

  • signaler à un administrateur
    Commentaire de DRJEROME le 10/01/2007 00:19:29

    Hello les gars,

    j'avais transformé le zip qui vous tracassais en code ici :

    http://www.phidels.com/php/forum/forum.php3?forumtable=posts&mode=showpost&postid=112071

    je répondais à "dugueclin", c'était entre lui et moi, je n'ai jamais fait de promesse à CINCAP,en plus CINCAP a été tellement désagréable que je ne voyais aucune raison de lui répondre

    Ma méthode n'est pas phénoménale... effectivement elle fait appel à une "class" modifiée + mon classique "HALFTONE" dont je suis le premier à en avoir parlé sur le présent site (CIREC peut me citer à ce sujet, il n'ya pas de problème)

    Il me semble toutefois que ma méthode d'appel d'icône agit bien dans les dossiers où il y a beaucoup de fichiers (plus de rapidité, de fluidité) et il y a beaucoup d'amélioration à faire (mais bon ça donne des idées de base).

    On peut l'adapter à d'autres composants

    je peux me tromper... et je n'ai pas la science infuse.

    Je rappelle qu'ici on n'a aucune obligation et on évite les phrase u style "je veux, j'exige, urgent etc..."

    j'ai un boulot qui me prend du temps et je ne coche pas la case "être averti par mail", ça m'évite les tonnes d'emails que nous font subir les différents forums

    Donc désolé si je ne réponds pas en direct

    bonne nuit à tous

    drjerome

  • signaler à un administrateur
    Commentaire de DRJEROME le 10/01/2007 00:21:23

    PS: drjerome = JROD

  • signaler à un administrateur
    Commentaire de cincap le 10/01/2007 08:06:06

    Bonjour,

    @ DRJEROME "je répondais à "dugueclin", c'était entre lui et moi, je n'ai jamais fait de promesse à CINCAP,en plus CINCAP a été tellement désagréable que je ne voyais aucune raison de lui répondre"

    Je ne vais pas polémiquer sur ce sujet, mais je tiens à dire que j'ai été toujours très correct au sujet de mes messages.

    Je pensais qu'un forum ne se limitait pas à "je répondais à "dugueclin", c'était entre lui et moi".

    Je pensais aussi que le fait d'avoir trouver une astuce (souvent mélangée avec les astuces d'autres !) devait mettre sur le devant de la scène l'auteur.

    Pour les pauvres malheureux, qui codent encore sous D4, pour ma part, je code sous D6 (ce qui me convient parfaitement) mais je sais que tout le monde n'a pas Internet, et surtout ne peu suivre l'évolution des logiciels.

    Mettre des icones dans un TfileListBox est plus un challenge que de l'utiliser.

    La connaissance s'accroît quand on la partage.

    Sinon sans rancune si j'ai sans intention, froissé l'ego de certains.

    @+,

    Cincap

  • signaler à un administrateur
    Commentaire de DRJEROME le 10/01/2007 09:00:49

    Salut,

    je parlais du forum ou le débat avait débuté avec "duguesclin" (ce n'était pas dans le présent forum)

    pour le côté désagréable c'était : http://www.delphifr.com/infomsg_TFILELISTBOX_867341.aspx#7

    tu disais : "Pas de réponse, pourtant ce message s'adressait principalement à DRJEROME qui filtre ses aides et ses explications alors que les amis CIREC et WHITEHIPPO entres autres n'hésites pas à trouver et à proposer à tous, une solution exploitable."

    c'était maladroit, je ne suis pas toujours à toute heure sur tous les forums, si le message m'était adressé, il fallait mettre dans le titre : "@ drjerome", ça aurait évité les vexations inutiles, je ne regarde pas tous les messages du forum, quand je suis tombé là-dessus ça m'a surpris. Je pense que d'autres ne t'auraient pas fait de cadeau... Je suis resté correct cependant.

    bref, comme tu dis, on ne va pas polémiquer.

    regarde les différentes méthodes et construis-toi la tienne personnalisée

    Bonne prog

    Drjerome

  • signaler à un administrateur
    Commentaire de DRJEROME le 10/01/2007 09:02:34

    PS : ce n'est pas moi qui ai dit : "Pour les pauvres malheureux, qui codent encore sous D4"

  • signaler à un administrateur
    Commentaire de cincap le 10/01/2007 09:16:46

    Bonjour JROD,

    Tu as raison, cette annotation est relative au "sans réponse à mon message privé concernant ton exe" donc pas de problème avec ce qui vient de se passer et sans rancune.

    Comme confirmé, je programme sous D6 pour mon usage personnel et comme déjà dit, je suis plus attiré par la difficulté du code concernant un composant comme dans ce cas le TfileListBox et de constater jusqu'ou on peut aller pour le forcer à d'autres propriétés, car je ne pense pas que la propriété canvas de ce composant existe.

    Bravo à JROD et à CIREC.

    @+,

    Cincap

  • signaler à un administrateur
    Commentaire de DRJEROME le 10/01/2007 09:24:37

    merci

    sans rancune également

    drjerome

  • signaler à un administrateur
    Commentaire de DRJEROME le 10/01/2007 09:53:01

    oups j'ai oublié de répondre au dernier point

    j'ai utilisé le canvas du TfileListBox dans ma méthode

  • signaler à un administrateur
    Commentaire de cincap le 10/01/2007 10:22:34

    @ JROD

    Je l'ai constaté.

    Je viens de faire une application de test avec ta méthode et c'est aussi superbe et rapide, le challenge est donc atteint.

    Donc excellent travail et bravo pour l'astuce "Halftone".

    Bonne continuation.

    @+,

    Cincap

  • signaler à un administrateur
    Commentaire de cirec le 10/01/2007 14:53:40 administrateur CS

    Bon alors il faut quand même que je réponde ... lol

    Merci à vous pour vos appréciations et remarques.

    ensuite :

    Je n'utilise pas du tout la même méthode que DrJérome que ce soit pour récupérer ou pour afficher les Icônes dans le FileLisBox (avec les mêmes résultats)

    La ou il pourrait y avoir similitude c'est dans le TDirectoryListBox et TDriveComboBox
    Mais c'est déjà hors "challenge" ... lol

    Ensuite sur des gros répertoires ta version est effectivement plus rapide que la mienne mais de loin pas aussi fluide ...

    Pourquoi ?

    Tout simplement parce que je charge une fois pour toute les Icônes de tout le répertoire en une fois ... Alors que toi tu recharges l'icône a chaque appel de la Méthode : DrawItem

    Donc si tu charges le répertoire Systèm32 avec ta méthode le chargement initial est plus rapide certes mais la navigation dans le répertoire est ralenti pour cause de chargement d'icônes répétés ce qui chez moi ne se fait pas et du coup l'affichage est beaucoup plus rapide et fluide (avec l'ascenseur vertical)

    Je vais peut être réfléchir à une méthode intermédiaire:
    Entre le chargement complet et partiel bien sûr sans re-chargement à chaque affichage :) (à voir)


    Autre chose : vous pouvez mettre deux ou trois TFileListBox sur une même fiche et tout fonctionne parfaitement

    Et pour ceux qui ne l'aurait pas encore remarqué vous pouvez cliquer sur un Fichier de la FileListBox pour voir s'afficher des informations supplémentaires (à vous de les compléter si vous en voulez plus)

    Sinon moi aussi je code sous D4 Pro
    à ce propos:
    @Japee : si ça t'intéresse j'ai fait un XPMan pour D4
    ce qui est plus facile d'utilisation que les autres méthodes :)

    ps : je confirme pour HALFTONE de DrJérome c'est grâce à lui que je connais cette astuce

    et pour répondre à Cincap la propriété Canvas existe belle et bien dans TFileListBox mais elle n'est pas public (pas accessible) pour qu'elle le devienne tu dois dériver la Class TFileListBox comme nous l'avons fait DrJérome et moi même. Mais l'existence d'un Canvas n'est pas obligatoire pour pouvoir dessiner sur un composant mais c'est un autre débat ...

    @+
    Cirec

  • signaler à un administrateur
    Commentaire de DRJEROME le 10/01/2007 15:31:59

    Salut,

    oui c'est intéressant de faire le chargement des icônes sur un modèle intermédiaire ça ne devrait pas poser de problème.

    En ce moment je suis surbooké (orthographe ?), de mon côté ce ne sera pas immédiat (je précise)... mais bon, il faut aussi garder le contact avec nos proches sinon on fait de l'overdose de Delphi (hi! hi!)

    Bonne prog drjerome

  • signaler à un administrateur
    Commentaire de cincap le 10/01/2007 15:54:38

    Bonjour,

    @ Cirec, j'avais remarqué ce petit plus lors du click sur le fichier, fallait y penser !

    Et j'avais bien compris que la propriété canvas n'était pas public.

    Encore bravo à vous deux pour cet excellent code.

    @+,

    Cincap

  • signaler à un administrateur
    Commentaire de DRJEROME le 10/01/2007 21:15:26

    RE ;)

    j'ai essayé une méthode intermédiaire... c'était pas fameux (j'ai pas dû être bon)

    Par contre mon code original ne présente pas le problème d'ascenseur au scroling, j'ai essayé avec "c:/windows/system32" (car ce dossier contient beaucoup de fichiers)

    ça marche en spontané

    il ne faut pas utiliser le 1° exécutable (celui du zip) il présentait un composant "Image1" qui retardait tout

    vous me direz comment ça marche chez vous (pour mémoire le code est ici : http://www.phidels.com/php/forum/forum.php3?forumtable=posts&mode=showpost&postid=112071)

    merci de me communiquer vos tests

    drjerome

  • signaler à un administrateur
    Commentaire de DRJEROME le 10/01/2007 21:17:43

    (ps : j'ai 2118 fichiers dans system32 ça a l'air ok)

  • signaler à un administrateur
    Commentaire de cincap le 10/01/2007 23:50:36

    Bonsoir,

    Avec les 2 applications, dans "c:/windows/system32" je constate que le code de JROD lors uniquement du click sur l'ascenseur (pas sur les boutons en haut et bas), mon disque dur est sollicité par contre celui de Cirec, cela est fluide.

    Lors du test avec les boutons haut et bas, le code de JROD à l'air plus fluide tout comme celui de Cirec.

    @+,

    Cincap

  • signaler à un administrateur
    Commentaire de DRJEROME le 11/01/2007 07:56:15

    Salut,

    merci pour avoir testé ;)

    j'ai trouvé l'amélioration pour la fluidité

    je n'ai pas Delphi ici.

    Je vous donnerai le code à tester ce soir

    drjerome

    A+

  • signaler à un administrateur
    Commentaire de cincap le 11/01/2007 09:55:46

    Bonjour,

    Comme l'a rappelé JAPEE, ces améliorations concerne l'interêt technique et je pense une petite attention sympathique pour les malheureux qui utilisent ce légendaire composant.

    Encore bravo aux deux solutions proposées.

    Au fait JROD les icones dans ton code, peuvent t'ils aussi être configurés à 32x32 ?

    @+,

    Cincap

  • signaler à un administrateur
    Commentaire de DRJEROME le 11/01/2007 10:43:50

    en fait dans mon code les icones sont configurables automatiquement pour avoir toutes les tailles (proportionnellement à TfileListbox.itemHeight)

    drjerome JROD

  • signaler à un administrateur
    Commentaire de japee le 11/01/2007 23:35:08 administrateur CS

    @Cirec :
    pour l'équivalent de XPMan sous D4 j'utilise habituellement la méthode mise à notre disposition par Costello, sur cette page :
    http://www.phidels.com/php/forum/
    forum.php3?forumtable=posts&mode=showpost&postid=112071
    Elle me donne entière satisfaction, mais si ton approche est différente, tu m'intéresses !

    @DRJEROME :
    la première fois que j'ai entendu parler de l'utilisation de SetStretchBltMode et de HALFTONE, c'était toi qui évoquait cette technique, et ç'était dans les commentaires sur un source de MAURICIO :
    http://www.delphifr.com/codes/
    CREATEUR-VIGNETTES-HAUTE-QUALITE-HIGH-QUALITY-THUMBAILS-CREATOR_38996.aspx
    Depuis, je l'utilise car je la trouve très performante. Merci !

    A +

    japee

  • signaler à un administrateur
    Commentaire de cincap le 12/01/2007 09:37:08

    Bonjour,

    @ Japee, tu es certain que ce lien

    http://www.phidels.com/php/forum/
    forum.php3?forumtable=posts&mode=showpost&postid=112071,

    corresponde à ton message au sujet de XPman ?

    Pour le Hajftone, Je connaissai aussi Jean-Yves Qienec qui était aussi un crack dans la manipulation des bmp et qui a laissé assez bien de sources en ce sens.

    @+,

    Cincap



  • signaler à un administrateur
    Commentaire de cincap le 12/01/2007 09:38:20

    ! lire HALFTONE.

    @+

  • signaler à un administrateur
    Commentaire de cirec le 12/01/2007 10:21:05 administrateur CS

    Je pense que Japee c'est un peut trompé dans le lien :
    http://www.delphifr.com/codes/UTILISER-STYLE-XP-D1-D7-ASTUCE_20810.aspx

    Sinon il n'a rien de révolutionnaire en soit mais il offre un avantage (pour moi) c'est d'avoir un composant XPManifest sous D4 ce qui donne un code qui est compatible avec D7 et plus.

    ps : Le composant de Delphi ne fait rien d'autre que l'astuce de Costello ... le seul avantage c'est d'avoir un code compatible peut importe la version de Delphi.

    @+
    Cirec

  • signaler à un administrateur
    Commentaire de cincap le 12/01/2007 11:48:16

    Bonjour,

    J'avais retrouvé le lien exact d'ou ma question à Japee.

    Au sujet des tests concernant Tfilelistbox, j'ai oublié de préciser que lors du click sur le dossier C:\Windows\System32, le code de JROD est plus rapide pour créer la liste des fichiers contenus dans ce dossier et une fois chargée moins rapide lors du click et maintien du bouton de l'ascenseur.

    Alors que le tien c'est le contraire, moins rapide pour créer la liste des fichiers contenus dans ce dossier et une fois chargée plus rapide lors du click et maintien du bouton de l'ascenseur.

    Les deux sources sont remarquables en soi.

    @+,

    Cincap

  • signaler à un administrateur
    Commentaire de DRJEROME le 13/01/2007 07:48:25

    Hello !

    j'ai essayé de charger en mémoire les icônes (par exemple pour "system32") c'est lent à charger c'est rapide à scroler...

    j'ai essayé des méthodes intermédiares non concluantes pour le moment (un coup c'est rapide un coup ça rame)

    tu as du nouveau Cirec sur les méthodes intermédiaires?

  • signaler à un administrateur
    Commentaire de cirec le 16/01/2007 15:32:39 administrateur CS

    Alors ... après quelques petits testes j'en arrive aux mêmes résultats que toi :(

    tout ce que j'ai réussi a obtenir pour l'instant c'est soit:

    un chargement lent et un défilement rapide

    un chargement rapide et un défilement lent ... (rien de neuf quoi )

    j'ai même essayer un chargement "progressif" par tranche de 200 où 500 Items ....
    celle-ci donne de bon résultat intermédiaire (quand on scroll) mais saccadé à cause des chargements répétitifs

    Mais j'ai une alternative à vous proposer ... qui je pense (enfin j'espère qu'elle) vous plaira

    je ne vous dis pas ce que c'est ... ha ha ha :)
    Mais je vous invite à suivre l'évolution de la prochaine mise à jour qui devrait intervenir, si tout va bien, dans la journée ;)

    J'en prévoie encore une mise à jour, mais pas dans l'immédiat, mais là encore je garde le mystère sur cette petite évolution qui devrait élever notre bon vieux TFileListBox à un niveau plus acceptable ... Si tout se passe bien ;-)

    DrJérome : juste pour information ...
      durant mes testes j'ai essayé comme toi d'utiliser ExtractAssociatedIcon à la place de SHGetFileInfo mais les délais de chargements me paraissent plus long

    @+
    Cirec

  • signaler à un administrateur
    Commentaire de dugueclin le 10/02/2007 14:22:32

    Bonjour à tous,
    Désolé de répondre aussi tardivement.

    Merci Cirec pour ton formidable code!!! j'ai qu'une chose à dire: Félicitation!!!

    je l'utilise dans un de mes project.L'affichage des icônes est plus jolis.
    Vivement la mise à jour !!!.

    par contre,j'utilise la procédure suivante:
    // je liste des classeurs excels.Vous la connaissez tous je pense...

    Trouve:=FindFirst(('C:\Mes documents')+'*.xls*',faAnyFile, Fichiers);
       While Trouve=0 do
        begin
          Filename:=Fichiers.Name;
          Trouve:=FindNext(Fichiers);
          ExtPart:=ExtractFileExt(FileName);
          LgExt:=Length(ExtPart);
          Delete(FileName, Length(FileName)-LgExt+1,LgExt);
          Result:=(FileName);
          FileListBox1.Items.Add(Result);
        end;
          begin
            FindClose(Fichiers);
          end;

    mais le problème c'est que, ben ça marche plus et je n'ai pas réussi à déclarer le repertoire ainsi que l'extention ".xls" dans le fichier CustomFileCtrl.pas.

    Quelqu'un pourrait-il me dire comment faire??.dans le TJanFileListBox j'avais réussi à le modifier, mais là, avec le nouveau code c'est plus compliqué pour moi.
    En vous remercient par avance et en re-félicitant l'auteur,
    Sincères salutations et bon codding à tous

  • signaler à un administrateur
    Commentaire de cincap le 02/07/2007 16:57:15

    Bonjour à tous,

    @ cirec, j'espère que tu vas bien, je constate en utilisant ton unité (CustomFileCtrl.pas), que si avec le composant "TfileListbox", sa propriété "Multiselect" est à true, on obtient une erreur en le survolant avec la souris dans le cas ou le mask de ce composant affiche une extension définie ex: *.avi et que l'on se rend dans un répertoire ou dossier ou il n'y a pas ces fichiers avec cette extension.

    @+,

    Cincap

  • signaler à un administrateur
    Commentaire de cirec le 03/07/2007 13:37:53 administrateur CS

    Tu me déçois un peut là ....
    Si tu avais pris le temps (2 secondes)  de mettre un point d'arrêt dans l'unité concernée tu aurais pu remarquer que l'erreur vient de borland ... et plus exactement du TFileListBox.

    Quand aucune sélection n'est faite ou que la liste est vide, ItemIndex renvoi   -1
    Jusque là rien d'anormal ...
    Mais si la propriété MultiSelect est à True  ItemIndex renvoi 0  et ce même si la liste est vide

    Il suffit donc de remplacer dans "procedure TFileListBox.CMHintShow"
    Ceci : If ItemIndex > -1 Then

    Par  : If (ItemIndex > -1) and (ItemIndex < Count) Then

    et ça fonctionne ;-)

  • signaler à un administrateur
    Commentaire de cincap le 03/07/2007 13:59:39

    Bonjour à tous,

    @ cirec, comme cela c'est plus clair, loin de moi de mettre en doute tes capacités.

    Je n'ai pas pensé au point d'arrêt .

    De plus, c'est déjà surprenant avec un composant obsolète de pouvoir afficher les icônes avec clarté.

    Merci pour la correction

    @+,

    Cincap

Ajouter un commentaire

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

Snippets en rapport

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS