Диалоги в Microsoft Visual FoxPro
« Назад В разделе описаны функции GETDIR( ), GETFILE( ), GETPICT( ) и PUTFILE( ), открывающие соответственно диалоги выбора директории, файла, рисунка и сохранения файла, а также функция LOCFILE( ) поиска файла на диске, открывающая диалог выбора файла только в ситуации, когда файл не найден. Одинаковые параметры функций приведены в табл. 19.3. Таблица 19.3 Одноименные параметры рассматриваемых в разделе функций
Функция GETDIR([cDirectory [, cText [, cCaption [, nFlags [, lRootOnly]]]]])отображает диалог выбора директории. Возвращает строку, содержащую полное имя выбранной директории. Если директория не выбрана, то функция вернет строку нулевой длины. Начиная с версии VFP 7 функция GETDIR( ) поддерживает 2 различных диалога выбора директории. Если функции передано менее 3-х параметров, то GETDIR( ) откроет диалог, применяемый прежних версиях, в противном случае VFP использует процедуру Win32 API-SHBrowseForFolder и соответственно открываемый ею диалог. Параметры: cDirectory – полное имя директории, первоначально отображаемой в диалоге. Если параметр не задан или задан в виде пустой строки, то при первом вызове GETDIR( ) отобразится директория по умолчанию, при последующих – последняя выбранная директория. cText – текст над деревом директорий. cCaption – заголовок диалога. Если не задан или задан в виде пустой строки, отобразится заголовок по умолчанию: "Select Directory" или "Обзор папок". nFlags – устанавливает параметры диалога. Задается как сумма приведенных в табл. 19.4 значений. Таблица 19.4 Наиболее часто употребляемые значения параметра nFlags
Замечание. Полное описание флагов диалога выбора директорий см. в MSDN SHBrowseForFolder. lRootOnly – параметр логического типа; обеспечивает, если равен .T., отображение только директории cDirectory и ее поддиректорий. Если параметр cDirectory задан в виде пустой строки, то берется директория по умолчанию. Пример 1. Открывается диалог, использующий флаги 16 и 32, и вводится часть имени существующей директории. nFlags = 16 + 32 && Открываемый диалог приведен на рис. 19.2 someDir = GetDir(' ', 'Поиск директорий:', ; Рис. 19.2. Диалог с nFlags = 16 + 32 Пример 2. Открывается диалог, использующий флаги 16, 32, 64 и 16384. nFlags = 16 + 32 + 64 + 16384 && Открываемый диалог приведен на рис. 19.3 someDir = GetDir(' ', 'Новый интерфейс:', ; Рис. 19.3. Диалог выбора папки или файла Функция GETFILE([cFileExtensions] [,cFileNameCaption]
|
Формат |
Расширение |
Анимационный курсор |
ANI |
Битовая карта |
BMP |
Курсор |
CUR |
Независимая от устройства битовая карта |
DIB |
Обмен образов |
EXIF |
GIF |
GIF, GFA |
JPEG |
JPG, JPEG, JPE, JFIF |
Икона |
ICO |
Сетевая графика |
PNG |
TIF |
TIF, TIFF |
Windows-метафайл |
WMF |
Замечания:
1. В VFP файлы формата "курсор", "анимационный курсор" и "икона" могут использоваться как графические файлы. Например, файл формата "анимационный курсор" можно указать в качестве значения свойства Picture элемента управления Image. Однако элемент управления будет воспроизводить статическое представление курсора.
2. Для очистки всех кэшированных графических файлов, включая GIF- и JPG-файлы, используется команда CLEAR RESOURCES.
Пример. Создается форма, имеющая элемент управления Image. Функция GETPICT( ) используется для определения значения свойства Picture этого элемента управления.
public oForm
&& Создаем форму и добавляем в нее объект Image, дав ему имя SomePict
oForm = CreateObject("Form")
oForm.AddObject("SomePict", "Image")
&& Настраиваем свойства формы и объекта SomePict
with oForm
&& Размеры формы и ее заголовок
.Width = 220
.Height = .Width * 0.75
.Caption = "Форма с картинкой"
&& Размеры объекта SomePict и его координаты
&& Центрируем SomePict и по горизонтали и по вертикали
.SomePict.Width = .Width * 0.5
.SomePict.Height = .Height * 0.5
.SomePict.Left = (.Width - .SomePict.Width) / 2
.SomePict.Top = (.Height - .SomePict.Height) / 2
&& Вписываем образ в объект, сохраняя его пропорции
.SomePict.Stretch = 1
.SomePict.Picture = GetPict('WMF', 'Метафайл:', 'Выбрать')
if Empty(.SomePict.Picture ) then && Нажали "Отмена" или Esc
&& Удаляем переменную oForm из памяти
release oForm
cancel
endif
&& Показываем картинку и форму; возможный результат см. на рис. 19.5
.SomePict.Visible = .T.
.Visible = .T.
endWith
Рис. 19.5. Выбран метафайл
Функция
LOCFILE(cFileName [, cFileExtensions] [, cFileNameCaption])
находит файл на диске и возвращает полное имя файла. Если файл не найден, то появится диалог "Открыть". Диалог имеет стандартный заголовок – Open. Если файл не выбран, то генерируется ошибка и функция не возвращает результата.
Параметр (см. также табл. 19.3):
cFileName – имя файла, который нужно найти.
Если cFileName – это только имя файла, то VFP прежде ищет файл в директории по умолчанию, и если в ней файл не найден, то продолжает поиск в директориях, заданных SET PATH.
Если cFileName – это полное имя файла, то файл ищется по указанному адресу, если там его нет, то – в директории по умолчанию, если и в ней файл не найден, то VFP продолжает поиск в директориях, заданных SET PATH.
Функция
PUTFILE([cFileNameCaption] [, cFileName] [, cFileExtensions])
открывает диалог "Сохранить как" и возвращает заданное в нем полное имя файла. Полученное имя можно использовать для записи файла на диск. Заголовок диалога – Save as.
Если файл не выбран (нажата кнопка "Отмена" или Esc), то функция вернет пустую строку.
Параметр (см. также табл. 19.3):
cFileName – имя файла по умолчанию. Может содержать путь.
Пример. Данные выбранной таблицы копируются в файл с разделителем. Имя таблицы возвращается GETFILE( ), а имя файла с разделителем – PUTFILE( ). Полученный файл открывается для просмотра. В качестве разделителя по умолчанию берется запятая.
Поскольку при выборе существующего файла SET SAFETY-предупреждение генерируется и PUTFILE( ) и COPY TO, то для устранения повторных сообщений SET SAFETY перед выполнением COPY TO устанавливается в OFF.
gcTableName = GetFile('DBF', 'Открыть таблицу:')
if Empty(gcTableName) && Нажали Esc или "Отмена"
cancel
endif
use (gcTableName)
gcDelimName = Alias( ) + '.DLM'
set safety on
gcDelimFile = PutFile('Файл с разделителем:', gcDelimName, 'DLM')
if Empty(gcDelimFile) && Нажали Esc или "Отмена"
cancel
endif
&& Создаем файл с разделителем
set safety off
copy to (gcDelimFile) delimited
&& Восстанавливаем режим выдачи предупреждений
set safety on
&& Возможный результат приведен на рис. 19.6
modify file (gcDelimFile) noedit
Рис. 19.6. Фрагмент копии таблицы Authors.dbf в виде файла с разделителем