На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Обязательно выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Этот раздел предназначен для вопросов, посвященных разработке компонентов, а также для тестирования собственных бесплатных компонентов с открытым исходным кодом.

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> Компоненты файловые менеджеры
    Какие компоненты для отображения файлов и папок вы знаете? Какие используете? Почему? Порекомендуйте.

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

    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

    ExpandedWrap disabled
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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;
    Сообщение отредактировано: kuzduk -
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0197 ]   [ 16 queries used ]   [ Generated: 27.04.24, 07:38 GMT ]