Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 11.01.2013, 21:41   #1
B_TpaHce
 
Регистрация: 05.05.2011
Сообщений: 9
По умолчанию Lazarus ShellTreeView и ShellListView

На форме есть 2 ShellTreeView и 2 ShellListView. У каждого ShellListView в свойстве ShellTreeView указан свой ShellTreeView.
Программа запускается и показывает структуру файловой системы.
Хочу сделать копирование, удаление и переименование файлов выделенных в одном ShellListView в другой.
Нашел функции CopyFile, DeleteFile, RenameFile.
Подскажите, как передать из ShellListView путь выделенного файла в параметры этих функций?
Нашел пример для Delphi, но он не работает:
Код:
ShellListView1.Folders[ShellListView1.ItemIndex].PathName
Система Ubuntu 12.04, Lazarus 0.9.30
B_TpaHce вне форума Ответить с цитированием
Старый 11.01.2013, 22:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

ИМХО
ShellListView1.GetPathFromItem(Shel lListView1.Selected)
ShellTreeView1.GetPathFromNode(Shel lTreeView1.Selected);

P.S. Исправил пост...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.01.2013, 23:53   #3
B_TpaHce
 
Регистрация: 05.05.2011
Сообщений: 9
По умолчанию

Спасибо большое! Реализовал копирование:
Код:
CopyFile(ShellListView1.GetPathFromItem(ShellListView1.Selected), ShellTreeView1.GetPathFromNode(ShellTreeView2.Selected)+'/'+ShellListView1.Selected.Caption);
Но появились 2 проблемы. Нужно обновлять содержимое ShellListView2 после копирования, т.к. иначе скопированный файл в нем не показывается.
Пробовал так:
Код:
  ShellTreeView2.Refresh;
  ShellListView2.Refresh;
, но не помогло.
Вторая проблема в том что нужно проверять ShellListView1 на предмет того, выбран файл или нет. Т.е. нужно сделать условие если файл в ShellListView1 выбран, то разрешить копирование, иначе нет.
B_TpaHce вне форума Ответить с цитированием
Старый 12.01.2013, 01:07   #4
B_TpaHce
 
Регистрация: 05.05.2011
Сообщений: 9
По умолчанию

С проверкой вроде разобрался. Сделал так:
Код:
 if (ShellListView1.Selected<>nil) then
 CopyFile(ShellListView1.GetPathFromItem(ShellListView1.Selected), ShellTreeView1.GetPathFromNode(ShellTreeView2.Selected)+'/'+ShellListView1.Selected.Caption)
Осталось разобраться с обновлением ShellListView2
B_TpaHce вне форума Ответить с цитированием
Старый 12.01.2013, 14:46   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Думаю проще будет чтоб особо долго не парится сделать смену каталога куда нить в Темр, а потом назад, чтоб он перечитал каталог.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.01.2013, 20:01   #6
B_TpaHce
 
Регистрация: 05.05.2011
Сообщений: 9
По умолчанию

Посоветовали заменить ShellListView на FileListBox. В итоге копирование сделал так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  CopyFile(FileListBox1.FileName,ShellTreeView2.GetPathFromNode(ShellTreeView2.Selected)+'/'+ExtractFileName(FileListBox1.FileName));
  FileListBox2.UpdateFileList;
end;
B_TpaHce вне форума Ответить с цитированием
Старый 12.01.2013, 22:33   #7
B_TpaHce
 
Регистрация: 05.05.2011
Сообщений: 9
По умолчанию

Подскажите, а какой функцией можно сменить каталог в ShellTreeView?
И как называется функция копирования каталога? Нашел только CreateDir и DeleteDirectory.
B_TpaHce вне форума Ответить с цитированием
Старый 12.01.2013, 22:44   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Цитата:
какой функцией можно сменить каталог в ShellTreeView?
Не функцией а свойством. Path кажись называется.
Цитата:
И как называется функция копирования каталога?
Нет такой. Используй SHFileOperation для винды. Для Линуха не знаю.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.01.2013, 23:08   #9
B_TpaHce
 
Регистрация: 05.05.2011
Сообщений: 9
По умолчанию

К сожалению, свойство Path у ShellTreeView не нашел
B_TpaHce вне форума Ответить с цитированием
Старый 13.01.2013, 00:14   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Мдя... А похожее поискать не додумался?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перекомпиляция программы(простой) Win Lazarus в Linux Lazarus Toxifer Фриланс 0 27.11.2012 22:46
ShellTreeView где ты? Прик Компоненты Delphi 5 16.06.2011 21:39
Копировать строки из ShellListView, ShellTreeView и передать их в ListView, TreeView? Denutrror Общие вопросы Delphi 0 01.04.2011 12:36
Shelltreeview и DBGrid Stian БД в Delphi 1 04.03.2011 01:12
checkbox in ShellTreeView SergGhost Помощь студентам 1 31.08.2009 17:51