Выбор списка файлов и папок

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Выбор списка файлов и папок

Сообщение ssnakess » 08.09.2023 16:50:32

Как при помощи стандартного диалога TOpenDialog, дать пользователю выбор списка файлов и папок одновременно?
Т.е. при использовании MultiSelect можно выбирать несколько файлов и получить их в свойстве Files
Но при этом не передаются выбранные папки (хотя их выделить в окне можно)

Если взять TSelectFolderDialog, который является наследником от TOpenDialog, то пользователь может выбрать несколько папок, и их можно получить в свойстве Files
Но файлы при этом даже не отображаются.
Все что откопал в исходниках, это то что вот этом метод
управляет как отобразить список, SelectFolder - с папками или без
class function TWin32WSOpenDialog.GetVistaOptions(Options: TOpenOptions; SelectFolder: Boolean): FileOpenDialogOptions;
а этот метод получает строку с выбранным списком файлов(папок), который при каждом изменении этого списка, заносится в свойство Files
class function TWin32WSOpenDialog.GetFileName(ShellItem: IShellItem): String;
т.е. этот метод как раз и выдает список или файлов или папок
но IShellItem - это интерфейс...
ssnakess
новенький
 
Сообщения: 47
Зарегистрирован: 24.09.2011 23:08:55

Re: Выбор списка файлов и папок

Сообщение ssnakess » 10.09.2023 14:59:24

Облазил весь тырнет, решения не нашел :(
пришлось писать диалог самому.
Вот Архив с формой и модулем может кому понадобиться :)
пример использования
Код: Выделить всё
Uses ExOpenDlg;

....

var ExOd:TExOpenDialog;
Begin
  ExOd:=TExOpenDialog.Create(nil);
  ExOd.filters:='все файлы|*.*|lazarus|*.pas;*.lpr';
  ExOd.FilterIndex:=1;
  ExOd.Options:=[edResize,edMultiSelect];
  if ExOd.Execute Then
   Begin
     Memo1.lines.Append(ExOd.Files.Text);
     Memo1.Lines.Append(ExOd.Dirs.Text);
   End;
  ExOd.Free;
end;


В режиме edMultiselect позволяет получить и выбранные файлы и выбранные каталоги, как отдельно в свойствах files и dirs, так и все вместе в свойстве all
Есть режим предпросмотра edShowPreview


Изображение Изображение

P.s. Без исправления этой ошибки в модуле ShellCtrls.pas под Linux будет ошибку выдавать, если вы корень открыть попробуете. В Windows все работает штатно
ssnakess
новенький
 
Сообщения: 47
Зарегистрирован: 24.09.2011 23:08:55


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru