Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Компоненты файловые менеджеры 
:(
    Опции темы
kuzduk
  Дата 20.3.2024, 03:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 21.9.2011

Репутация: 2
Всего: 2



Какие компоненты для отображения файлов и папок вы знаете? Какие используете? Почему? Порекомендуйте.

Вот что мне известно:

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.h1n.ru/_kushelllistview.html

Код
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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;

PM MAIL WWW   Вверх
ZBugz
Дата 20.3.2024, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 631
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



TVirtualExplorerListview бесплатный и развивается

TShellListView есть и сейчас, он на официальном гитхабе delphi
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1051 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.