Charger le handle de l'imagelist système dans une timagelist

Contenu du snippet

Pouvoir afficher par exemple des fichiers, keurs icones, leurs attributs etc dans une TListView

Source / Exemple :


uses ShellApi,Shlobj;

{=========Charger le Handle======}
procedure TForm1.Button1Click(Sender: TObject);
var psfi : TSHFileInfo;//pointeur pour stocker la structure
    ppidl: PItemIDList;
begin
    SHGetSpecialFolderLocation(0, CSIDL_DRIVES, ppidl);
    {Quel folder-> "Tout"}

    ImageList1.ShareImages := True;
    {Pas supprimer le Handle de l'imageList système !}

    ImageList1.Handle := SHGetFileInfo(PChar(ppidl), 0, psfi, SizeOf(psfi),
    SHGFI_PIDL or SHGFI_ICON {or SHGFI_SMALLICON} or SHGFI_LARGEICON	or SHGFI_SYSICONINDEX or SHGFI_DISPLAYNAME);
    (*Charge le handle de l'imagelist system dans imagelist1
    afin de retrouver tous les icones et leur index unique + type etc...*)
end;

{=========Ex ouverture d'un fichier puis affichage dans une TListView======}
procedure TForm1.Button2Click(Sender: TObject);
var lsFile: String;//Fichier sélectionné
    psfi: TSHFileInfo;//pointeur pour stocker la structure
    liItem:TListItem;//Nouveau Item dans ListView1
    //lsrRec:TSearchRec;
begin

   OpenDialog1.initialdir:=ExtractFilePath(ParamStr(0));
   If Not OpenDialog1.execute then exit;{O/N sélection d'un fichier}

   lsFile:=OpenDialog1.filename;

    SHGetFileInfo(PChar(lsFile), 0, psfi, SizeOf(psfi),
      SHGFI_ICON {or SHGFI_SMALLICON} or SHGFI_LARGEICON or SHGFI_SYSICONINDEX or SHGFI_DISPLAYNAME or
      SHGFI_TYPENAME);

    liItem:=ListView1.Items.Add;
    liItem.Caption := psfi.szDisplayName;
    {En vue vsReport par ex
    FindFirst(lsFile, faAnyFile , lsrRec);
    liItem.SubItems.Add(Format('%d kb', [lsrRec.Size div 1024]));
    liItem.SubItems.Add(psfi.szTypeName);}
    liItem.ImageIndex:=psfi.iIcon;

end;

A voir également

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.