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
Source / Exemple :
All in Zip
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.
@ 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
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 ;-)
@ 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
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
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.