[ASTUCE] COMMENT AFFICHER LES ICÔNES DES FICHIERS LISTÉS DANS UN TFILELISBOX
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 2009
-
9 janv. 2007 à 07:07
the clansman
Messages postés1Date d'inscriptionjeudi 3 mars 2005StatutMembreDernière intervention17 octobre 2008
-
17 oct. 2008 à 16:35
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
the clansman
Messages postés1Date d'inscriptionjeudi 3 mars 2005StatutMembreDernière intervention17 octobre 2008 17 oct. 2008 à 16:35
Salut,
Je viens de tomber sur ce code, et c'est de la bombe en boite ! Félicitations à l'auteur !
Par contre, si l'auteur ne sait pas quoi faire pour améliorer son code, j'ai des idées (à défaut des compétences pour modifier le composant moi même ;) ).
1. Quand un répertoire est caché, l'afficher 'en pale'
1 bis. De la même manière, quand un fichier est caché, dans TFileListBox, on pourrait, là aussi, l'afficher en pâle...
2. Dans le répertoire C:\Documents and Settings\\Favoris, on remarque que cette icone est une étoile... En effet, elle est définie par le fait que ce répertoire contient un fichier (caché) desktop.ini contenant le chemin de l'icone.
3. Pour le TDirectoryListBox, dans la procédure SetBmp, je préfère (mais ce n'est qu'un avis personnel) avoir de petites icones, que des grandes. Ainsi, au lieu d'avoir :
Flags := SHGFI_ICON Or SHGFI_LARGEICON;
J'ai plutôt fait :
Flags := SHGFI_ICON Or SHGFI_SMALLICON;
C'est un détail...
En tous cas, je vous félicite tous à nouveau car ce code est terrible.
A+
Philippe.
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 3 juil. 2007 à 13:59
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é.
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 ;-)
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 2 juil. 2007 à 16:57
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
cs_dugueclin
Messages postés66Date d'inscriptionjeudi 2 septembre 2004StatutMembreDernière intervention10 juillet 2012 10 févr. 2007 à 14:22
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
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
où
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
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 13 janv. 2007 à 07:48
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?
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 12 janv. 2007 à 11:48
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
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 12 janv. 2007 à 09:38
! lire HALFTONE.
@+
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 12 janv. 2007 à 09:37
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
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 11 janv. 2007 à 10:43
en fait dans mon code les icones sont configurables automatiquement pour avoir toutes les tailles (proportionnellement à TfileListbox.itemHeight)
drjerome JROD
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 11 janv. 2007 à 09:55
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
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 11 janv. 2007 à 07:56
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+
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 10 janv. 2007 à 23:50
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
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 10 janv. 2007 à 21:17
(ps : j'ai 2118 fichiers dans system32 ça a l'air ok)
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 10 janv. 2007 à 21:15
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
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 10 janv. 2007 à 15:54
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
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 10 janv. 2007 à 15:31
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!)
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
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 10 janv. 2007 à 10:22
@ 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
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 10 janv. 2007 à 09:53
oups j'ai oublié de répondre au dernier point
j'ai utilisé le canvas du TfileListBox dans ma méthode
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 10 janv. 2007 à 09:24
merci
sans rancune également
drjerome
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 10 janv. 2007 à 09:16
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
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 10 janv. 2007 à 09:02
PS : ce n'est pas moi qui ai dit : "Pour les pauvres malheureux, qui codent encore sous D4"
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 10 janv. 2007 à 08: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
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 10 janv. 2007 à 00:21
PS: drjerome = JROD
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 10 janv. 2007 à 00:19
Hello les gars,
j'avais transformé le zip qui vous tracassais en code ici :
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
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 9 janv. 2007 à 23:22
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 +
DorotheeJ
Messages postés7Date d'inscriptionmardi 24 août 2004StatutMembreDernière intervention 9 janvier 2007 9 janv. 2007 à 22:26
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
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 9 janv. 2007 à 22:02
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
DorotheeJ
Messages postés7Date d'inscriptionmardi 24 août 2004StatutMembreDernière intervention 9 janvier 2007 9 janv. 2007 à 19:46
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
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 9 janv. 2007 à 10:03
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
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 9 janv. 2007 à 09:59
17 oct. 2008 à 16:35
Je viens de tomber sur ce code, et c'est de la bombe en boite ! Félicitations à l'auteur !
Par contre, si l'auteur ne sait pas quoi faire pour améliorer son code, j'ai des idées (à défaut des compétences pour modifier le composant moi même ;) ).
1. Quand un répertoire est caché, l'afficher 'en pale'
1 bis. De la même manière, quand un fichier est caché, dans TFileListBox, on pourrait, là aussi, l'afficher en pâle...
2. Dans le répertoire C:\Documents and Settings\\Favoris, on remarque que cette icone est une étoile... En effet, elle est définie par le fait que ce répertoire contient un fichier (caché) desktop.ini contenant le chemin de l'icone.
3. Pour le TDirectoryListBox, dans la procédure SetBmp, je préfère (mais ce n'est qu'un avis personnel) avoir de petites icones, que des grandes. Ainsi, au lieu d'avoir :
Flags := SHGFI_ICON Or SHGFI_LARGEICON;
J'ai plutôt fait :
Flags := SHGFI_ICON Or SHGFI_SMALLICON;
C'est un détail...
En tous cas, je vous félicite tous à nouveau car ce code est terrible.
A+
Philippe.
3 juil. 2007 à 13:59
@ 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
3 juil. 2007 à 13:37
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 ;-)
2 juil. 2007 à 16:57
@ 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
10 févr. 2007 à 14:22
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
16 janv. 2007 à 15:32
tout ce que j'ai réussi a obtenir pour l'instant c'est soit:
un chargement lent et un défilement rapide
où
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
13 janv. 2007 à 07:48
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?
12 janv. 2007 à 11:48
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
12 janv. 2007 à 09:38
@+
12 janv. 2007 à 09:37
@ 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
11 janv. 2007 à 10:43
drjerome JROD
11 janv. 2007 à 09:55
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
11 janv. 2007 à 07:56
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+
10 janv. 2007 à 23:50
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
10 janv. 2007 à 21:17
10 janv. 2007 à 21:15
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
10 janv. 2007 à 15:54
@ 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
10 janv. 2007 à 15:31
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
10 janv. 2007 à 14:53
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
10 janv. 2007 à 10:22
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
10 janv. 2007 à 09:53
j'ai utilisé le canvas du TfileListBox dans ma méthode
10 janv. 2007 à 09:24
sans rancune également
drjerome
10 janv. 2007 à 09:16
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
10 janv. 2007 à 09:02
10 janv. 2007 à 08:06
@ 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
10 janv. 2007 à 00:21
10 janv. 2007 à 00:19
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
9 janv. 2007 à 23:22
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 +
9 janv. 2007 à 22:26
9 janv. 2007 à 22:02
@ 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
9 janv. 2007 à 19:46
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
9 janv. 2007 à 10:03
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
9 janv. 2007 à 09:59
Désolé d'être empéché de mettre ma note 10/10.
Ce problème persiste assez souvent.
@+,
Cincap