Что нового

FileOpenDialog и FileSelectFolder не справляются. Мультивыбор файлов и/или папок

AIG

Новичок
Сообщения
7
Репутация
2
Доброго времени суток.
Какая функция в AutoIt позволяет реализовать мультивыбор файлов и(или) папок в диалоговом окне выбора файлов?
Функция:
Код:
FileOpenDialog
позволяет выбрать файл или несколько файлов, но нет возможности выбрать папку или папки.

Функция:
Код:
FileSelectFolder
позволяет выбирать только папку.

Функция:
Код:
_WinAPI_OpenFileDlg
тоже не умеет выбирать файлы и папки одновременно

Функция:
Код:
_WinAPI_BrowseForFolderDlg
одна из всех которая позволяет выбрать файл если добавить параметр $BIF_BROWSEINCLUDEFILES но возможности выбрать несколько файлов и(или) папок нет, еще один как по мне минус это реализация диалогового окна в старом древовидном стиле.

На англоязычном форуме находил пользовательскую функцию _OpenFileFolderDialog реализованную в виде Tree View - что есть минус, также функция судя по всему реализована на устаревших функциях + нет возможности выбирать файлы и папки через Shift или Ctrl как в FileOpenDialog + функция создает массив имен файлов включая имена всех родительских папок этого файла. Это может быть полезным в некоторых сценариях но в данном случае лишнее. В общем, от данной функции решил отказаться.

Итоговая задача состоит в реализации мультивыбора на подобие функции
Код:
FileOpenDialog
или
Код:
_WinAPI_OpenFileDlg
только с возможностью выбирать не только несколько файлов, но и несколько папок вместе с файлами или только папок, или только файлов.
В итоге получаем список имен файлов и папок которые мы выбрали.

С этой задачей отлично справляется функция
Код:
_WinAPI_DragQueryFileEx
Но Drag and Drop на мой взгляд лучше использовать как дополнительную опцию для удобства пользователя и в конкретных случаях. Этот метод выбора файлов не всегда удобен, к примеру когда окно программы развернуто на весь экран.
 
Последнее редактирование:

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
Итоговая задача состоит в реализации мультивыбора
Смотреть надо в сторону окна проводника и управлять им...
Самому создать дополнительные кнопки и функции получения объектов

elect2.png
 
Последнее редактирование:
  • Like
Реакции: AIG
Автор
AIG

AIG

Новичок
Сообщения
7
Репутация
2
Смотреть надо в сторону окна проводника и управлять им...
Самому создать дополнительные кнопки и функции получения объектов
Для новичка задача будет непростая, но спасибо за наводку. Посмотрю что смогу сделать )))
Удивлен конечно что подобный казалось бы очевидный функционал еще не решили опционально для стандартных функций, ну или на крайний случай кастомной функцией.
В то же время решений для визуальной составляющей диалогов открытия и сохранения файлов более чем достаточно, на Англоязычном форуме и не только)
 

Oki

Продвинутый
Сообщения
452
Репутация
62
Тоже не так давно была мысль добавить эту тему в раздел запросов новых функций. Может быть, есть подобный раздел на официальном форуме, на запросы в котором больше шансов на реакцию?
 
Автор
AIG

AIG

Новичок
Сообщения
7
Репутация
2
Может быть, есть подобный раздел на официальном форуме

Запросы к разработчикам AutoIt по исправлению багов и улучшению функций оставляют здесь:

Список запросов которые не будут рассмотрены разработчиками с англоязычного форума был продублирован здесь:

Все остальные проблемы и вопросы по AutoIt оставляют здесь:
https://www.autoitscript.com/forum/forum/43-autoit-help-and-support/

За столько лет существование языка никому в голову не пришло решить этот вопрос....? Маловероятно...
Скорей всего не все так просто.
Сейчас пытаюсь разобраться с тем что подкинул Andrey_A Возможно для меня это окажется неподъемной задачей.
 
Последнее редактирование:

Oki

Продвинутый
Сообщения
452
Репутация
62
Сейчас пытаюсь разобраться с тем что подкинул Andrey_A Возможно для меня это окажется неподъемной задачей.
Возможно, поможет моя идея, которая пришла при планировании того, как без слишком больших сложностей передавать такой список, состоящая в том, чтобы выделить все нужные файлы и папки, скопировать в буфер обмена Windows, а затем оттуда достать функциями работы с этим буфером. В итоге до реализации у меня лично не дошло, появился другой план того, как добиться конечного результата, который на тот момент интересовал, но этот план реальный, можно попробовать.
Сообщение автоматически объединено:

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

При так называемом копировании в буфер обмена Windows "файлов и папок" в действительности происходит именно копирование списка путей в специальном, но несложно читаемом формате.
 
Последнее редактирование:
  • Like
Реакции: AIG
Автор
AIG

AIG

Новичок
Сообщения
7
Репутация
2
выделить все нужные файлы и папки, скопировать в буфер обмена Windows
Посмотрел это решениие:
Один из примеров, с названием "6. Cut-copy-paste" уже содержит все необходимое для копирования файлов и папок в буфер обмена, останется только получить список имен файлов из буфера обмена. Вариант...
Но, меня больше заинтересовал другой пример, с Context menu, и его пункт Selected который выполняет именно то что требуется.

На англоязычном форуме были предложены еще два варианта мультивибратора файлов:

Первый - не самый удобный в использовании, но вполне рабочий. Получение итоговых данных так же с помощью буфера обмена
Код:
#include <Debug.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
    Local $sFileSelectFolder = FileSelectFolder("Select a folder", "")
    If @error Then
        MsgBox($MB_TOPMOST, "", "No folder was selected.")
        Exit
    EndIf

    Local $aArray = _FileListToArrayRec($sFileSelectFolder, "*", _
        $FLTAR_FILESFOLDERS, $FLTAR_NORECUR, $FLTAR_SORT, $FLTAR_FULLPATH)
    _DebugArrayDisplay($aArray, $sFileSelectFolder, "1:")
EndFunc   ;==>Example

Select-in-Debug-Array-Display.png



Второй - использовать готовую функцию ChooseFileFolder.au3 от Melba23
Отличная функция, считай поставил и забыл, но к сожалению TreeView и нет возможности выбирать файлы с помощью Shift+Mouse и Ctrl+Shift+Mouse, а это удобно когда нужно из большого количества файлов выбрать определенную часть файлов, пропустить часть и добавить в выбранные еще часть файлов.
Сейчас использую именно ее, но перечисленное выше ужасно раздражает при работе :-( Так что вопрос нужно хоть и не сразу, но решать :smile:
Сообщение автоматически объединено:

Сейчас вот наткнулся и пересматриваю список пользовательских функций , может найду подходящую :smile:
 

Вложения

  • ChooseFileFolder.zip
    26.2 КБ · Просмотры: 2
Последнее редактирование:

SealAlbinos

Продвинутый
Сообщения
154
Репутация
57
А если к примеру использовать $WS_EX_ACCEPTFILES (drag and drop), правд придется выбирать непосредственно самому из папки и перетаскивать в программу, но в целом все тоже самое
 

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
У меня выбор файлов и папок работает года 3 нормально в TIMG в диалоге elect
Попробовал вытащить код, кое-как из разных мест - но далеко не UDF (даже не "причёсывал" - нет времени), возможно где-то выскочит "нет функции" или "переменная не задекларирована", но основной код окна и получение списка работают
Далее кто захочет разобраться - разберётся (и найдёт недодстающее и приведёт всю эту кашу в порядок))) - пример в архиве Ex_Select_FoldersFiles.au3
 
Последнее редактирование:
  • Like
Реакции: AIG
Автор
AIG

AIG

Новичок
Сообщения
7
Репутация
2
А если к примеру использовать $WS_EX_ACCEPTFILES (drag and drop)
Но Drag and Drop на мой взгляд лучше использовать как дополнительную опцию для удобства пользователя и в конкретных случаях. Этот метод выбора файлов не всегда удобен, к примеру когда окно программы развернуто на весь экран.
Рабочий вариант, но не панацея :smile:
 

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
Рабочий вариант, но не панацея :smile:
Панацея — мифическое универсальное средство от всех болезней
А причём тут панацея? Вы задали вопрос - вам дали ответ...
Что касается универсальности любых функций - её и быть не может - за последние года 2, я для себя переписал более 500 функций, которые когда-то брал из (UDF и др. мест) и считал их константами - а всё дело в скорости... поэтому каждый может создавать, тестировать, усовершенствовать...
 
Последнее редактирование:
Автор
AIG

AIG

Новичок
Сообщения
7
Репутация
2
Вы задали вопрос - вам дали ответ...
И я благодарен людям которые отзываются на просьбу о помощи.
Я надеюсь вы понимаете что "панацея" сказано было образно :smile:
Никто не питает ложных иллюзий найти одну таблетку от всех проблем :smile:
Я думаю человек которому я ответил цитатой из шапки поймет, что данный способ уже рассматривался.

за последние года 2 я для себя переписал более 500 функций
Это здорово, хорошая практика. Но не у всех же есть такой опыт :smile:
 
Верх