<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=443652&amp;view=findpost&amp;p=3901842</guid>
        <pubDate>Wed, 20 Mar 2024 00:44:23 +0000</pubDate>
        <title>Компоненты файловые менеджеры</title>
        <link>https://forum.sources.ru/index.php?showtopic=443652&amp;view=findpost&amp;p=3901842</link>
        <description><![CDATA[kuzduk: Какие компоненты для отображения файлов и папок вы знаете? Какие используете? Почему? Порекомендуйте.<br>
<br>
Вот что мне известно:<br>
<br>
<strong class='tag-b'>TShellListView </strong>из пакета ShellControl, который выпилили из палитры компонентов после Delphi 7, а жаль, ибо нужная вещь. Легко ищется в интернетах. Нет встроенного Drag-Drop, нет контекстного меню Shell, нет показывает Thumbs.<br>
<br>
<br>
<strong class='tag-b'>JamShellBrowser </strong>- умеет всё и даже больше, но платный. Можно 30 дней попользоваться биплатно без доступа к исходникам, потом die или дай денег.<br>
<a class='tag-url' href='https://www.jam-software.com/shellbrowser_net' target='_blank'>https://www.jam-software.com/shellbrowser_net</a><br>
<br>
<br>
<strong class='tag-b'>VELVEx</strong> 1.4.9 - наверное лучшее что я встречал, бесплатный, умеет всё то нужно что отсутсвует в вышеперечисленных: готовый Drag-Drop, контекстного меню Shell для нескольких выделенных файлов, показывает Thumbs. Однако Нарыть исходники не получилось: на офсайте только часть необходимого, а то что прописано в uses найти не нашлось, кому посчастливиться нарыть полный фарш, будьте любезны поделиться.<br>
<a class='tag-url' href='https://www.silverpointdevelopment.com/velvex/' target='_blank'>https://www.silverpointdevelopment.com/velvex/</a><br>
<br>
<br>
<strong class='tag-b'>kuShellListView </strong>- мой компонент, который угораздило мну разрабатывать. Готовый Drag-Drop, с 2024 года имеет показывает Thumbs, НЕ показывает контекстного меню Shell, но имеет своё упрощённое. Основой для оного была и есть эта функция &quot;как из TListView сделать проводник&quot;, которой делюсь:<br>
<a class='tag-url' href='https://kuzduk.ru/delphi/kushelllistview' target='_blank'>https://kuzduk.ru/delphi/kushelllistview</a><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ icoShell Index</div><div class="code_line">function Shell_ico_Index(FullPath: string): integer;</div><div class="code_line">//uses ShellApi</div><div class="code_line">var ShInfo: TSHFileInfo;</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">SHGetFileInfo( PChar(FullPath), 0, ShInfo, SizeOf(ShInfo), SHGFI_TYPENAME or SHGFI_SYSICONINDEX );</div><div class="code_line">Result := ShInfo.iIcon;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">//------------------------------------------------------------------------------ icoShell Load All</div><div class="code_line">procedure Shell_ico_LoadAll(MyImageList: TImageList; icoSmall: Boolean);</div><div class="code_line">//загружаем системные иконки типов файлов в ImageListы</div><div class="code_line">//uses ShellApi</div><div class="code_line">var</div><div class="code_line">&nbsp;SysImageList: uint;</div><div class="code_line">&nbsp;Flags: Cardinal;</div><div class="code_line">&nbsp;ShInfo: ShFileInfo;</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">if icoSmall</div><div class="code_line">then Flags := SHGFI_SYSICONINDEX or SHGFI_SMALLICON {or SHGFI_USEFILEATTRIBUTES}</div><div class="code_line">else Flags := SHGFI_SYSICONINDEX or SHGFI_LARGEICON {or SHGFI_USEFILEATTRIBUTES};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">//Запрашиваем иконки</div><div class="code_line">SysImageList := SHGetFileInfo(&#39;&#39;, 0, ShInfo, SizeOf(TSHFileInfo), Flags);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">if SysImageList &#60;&#62; 0</div><div class="code_line">then MyImageList.Handle := SysImageList;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">//------------------------------------------------------------------------------ LV as Explorer</div><div class="code_line">procedure LVasExplorer(LV: TListView; Path: string; HideShow: Boolean);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;sr: TSearchRec;</div><div class="code_line">&nbsp;&nbsp;xItem: TListItem;</div><div class="code_line">&nbsp;&nbsp;icoListSmall, icoListLarge: TImageList;</div><div class="code_line">&nbsp;&nbsp;Atrib: integer;</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">if Length(Path) = 1</div><div class="code_line">then Path := Path + &#39;:\&#39;</div><div class="code_line">else Path := IncludeTrailingBackSlash(Path);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">if not DirectoryExists(Path) then exit;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">if HideShow</div><div class="code_line">then Atrib := faDirectory + faAnyFile + faVolumeID</div><div class="code_line">else Atrib := faDirectory + faAnyFile + faVolumeID - faHidden - faSysFile;</div><div class="code_line">&nbsp;</div><div class="code_line">if FindFirst(Path + &#39;*.*&#39;, Atrib, sr) &#60;&#62; 0</div><div class="code_line">then</div><div class="code_line">begin</div><div class="code_line">// &nbsp;ShowMessage(Path+&#39; - ПАПКИ НЕ СУЩЕСТВУЕТ!&#39;); //uses Dialogs </div><div class="code_line">&nbsp;&nbsp;exit;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">LV.Cursor := crHourGlass;</div><div class="code_line">&nbsp;</div><div class="code_line">LV.Items.BeginUpdate;</div><div class="code_line">&nbsp;</div><div class="code_line">while LV.Columns.Count &#60; 3 do</div><div class="code_line">&nbsp;LV.Columns.Add;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">{$REGION &#39; иконки &#39;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">//Создаем списки маленьких иконок типов файлов</div><div class="code_line">if LV.SmallImages = nil</div><div class="code_line">&nbsp;</div><div class="code_line">then</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;icoListSmall := TImageList.Create(LV.Owner);</div><div class="code_line">&nbsp;&nbsp;LV.SmallImages := icoListSmall;</div><div class="code_line">end</div><div class="code_line">&nbsp;</div><div class="code_line">else icoListSmall := LV.SmallImages as TImageList;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">//Создаем списки больших иконок типов файлов</div><div class="code_line">if LV.LargeImages = nil</div><div class="code_line">&nbsp;</div><div class="code_line">then</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;icoListLarge := TImageList.Create(LV.Owner);</div><div class="code_line">&nbsp;&nbsp;LV.LargeImages := icoListLarge;</div><div class="code_line">end</div><div class="code_line">&nbsp;</div><div class="code_line">else icoListLarge := LV.LargeImages as TImageList;</div><div class="code_line">&nbsp;</div><div class="code_line">Shell_ico_LoadAll(LV.SmallImages as TImageList, True);</div><div class="code_line">Shell_ico_LoadAll(LV.LargeImages as TImageList, False);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">{$ENDREGION}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">LV.Items.Clear;</div><div class="code_line">&nbsp;</div><div class="code_line">repeat</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if sr.Name = &#39;&#39; &nbsp; then Continue;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if sr.Name = &#39;.&#39; &nbsp;then Continue;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if sr.Name = &#39;..&#39; then Continue;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if sr.Attr and faDirectory = faDirectory</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;then//папка</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xItem := LV.Items.Add;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xItem.Caption := (sr.Name); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Name</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xItem.SubItems.Add(&#39;\Folder&#39;); //Folder type</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xItem.SubItems.Add( inttostr(sr.Size) );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xItem.ImageIndex := Shell_ico_Index(Path + sr.Name); //ico</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;else//файл</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xItem := LV.Items.Add;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xItem.Caption := sr.Name; &nbsp;//Name</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xItem.SubItems.Add( Copy(ExtractFileExt(sr.Name), 2) ); //Ext</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xItem.SubItems.Add( inttostr(sr.Size) ); //Size</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xItem.ImageIndex := Shell_ico_Index(Path + sr.Name); //ico</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">until FindNext(sr) &#60;&#62; 0;</div><div class="code_line">&nbsp;</div><div class="code_line">FindClose(sr);</div><div class="code_line">&nbsp;</div><div class="code_line">LV.Items.EndUpdate;</div><div class="code_line">&nbsp;</div><div class="code_line">LV.Cursor := crDefault;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Button1Click(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">LVasExplorer(ListView1, &#39;D:\Рабочий стол3&#39;, True)</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>kuzduk</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      </channel>
      </rss>
	