Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
Удобнее всего воспользоваться компонентом ListView. Его используют многие программы, так как он позволяет очень просто создать удобный список.
Вначале создадим ImageList и с помощью функции WinAPI SHGetFileInfo заполним его иконками, связанными со всеми зарегистрированными расширениями. Затем, при выборе пользователем в DirectoryListBox каталога, найдем все файлы в этом каталоге и для каждого определим иконку при помощи той же функции SHGetFileInfo. И еще к каждому элементу списка добавляется размер файла. Если вывести список в виде таблицы (для этого нужно выбрать пункт Table в ComboBox), то справа от имени каждого файла окажется его размер.
uses ShellAPI; procedure UpdateFiles; var sr: TSearchRec; li: TListItem; fi: TSHFileInfo; ext: string; IconIndex: word; ic: TIcon; 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;