Thursday, May 04, 2006

Zobrazení souborů včetně jejich asociovaných ikon

Další věcí, kterou se dnes naučíme, bude zobrazení ikony daného souboru (případně příslušné asociované ikony) a informace o typu souboru. V naší ukázce se soubory ze zvoleného adresáře vypíší do ListView, a to včetně ikon a informací. Pro fungování příkladu musíte na formulář přidat zmiňovaný ListView a ImageList, kam se ukládají ikony, a také bude potřeba knihovna ShellApi, takže již ani nebudu připomínat, kam ji máte napsat.
procedure ZobrazSoubory;
const
sPath = 'c:\windows\';
var
i: integer;
Icon: TIcon;
SearchRec: TSearchRec;
ListItem: TListItem;
FileInfo: SHFILEINFO;
begin
ListView1.SmallImages := ImageList1;
ListView1.ViewStyle := vsReport;
ListView1.Columns.add;
ListView1.Columns.add;
Icon := TIcon.Create;
try
ListView1.items.BeginUpdate;
i := FindFirst(sPath + '*.*', faAnyFile, SearchRec);
while i = 0 do
begin
application.ProcessMessages;
with ListView1 do
begin
if ((SearchRec.Attr and FaDirectory <> FaDirectory) and (SearchRec.Attr and FaVolumeId <> FaVolumeID)) then
begin
ListItem := ListView1.items.add;
SHGetFileInfo(PChar(sPath + SearchRec.Name), 0, FileInfo, SizeOf(FileInfo), SHGFI_DISPLAYNAME);
Listitem.Caption := FileInfo.szDisplayName;
SHGetFileInfo(PChar(sPath + SearchRec.Name), 0, FileInfo, SizeOf(FileInfo), SHGFI_TYPENAME);
ListItem.SubItems.Add(FileInfo.szTypeName);
SHGetFileInfo(PChar(sPath + SearchRec.Name), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON);
icon.handle := FileInfo.hIcon;
ListItem.ImageIndex := ImageList1.AddIcon(Icon);
end;
end;
i := FindNext(SearchRec);
end;
finally
ListView1.items.EndUpdate;
Icon.Free;
end;
end;