Распечатать страницу

Диалоги в Microsoft Visual FoxPro

« Назад

В разделе описаны функции GETDIR( ), GETFILE( ), GETPICT( ) и PUTFILE( ), открывающие соответственно диалоги выбора директории, файла, рисунка и сохранения файла, а также функция LOCFILE( ) поиска файла на диске, открывающая диалог выбора файла только в ситуации, когда файл не найден. Одинаковые параметры функций приведены в табл. 19.3.

Таблица 19.3

Одноименные параметры рассматриваемых в разделе функций

Параметр

Описание

cFileExtensions

Строка, содержащая расширения отображаемых файлов. Файлы, имеющие расширения, отличные от заданных, в первоначальном диалоге видны не будут.
Расширения разделяются запятыми. Точка перед расширением не проставляется. Наибольшая длина строки – 254 символа.
Параметр cFileExtensions может содержать символы * и ?. Так, задание '?X?', позволит отобразить файлы с расширениями FXP, EXE, TXT и т. д.
Если cFileExtensions – это пустая строка, то отобразятся все файлы текущей директории.
Кроме расширений, cFileExtensions может содержать описания файлов. Описания появляются в раскрывающемся списке "Тип файла". Шаблон задания cFileExtensions следующий:
"Описание 1:расширения 1;Описание 2:расширения 2;…"
После выбора описания, например 1, отображаются файлы с расширениями, содержащимися в списке "расширения 1".
Если cFileExtensions – это ";", то отображаются файлы без расширения.

Примеры:

GetFile('PRG, FXP, SCX, SCT')

GetFile('Программы:PRG,FXP;Формы:SCX,SCT')

cFileNameCaption

Заголовок поля, отображающего выбранный файл

cTitleBarCaption

Заголовок диалога

cOpenButtonCaption

Заголовок кнопки ОK

Функция

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

nFlags

Имя

Описание

1

BIF_RETURNONLYFSDIRS

Возвращает только директории файловой системы, явно (физически) присутствующие на диске. Так, нельзя выбрать папку "Мой компьютер" или "Сетевое окружение"

2

BIF_DONTGOBELOWDOMAIN

Не включает в дерево директорий сетевые директории

8

BIF_RETURNFSANCESTORS

Не позволяет выбирать директории, не входящие в файловую систему. Так, нельзя выбрать папку Recycled

16

BIF_EDITBOX

Диалог содержит поле, в котором можно печатать путь. При вводе пути отображается список содержащих его директорий (см. пример 1 после описания параметров). Требует наличия shell32.dll версии не ниже 4.71

32

BIF_VALIDATE

Проверяет содержимое поля ввода пути. Если задан неверный путь, то кнопка ОК окажет недоступной. Употребляется совместно с флагом BIF_EDITBOX

64

BIF_NEWDIALOGSTYLE

Использует новый пользовательский интерфейс, позволяющий изменять размер диалога, перетаскивать папки, их создавать, переименовывать и удалять, а также выполнять иные поддерживаемые контекстным меню операции (меню появляется при нажатии на правую кнопку мыши). Требует наличия shell32.dll версии не ниже 5.0

16384

BIF_BROWSEINCLUDEFILES

Отображает и папки и файлы. Возвращает, если выбран файл, полное имя файла, завершающееся обратным слешем. Требует наличия shell32.dll версии не ниже 4.71

Замечание. Полное описание флагов диалога выбора директорий см. в MSDN SHBrowseForFolder.

lRootOnly – параметр логического типа; обеспечивает, если равен .T., отображение только директории cDirectory и ее поддиректорий. Если параметр cDirectory задан в виде пустой строки, то берется директория по умолчанию.

Пример 1. Открывается диалог, использующий флаги 16 и 32, и вводится часть имени существующей директории.

nFlags = 16 + 32

&& Открываемый диалог приведен на рис. 19.2

someDir = GetDir(' ', 'Поиск директорий:', ;
        'Выберите папку или файл', nFlags)

253.1.-Диалог-с-nFlags

Рис. 19.2. Диалог с nFlags = 16 + 32

Пример 2. Открывается диалог, использующий флаги 16, 32, 64 и 16384.

nFlags = 16 + 32 + 64 + 16384

&& Открываемый диалог приведен на рис. 19.3

someDir = GetDir(' ', 'Новый интерфейс:', ;
        'Выберите папку или файл', nFlags)

253.2.-Диалог-выбора-папки-или-файла

Рис. 19.3. Диалог выбора папки или файла

Функция

GETFILE([cFileExtensions] [,cFileNameCaption]
                   [, cOpenButtonCaption] [, nButtonType] [, cTitleBarCaption])

отображает диалог "Открыть" и возвращает имя выбранного файла. Возвращает пустую строку, если файл не выбран.

Параметры:

Описание параметров cFileExtensions, cFileNameCaption, cTitleBarCaption и cOpenButtonCaption см. в табл. 19.3.

nButtonType – задает число и типы кнопок диалога. Принимает следующие значения:

0 – (по умолчанию) кнопки ОK и Отмена;

1 – кнопки ОK, Отмена и New;

2 – кнопки ОK, Отмена и None.

Функция вернет "Untitled", если nButtonType = 1 и выбрана кнопка New; вернет пустую строку, если nButtonType = 2 и выбрана кнопка None.

Пример:

close databases

select 0

&& Открываемый функцией диалог приведен на рис. 19.4

gcTable = GetFile('DBF', 'Таблица:', ;

'Просмотр', 1, 'Просмотр или создание')

do case

case 'Untitled' $ gcTable

create (gcTable)

case Empty(gcTable)

return

otherwise

use (gcTable)

browse

endcase

253.3.-Диалог-инициируемый-функцией-GETFILE

Рис. 19.4. Диалог, инициируемый функцией GETFILE( )

Функция

GETPICT([cFileExtensions] [, cFileNameCaption]
                   [, cOpenButtonCaption])

отображает диалог "Открыть рисунок" и возвращает имя выбранного рисунка.

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

Описание параметров см. в табл. 19.3.

Форматы графических файлов, поддерживаемые VFP, перечислены в табл. 19.5.

Таблица 19.5

Форматы графических файлов, поддерживаемые VFP

Формат

Расширение

Анимационный курсор

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

253.4.-Выбран-метафайл

Рис. 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

253.5.-Фрагмент-копии-таблицы-Authors.dbf-в-виде-файла-с-разделителем

Рис. 19.6. Фрагмент копии таблицы Authors.dbf в виде файла с разделителем