Открыть дерево файлов как в Explorer

  • Автор темы lexaltd
  • Дата начала
L

lexaltd

Мне надо сделать программу чтоб можно было найти в определённой папки .txt файлы , и чтоб они открылись как в Explorer , тоесть чтоб был список всех этих файлов находящихся в этой папке (не один файл , а все что находятся в этой папке) , чтоб я их мог открыть , печатать , редактировать .

Я незнаю что за компонет выбрать чтоб там файлы отображались как в Explorer , если выбираю Memo , то файлы получаются в в виде списка - пути файлов и нечего с ними сделать нельзя.

Я не сильно разбираюсь в программировании - подскажите как решить эту проблему , и что я не так делаю.

Зарание спасибо за помощь.

Извеняюсь но создалось две темы - удалите одну
 
S

Silver Wind

Смотри на закладке Samples компоненты ShellComboBox, ShellTreeView, ShellListView.
Пример использования Delphi7\Demos\Virtual Listview

Или такие же по функциональности, но устаревшие, на закладке Win 3.1 DriveComboBox, DirectoryListBox, FileListBox.
Пример здесь Delphi7\Demos\Doc\Filmanex

Хотя нет, извеняюсь, "Delphi7\Demos\Virtual Listview" - из другой оперы, просто похоже.
 
V

vital

Есть неск-ко вариантов. Использовать FingFirst - FindNext - FindClose и самостоятельно заполнять ListView с нужными колонками. Либо использовать выше названный ShellListView. Ну а редактирование.. печать.. Мемо и РичЕдит Тебе в помощь.

ПС. Могу написать за символические 5-10$. vitalyhome@tut.by.
 
S

Silver Wind

В каталоге установке Delphi ("C:\Program Files" - обычно), и данный пример немного не то что тебе нужно, смотри лучше связку из компонент ShellComboBox, ShellTreeView, ShellListView, там все тривиально.
 
L

lexaltd

Теперь другая проблема

Пытаюсь из ShellListView открыть текстовый файл в Memo
Если например с FileListBox я окрываю так " Form1.Memo1.Lines.LoadFromFile(FileListBox1.Filename);"
То тут я пишу " Form1.Memo1.Lines.LoadFromFile(ShellListView1.Filename); " - при компилировании выдаёт ошибку - там надо наверно не " Filename " писать

Можете подсказать решение этой проблемы ?

Или через ShellListView открыть текстовый файл в Memo нельзя?
 
L

lexaltd

А откуда вы его там нашли?
У ТShellListView есть свойство SelectedFolder, ну а далее идите по свойствам SelectedFolder и найдете все что нужно.

1. Нашёл там только Selected
2. Смотрите мне нужно открыть файл .txt из ShellListView в Memo

C FileListBox я открываю так :

procedure TForm1.FileListBox1DblClick(Sender: TObject);
begin
Form2.Memo1.Lines.LoadFromFile(FileListBox1.Filename);
end;

Как мне открыть с ShellListView?

procedure TForm1.FileListBox1DblClick(Sender: TObject);
begin
?????????
end;

Можете написать , а то нечего не получается
 
S

Silver Wind

Это ведь другой компонент, верно, так почему у него должно быть свойство FileName?
Небольшое исследование класса ShellListView с помощью выпадающего списка свойств/методов и мы добираемся до искомого имени файла:

Код:
procedure TForm1.ShellListView1Click(Sender: TObject);
var
SelectedFolder:TShellFolder;
FileName:string;
begin
SelectedFolder:=ShellListView1.SelectedFolder;
if Assigned(SelectedFolder)
then begin
FileName:=SelectedFolder.PathName;
if FileExists(FileName) and (ExtractFileExt(FileName)='.txt')
then Memo1.Lines.LoadFromFile(FileName);
end;
end;
 
L

lexaltd

Спасибо большое заработало - будем дальше строить
 
L

lexaltd

Вы сами то смотрели, или ждали код?


Я же писал что не сильно разбираюсь в это , конечно смотрел - но как говорится смотрю в книгу , вижу ..

Вот соорудил короче код , на основании ваших ответов :

procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Memo1.Lines.LoadFromFile(ShellListView1.SelectedFolder.PathName);
end;


А фильтр делается добавлением в OnAddFolder

CanAdd := AFolder.IsFolder or (ExtractFileExt(AFolder.PathName) = '.txt');


Может кому то пригодится

P.S. Ещё раз большое спасибо
 
L

lexaltd

Можно как то связать " ShellChangeNotifier " с "ShellComboBox"
Чтоб при нажатии на кнопку открывалось диалоговое окно " ShellChangeNotifier " я там выбрал корневой коталог , и он открылся в "ShellComboBox" и самое гланое чтоб при повторном запуске программы , в "ShellComboBox" открывался этот корневой каталог который я выбрал " ShellChangeNotifier " , и когда надо я мог сменить корневой каталог

Можно так сделать ?

Зарание спасибо
 
V

vital

Можно.

Уф.. не помню уж точно названия св-в компонентов но примерно следующим образом
екзекьютишь какой-нить TDirectoryListBox в котором юзверь выбирает каталог, после чего его выбор пишешь в какую-нить пременную. Ну а потом ShellComboBox.directory(ну или там ShellComboBox.SelectedFolder.PathName)=твоя_пееменная. А дальше сохраняешь значение своей переменной куда-нить в ini. А при зауске проги читаешь это значение и снова ShellComboBox.SelectedFolder.PathName=твоя_пееменная. По поводу ini -IniFiles.TIniFile тебе в помощь.
 
L

lexaltd

Можно.

Уф.. не помню уж точно названия св-в компонентов но примерно следующим образом
екзекьютишь какой-нить TDirectoryListBox в котором юзверь выбирает каталог, после чего его выбор пишешь в какую-нить пременную. Ну а потом ShellComboBox.directory(ну или там ShellComboBox.SelectedFolder.PathName)=твоя_пееменная. А дальше сохраняешь значение своей переменной куда-нить в ini. А при зауске проги читаешь это значение и снова ShellComboBox.SelectedFolder.PathName=твоя_пееменная. По поводу ini -IniFiles.TIniFile тебе в помощь.

Мне нужно чтоб программа состояла из одного файла
А что нельзя сделать чтоб компонент " ShellChangeNotifier " работал с "ShellComboBox" ???
 
V

vital

Можно, просто я не совсем тебя понял и написал к примеру. Все можно)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!