![>](style_images/1/nav_m.gif)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.118.137] |
![]() |
|
![]() |
|
|
Какие компоненты для отображения файлов и папок вы знаете? Какие используете? Почему? Порекомендуйте.
Вот что мне известно: TShellListView из пакета ShellControl, который выпилили из палитры компонентов после Delphi 7, а жаль, ибо нужная вещь. Легко ищется в интернетах. Нет встроенного Drag-Drop, нет контекстного меню Shell, нет показывает Thumbs. JamShellBrowser - умеет всё и даже больше, но платный. Можно 30 дней попользоваться биплатно без доступа к исходникам, потом die или дай денег. https://www.jam-software.com/shellbrowser_net VELVEx 1.4.9 - наверное лучшее что я встречал, бесплатный, умеет всё то нужно что отсутсвует в вышеперечисленных: готовый Drag-Drop, контекстного меню Shell для нескольких выделенных файлов, показывает Thumbs. Однако Нарыть исходники не получилось: на офсайте только часть необходимого, а то что прописано в uses найти не нашлось, кому посчастливиться нарыть полный фарш, будьте любезны поделиться. https://www.silverpointdevelopment.com/velvex/ kuShellListView - мой компонент, который угораздило мну разрабатывать. Готовый Drag-Drop, с 2024 года имеет показывает Thumbs, НЕ показывает контекстного меню Shell, но имеет своё упрощённое. Основой для оного была и есть эта функция "как из TListView сделать проводник", которой делюсь: https://kuzduk.ru/delphi/kushelllistview ![]() ![]() //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ icoShell Index function Shell_ico_Index(FullPath: string): integer; //uses ShellApi var ShInfo: TSHFileInfo; begin SHGetFileInfo( PChar(FullPath), 0, ShInfo, SizeOf(ShInfo), SHGFI_TYPENAME or SHGFI_SYSICONINDEX ); Result := ShInfo.iIcon; end; //------------------------------------------------------------------------------ icoShell Load All procedure Shell_ico_LoadAll(MyImageList: TImageList; icoSmall: Boolean); //загружаем системные иконки типов файлов в ImageListы //uses ShellApi var SysImageList: uint; Flags: Cardinal; ShInfo: ShFileInfo; begin if icoSmall then Flags := SHGFI_SYSICONINDEX or SHGFI_SMALLICON {or SHGFI_USEFILEATTRIBUTES} else Flags := SHGFI_SYSICONINDEX or SHGFI_LARGEICON {or SHGFI_USEFILEATTRIBUTES}; //Запрашиваем иконки SysImageList := SHGetFileInfo('', 0, ShInfo, SizeOf(TSHFileInfo), Flags); if SysImageList <> 0 then MyImageList.Handle := SysImageList; end; //------------------------------------------------------------------------------ LV as Explorer procedure LVasExplorer(LV: TListView; Path: string; HideShow: Boolean); var sr: TSearchRec; xItem: TListItem; icoListSmall, icoListLarge: TImageList; Atrib: integer; begin if Length(Path) = 1 then Path := Path + ':\' else Path := IncludeTrailingBackSlash(Path); if not DirectoryExists(Path) then exit; if HideShow then Atrib := faDirectory + faAnyFile + faVolumeID else Atrib := faDirectory + faAnyFile + faVolumeID - faHidden - faSysFile; if FindFirst(Path + '*.*', Atrib, sr) <> 0 then begin // ShowMessage(Path+' - ПАПКИ НЕ СУЩЕСТВУЕТ!'); //uses Dialogs exit; end; LV.Cursor := crHourGlass; LV.Items.BeginUpdate; while LV.Columns.Count < 3 do LV.Columns.Add; {$REGION ' иконки '} //Создаем списки маленьких иконок типов файлов if LV.SmallImages = nil then begin icoListSmall := TImageList.Create(LV.Owner); LV.SmallImages := icoListSmall; end else icoListSmall := LV.SmallImages as TImageList; //Создаем списки больших иконок типов файлов if LV.LargeImages = nil then begin icoListLarge := TImageList.Create(LV.Owner); LV.LargeImages := icoListLarge; end else icoListLarge := LV.LargeImages as TImageList; Shell_ico_LoadAll(LV.SmallImages as TImageList, True); Shell_ico_LoadAll(LV.LargeImages as TImageList, False); {$ENDREGION} LV.Items.Clear; repeat if sr.Name = '' then Continue; if sr.Name = '.' then Continue; if sr.Name = '..' then Continue; if sr.Attr and faDirectory = faDirectory then//папка begin xItem := LV.Items.Add; xItem.Caption := (sr.Name); //Name xItem.SubItems.Add('\Folder'); //Folder type xItem.SubItems.Add( inttostr(sr.Size) ); xItem.ImageIndex := Shell_ico_Index(Path + sr.Name); //ico end else//файл begin xItem := LV.Items.Add; xItem.Caption := sr.Name; //Name xItem.SubItems.Add( Copy(ExtractFileExt(sr.Name), 2) ); //Ext xItem.SubItems.Add( inttostr(sr.Size) ); //Size xItem.ImageIndex := Shell_ico_Index(Path + sr.Name); //ico end; until FindNext(sr) <> 0; FindClose(sr); LV.Items.EndUpdate; LV.Cursor := crDefault; end; procedure TForm1.Button1Click(Sender: TObject); begin LVasExplorer(ListView1, 'D:\Рабочий стол\123', True) end; |