Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.03.2024, 03:35
Аватар для kuzduk
kuzduk kuzduk вне форума
Прохожий
 
Регистрация: 17.02.2012
Сообщения: 38
Репутация: 10
Стрелка Компоненты файловые менеджеры

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

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

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

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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, 02.10.2024 в 20:31.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:45.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025