Можно ли в FileDialog разрешить выбор только определённых файлов?
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
kreator
- ✯ Ветеран ✯
- Сообщения: 5252
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 27 раз
Можно ли в FileDialog разрешить выбор только определённых файлов?
Надо бы разрешить выбор только файлов с определёнными расширениями. Можно ли запретить другие в самом FileDialog? или делать отдельную проверку? По факту, в принципе пользователь имеет в Filedialog возможность руками написать свою "маску" и выбрать совсем не то, что нужно.
We are hard at work… for you. 
- Игорь Столяров
- Ветеран движения
- Сообщения: 8351
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 35 раз
- Поблагодарили: 111 раз
Можно ли в FileDialog разрешить выбор только определённых файлов?
ДД !
FileDialog() - это элемент Win API и его ограничения нужно искать в политиках Windows.
У нас есть такой прибамбас, как выбор файла (с пакетом данных) из списка.
При этом сам список - это обычный BROWSE с данными о времени создания файла - создаётся функцией DIRECTORY().
И вот здесь уже можно строго предлагать для выбора именно те файлы, которые прошли фильтрацию по признакам.
FileDialog() - это элемент Win API и его ограничения нужно искать в политиках Windows.
У нас есть такой прибамбас, как выбор файла (с пакетом данных) из списка.
При этом сам список - это обычный BROWSE с данными о времени создания файла - создаётся функцией DIRECTORY().
И вот здесь уже можно строго предлагать для выбора именно те файлы, которые прошли фильтрацию по признакам.
За теми, кто отстал, не возвращаться !
Кодекс
-
kreator
- ✯ Ветеран ✯
- Сообщения: 5252
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 27 раз
Можно ли в FileDialog разрешить выбор только определённых файлов?
Вы же не можете создать список всех нужных файлов во всех доступных каталогах, на всех сетевых ресурсах (да ещё и неизвестных).
Вообще как-то неудобно. Проверку после работы FileDialog можно сделать. Дальше что? Опять вызывать FileDialog? Или ограничиться только сообщением?
Вообще как-то неудобно. Проверку после работы FileDialog можно сделать. Дальше что? Опять вызывать FileDialog? Или ограничиться только сообщением?
We are hard at work… for you. 
- Игорь Столяров
- Ветеран движения
- Сообщения: 8351
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 35 раз
- Поблагодарили: 111 раз
Можно ли в FileDialog разрешить выбор только определённых файлов?
Даже не пробовал. У нас софт строгого режима.kreator писал(а): 14 Январь 2025, 22:35 Вы же не можете создать список всех нужных файлов во всех доступных каталогах
Есть папка обмена и в ней есть файлы. Шаг вправо или шаг влево - выстрел.
Так или иначе при неправильном выборе пользователь не получит желаемое.
А дальше записит от высоты отношений программы с пользователем. Можно и сообщить.
За теми, кто отстал, не возвращаться !
Кодекс
Можно ли в FileDialog разрешить выбор только определённых файлов?
Фильтр в диалоге — это лишь удобство для пользователя, а не защита. Поэтому отдельная проверка после выбора обязательна.
best sex dolls
- SergioRaguzini
- Старожил
- Сообщения: 271
- Зарегистрирован: 08 Декабрь 2009, 19:16
- Откуда: Краснодарский край
- Благодарил (а): 23 раза
- Поблагодарили: 1 раз
Можно ли в FileDialog разрешить выбор только определённых файлов?
Привет Всем!kreator писал(а): 14 Январь 2025, 22:35 Вы же не можете создать список всех нужных файлов во всех доступных каталогах, на всех сетевых ресурсах (да ещё и неизвестных)
Можно, используя рекурсивный вызов (идеи взял с каого-то забугорного форума). У меня была необходиость удалить старые файлы со всей метки выделенного для работы диска, во всех папках и подпапках. Все работает корректно (это кусок из cla-приложения медицинской направленности, запись "истории" из кода, конечно надо выкинуть,).
Код: Выделить всё
!* * * M a i n C o d e S e c t i o n * * *!
SETCURSOR(CURSOR:Wait) ! turn ON hourglass mouse cursor
DO PrepareRoutine
! 1. Получить список файлов:
DIRECTORY(all_Content, LOC:Source & '*.*', ff_:NORMAL) ! Get all files and directories
LOC:content_Counter = RECORDS(all_Content)
If LOC:content_Counter ! значит есть файлы или под-папки внутри анализируемой папки
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -!
LOOP LOC:LoopIndex_1 = LOC:content_Counter TO 1 BY -1
!- . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . -!
GET(all_Content, LOC:LoopIndex_1)
DO Animation ! индикация
if BAND(A_C:Attrib, ff_:DIRECTORY) AND A_C:ShortName <> '..' AND A_C:ShortName <> '.'
!- - - - - - - - - - - - - - - - - - - - -!
CYCLE ! Let sub-directory entries stay
!- - - - - - - - - - - - - - - - - - - - -!
else
all_Files.name = all_Content.name
all_Files.shortname = all_Content.shortname
all_Files.date = all_Content.date
all_Files.time = all_Content.time
all_Files.size = all_Content.size
all_Files.attrib = all_Content.attrib
ADD(all_Files) ! добавить файл в список
!- - - - - - - - - - - - - - - - - - - - -!
end !if
!- . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . -!
END !Loop
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -!
End !If LOC:content_Counter
! 2. Получить список папок:
FREE(all_Content) ! в исходное
DIRECTORY(all_Content, LOC:Source & '*.*', ff_:directory) ! Get all directories
LOC:content_Counter = RECORDS(all_Content)
If LOC:content_Counter ! значит есть файлы или под-папки внутри анализируемой папки
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -!
LOOP LOC:LoopIndex_1 = LOC:content_Counter TO 1 BY -1
!- . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . -!
GET(all_Content, LOC:LoopIndex_1)
DO Animation ! индикация
if BAND(A_C:Attrib, ff_:DIRECTORY) AND A_C:ShortName <> '..' AND A_C:ShortName <> '.'
!- - - - - - - - - - - - - - - - - - - - -!
all_Folders.name = all_Content.name
all_Folders.shortname = all_Content.shortname
all_Folders.date = all_Content.date
all_Folders.time = all_Content.time
all_Folders.size = all_Content.size
all_Folders.attrib = all_Content.attrib
ADD(all_Folders) ! добавить папку в список
!- - - - - - - - - - - - - - - - - - - - -!
end !if
!- . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . -!
END !Loop
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -!
End !If LOC:content_Counter
DO del_Files:Begin_Transaction ! начать транзакцию
! проанализировать и удалить файлы с датой меньше заданной:
LOOP LOC:LoopIndex_2 = 1 TO RECORDS(all_Files) ! сканирование очереди файлов
!- . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . -!
GET(all_Files, LOC:LoopIndex_2) ! получить данные по номеру
DO Animation ! индикация
GLO:Counter1 += 1
CLEAR(HIS:RECORD)
If all_Files.Date < GLO:del_Date
!- - - - - - - - - - - - - - - - - - - - - - - -!
GLO:Counter2 += 1
HIS:id_rec = GLO:Counter2
HIS:ord_num = GLO:Counter2
LOC:Target = LOC:Source & CLIP(all_Files.Name)
HIS:file_name = LOC:Target
REMOVE(LOC:Target)
if ~ ErrorCode()
HIS:reuslt_Descr = 'успешно'
else
HIS:result_Code = ErrorCode()
HIS:reuslt_Descr = 'ошибка ' & ErrorCode() & ' -> '& Error()
GLO:ErrorsFound = TRUE ! глоб.признак наличия ошибок
end !if ~
HIS:date_time = FORMAT(all_Files.Date, @D06.) & ' ' & FORMAT(all_Files.Time, @T01)
ADD(History) ! добавить запись
!- - - - - - - - - - - - - - - - - - - - - - - -!
End !If
if ~ (GLO:Counter1 % 100) then DISPLAY() . ! индикация
!- . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . -!
End !Loop
DISPLAY()
DO del_Files:End_Transaction ! завершить транзакцию
LOOP LOC:LoopIndex_3 = 1 TO RECORDS(all_Folders) ! сканирование очереди под-папок
!- . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . -!
GET(all_Folders, LOC:LoopIndex_3) ! получить данные по номеру
LOC:New_Source = LOC:Source & CLIP(all_Folders.Name) & '\'
del_Files:Analyse(LOC:New_Source) ! рекурсивный вызов этой же процедуры
!- . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . -!
End !Loop
!. . . . . к о н е ц п р о ц е д у р ы . . . . . .!
- SergioRaguzini
- Старожил
- Сообщения: 271
- Зарегистрирован: 08 Декабрь 2009, 19:16
- Откуда: Краснодарский край
- Благодарил (а): 23 раза
- Поблагодарили: 1 раз
Можно ли в FileDialog разрешить выбор только определённых файлов?
носители можно через API, а для сети - где-то встречал в интернете утилиту ком.строки сканирующую все сетевые подключения и сохр.результат в текстовом файле...
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5671
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 20 раз
- Поблагодарили: 82 раза
Можно ли в FileDialog разрешить выбор только определённых файлов?
У меня тоже в стандартной библиотеке есть функция выбора файла (каталога), основанная на directory. Она подменяет стандартный Filedialog в режиме защищенного доступа, когда пользователю запрещено выходить куда-то за рамки приложения на терминальном сервере. Заодно и не лазить за пределы выше заданного каталога.
Замена через system{PROP:FileDialogHook}.
Замена через system{PROP:FileDialogHook}.
C6/C12, ШВС, tps/btrieve.
