Вывести список файлов с иконками |
ОГЛАВЛЕНИЕ    HOME  MAIL |
Удобнее всего для вывода списка фалов использовать ListView. Процедура UpdateFiles ищет все фалы в каталоге, выбранном в DirectoryListBox, и добавляет имена файлов и их размер в ListView. А для иконок используется функция WinAPI ShGetFileInfo. При запуске программы с ее помощью заполняются SmallIcons и LargeIcons компонента ListView, а при заполнении элементов списка ShGetFileInfo сообщает номер иконки. CheckBox определяет вид списка: большие иконки, список, таблица или маленькие иконки. uses ShellAPI; procedure UpdateFiles; var sr: TSearchRec; li: TListItem; fi: TSHFileInfo; ext: string; begin Form1.ListView1.Items.BeginUpdate; Form1.ListView1.Items.Clear; if FindFirst(Form1.DirectoryListBox1.Directory + '\*.*', faAnyFile, sr) = 0 then repeat if sr.Attr and faDirectory <> 0 then continue; li := Form1.ListView1.Items.Add; li.Caption := sr.Name; ext := LowerCase(ExtractFileExt(li.Caption)); ShGetFileInfo(PChar('*' + ext), 0, fi, SizeOf(fi), SHGFI_SMALLICON or SHGFI_SYSICONINDEX or SHGFI_TYPENAME); li.ImageIndex := fi.iIcon; if sr.Size < 1024 then li.SubItems.Add(IntToStr(sr.Size) + ' byte') else if sr.Size < 1024 * 1024 then li.SubItems.Add(IntToStr(round(sr.Size / 1024)) + ' KByte') else li.SubItems.Add(IntToStr(round(sr.Size / (1024 * 1024))) + ' MByte'); li.SubItems.Add(fi.szTypeName); until FindNext(sr) <> 0; FindClose(sr); Form1.ListView1.Items.EndUpdate; end; procedure TForm1.FormCreate(Sender: TObject); var fi: TSHFileInfo; lc: TListColumn; begin DriveComboBox1.DirList := DirectoryListBox1; with ListView1 do begin SmallImages := TImageList.CreateSize(16,16); SmallImages.Handle := ShGetFileInfo('*.*', 0, fi, SizeOf(fi), SHGFI_SMALLICON or SHGFI_ICON or SHGFI_SYSICONINDEX); LargeImages := TImageList.Create(nil); LargeImages.Handle := ShGetFileInfo('*.*', 0, fi, SizeOf(fi), SHGFI_LARGEICON or SHGFI_ICON or SHGFI_SYSICONINDEX); lc := Columns.Add; lc.Caption := 'Name'; lc := Columns.Add; lc.Caption := 'Size'; ComboBox1.Items.Add('Icons'); ComboBox1.Items.Add('List'); ComboBox1.Items.Add('Table'); ComboBox1.Items.Add('SmallIcons'); ComboBox1.ItemIndex := 0; end; UpdateFiles; end; procedure TForm1.DirectoryListBox1Change(Sender: TObject); begin UpdateFiles; end; procedure TForm1.ComboBox1Click(Sender: TObject); begin case ComboBox1.ItemIndex of 0: ListView1.ViewStyle := vsIcon; 1: ListView1.ViewStyle := vsList; 2: ListView1.ViewStyle := vsReport; else ListView1.ViewStyle := vsSmallIcon; end; end; email: delphi4all@narod.ru |