Navigation: Операторы создания пользовательского интерфейса > FILEDIALOG - Выбор файла |
![]() ![]() ![]() |
Выбрать файл:
filedialog [заголовок] ,файл [,расширения] [,индекс] [,флаг(и)]
заголовок - Строковая константа с текстом заголовка, который будет размещен в диалоге. Если параметр опущен, то заголовок по умолчанию заимствуется у Windows.
файл - Метка строковой переменной, которая получит выбранное имя (имена) файла (файлов).
расширения - Строковая константа, в которой для «List Files of Type» выпадающего окна списка - указываются желаемые расширения файлов. Если параметр опущен, то расширение по умолчанию - все файлы (*.*).
индекс - Знаковая целочисленная переменная используемая для выбора отличного от расширения по умолчанию, заданного номером индекса.
флаг(и) - Список меток (через запятую) , содержащий битовый массив для обозначения действий, которые следует выполнить с файлом.
Процедура FILEDIALOG выводит на экран стандартное Windows-окно выбора файла и возвращает имя выбранного пользователем файла в переменной, указанной параметром файл. Значение параметра файл устанавливает выбор файла по умолчанию, предоставляемый пользователю в окне выбора.
FILEDIALOG выводит или стандартное для Windows окно Open... или стандартное окно Save... . По умолчанию открывается окно Open... , если такой файл не существует, пользователю выдается предупреждение и файл не открывается. В случае открытия окна Save... пользователь предупреждается о том, что такой файл уже есть и файл не сохраняется.
В строке параметра расширения должно присутствовать описание файла, за которым следует его маска. Элементы строки отделяются друг от друга символом вертикальной черты (|). Например, строка расширения:
'All Files | *.* | Clarion Source | *.CLW;*.INC;*.EQU;*.INT | Clarion Templates|*.TPL;*.TPW'
указывает три варианта выбора для окна списка List Files of Type. Первое указанное в строке расширения расширение файла будет расширением по умолчанию. Несколько расширений разделяются точкой с запятой (;).
Параметр флаг представляет собой битовый массив, в котором обозначаются действия, которые следует выполнить с файлом (см. мнемонические имена соответствия дли них в файле EQUATES.CLW. Для бита номер:
0 Если ноль (0000b),открывается диалог Open... .
1 Если единица (0001b), открывается диалог Save... .
2 Если два (0010b), сохраняется и восстанавливается путь к текущей директории.
4 Если 4 (0100b), сообщение об ошибке не появляется, если файл присутствует в Save... или не присутствует Open....
8 Если 8 (1000b), возвращение множественных выбранных значений, если пользователь выбирает несколько файлов. Когда используется диалог с длинными имена файлов, возвращается строка с разделенными вертикальной чертой (|) именами файлов (с полным путем в начале строки, если выбран не один файл, тогда как при выборе только одного файла возвращается имя файла с полным путем). При использовании диалога с короткими именами, имена файлов в строке разделяются пробелами. Не допустимо при использовании File:Save или File:Directory.
16 Если 16 (10000b), использование диалогов с длинными именами файлов в 32-битных программах.
32 Если 32 (100000b), вывод диалога выбора директории для выбора пути.
64 Если 64 (1000000b), и указанное или набранное имя файла не существует, диалог отображает подсказку для создания нового имени файла с данным именем. Если пользователь выбирает создание файла, FILEDIALOG завершает работу и возвращает набранное имя файла, в противном случае окно диалога остается открытым. Этот флаг не может быть указан совместно с флагом FILE:Directory.
128 Если 128 (10000000b), и указанное имя файла набрано без расширения, добавляется расширение по умолчанию. Расширение по умолчанию берется из первой маски для первой пары фильтра. При использовании мета-символов (* или ?) в расширении по умолчанию, флаг игнорируется. Флаг также игнорируется, если используются флаги FILE:Multi и FILE:Directory или оба вместе. Чтобы к имени файла не добавлялось расширение, при указании FILE:AddExtension, имя файла должно быть заключено в двойные кавычки (т.е. "myfile"). Из-за ограничения Windows, если расширение по умолчанию указано длиной более 3-х символов, то к имени файла добавляется только 3 первых символа.
Ниже представлен исчерпывающий пример этих флагов упрощенных до меток соответствия ( полный список См.в EQUATES.CLW):
FILE:Save EQUATE(1)
FILE:KeepDir EQUATE(2)
FILE:NoError EQUATE(4)
FILE:Multi EQUATE(8)
FILE:LongName EQUATE(10H)
FILE:Directory EQUATE(20H)
FILE:CreatePrompt EQUATE(40H)
FILE:AddExtension EQUATE(80H)
Наконец, параметр индекс – знаковое целое используется для указания отличного от значения по умолчанию расширения в списке расширений. Например:
'All Files | *.* | Clarion Source | *.CLW;*.INC;*.EQU;*.INT | Clarion Templates|*.TPL;*.TPW'
Строка расширений содержит пары: <описание>|<маска> и параметр индекса указывающий такие пары. Поэтому, в примере выше, значение 2 индекса отобразит описание 'Clarion Source' и соответствующее расширение, значение 3 индекса отобразит 'Clarion Templates' и т.д.
FILEDIALOG устанавливает код ошибки в переменной [:FILEERRORCODE:], если в окне выбора пользователем была нажата кнопка Cancel, и сбрасывает код ошибки, если была нажата кнопка Ok. Если пользователь изменил путь к файлу, использованный в диалоговом окне, то текущий для ваше прикладной программы каталог тоже изменится (если только не установлен флаг FILE:KeepDir). Это свойство операционной системы Windows. Если нужно, чтобы пользователь мог просматривать другие каталоги и при этом текущий каталог прикладной программы не изменялся, сохраните перед выполнением процедуры FILEDIALOG путь к текущему каталогу с помощью функции PATH, а после выполнения FILEDIALOG снова восстановите его оператором SETPATH или установите флаг FILE:KeepDir.
Пример:
FILEDIALOG 'Choose File to View',FileName,'Text|*.TXT|Source|*.CLW',FILE:LongName,FILE:KeepDir