Команда @ ... GET - прозрачные кнопки

Создает прозрачную командную кнопку. Включена для совместимости с предыдущими версиями. Для приложений Visual FoxPro следует использовать элемент управления CommandButton.

Синтаксис

@ nRow, nColumn 
GET MemVarName | FieldName 
FUNCTION cFormatCodes | PICTURE cFormatCodes
	[DEFAULT nExpression1]
	[SIZE nHeight, nWidth [, nSpacing]]
	[ENABLE | DISABLE]
	[MESSAGE cMessageText]
	[NAME ObjectName]
	[VALID lExpression1 | nExpression2]
	[WHEN lExpression2]
	[COLOR SCHEME nSchemeNumber
	| COLOR ColorPairList]

Параметры
@ nRow, nColumn
Задает местоположение прозрачной кнопки. Аргументы nRow и nColumn представляют собой числовые выражения, определяющие позицию первой кнопки в группе прозрачных кнопок.
Строки нумеруются сверху вниз. Первая строка имеет номер 0 в основном окне Visual FoxPro или в окне, определенном пользователем.
В Visual FoxPro строка 0 это строка, расположенная непосредственно под системной строкой меню Visual FoxPro.
В FoxPro для Macintosh строка 0 это строка, расположенная непосредственно под строкой заголовка FoxPro.
В FoxPro для MS-DOS строка 0 это строка, которую занимает системная строка меню FoxPro. Подробнее о том, как, манипулируя системной строкой меню FoxPro для MS-DOS, размещать прозрачные кнопки в строке 0, см. SET SYSMENU.
Столбцы нумеруются слева направо. Первый столбец имеет номер 0 в основном окне Visual FoxPro или пользовательском окне.
Когда в пользовательское окно направляется первая кнопка из группы прозрачных кнопок, координаты ее строки и столбца берутся относительно данного пользовательского окна, а не основного окна Visual FoxPro.
В Visual FoxPro и FoxPro для Macintosh позиция кнопки в основном окне Visual FoxPro или в пользовательском окне определяется шрифтом этого окна. Большинство шрифтов допускают множество вариантов с различными размерами, а некоторые из них имеют пропорциональные промежутки. Номер строки зависит от высоты текущего шрифта, а номер столбца от средней ширины буквы в текущем шрифте.
В Visual FoxPro и FoxPro для Macintosh позицию первой кнопки в группе прозрачных кнопок можно задавать дробными значениями координат по строкам и столбцам.
В FoxPro для MS-DOS десятичные дробные значения, используемые в качестве координат по строкам и столбцам, округляются до ближайшего целого числа.

GET MemVarName | FieldName
Задает переменную памяти, элемент массива или поле, в котором следует сохранять число, представляющее сделанный пользователем выбор. Например, если вы создали четыре прозрачные кнопки и пользователь нажимает третью из них, сохраняется число 3. Начальное значение MemVarName или FieldName определяет, какая кнопка будет нажата в исходном состоянии.
FUNCTION cFormatCodes | PICTURE cFormatCodes
Задает прозрачную кнопку. Необходимо включить предложение FUNCTION, предложение PICTURE или оба эти предложения. Ни один из трех этих методов нельзя выделить в качестве предпочтительного.
В предложении FUNCTION символьное выражение cFormatCodes должно начинаться с кода *I. Чтобы создать несколько прозрачных кнопок, нужно поставить точку с запятой для каждой дополнительной кнопки. Например, следующее предложение создает три прозрачные кнопки:

... FUNCTION '*I ;;'...

Заметьте, что будут созданы именно три прозрачные кнопки, хотя в предложении содержится только две точки с запятой.
В предложении PICTURE символьное выражение cFormatCodes должно начинаться кодом @, за которым следует *I и пробел. Например, следующее предложение создает три прозрачные кнопки:

... PICTURE '@*I ;;'... 

Можно задать и оба предложения, FUNCTION и PICTURE. В этом случае символьное выражение cFormatCodes предложения FUNCTION должно содержать *I, что указывает на создание прозрачных кнопок; кроме того, в него можно включить пробел и точки с запятой, чтобы задать дополнительные прозрачные кнопки. Символьное выражение cFormatCodes предложения PICTURE также может содержать точки с запятой, указывающие на создание дополнительных прозрачных кнопок.
В следующем примере иллюстрируются разнообразные формы синтаксиса, используемые при создании прозрачных кнопок. Создаются пять прозрачных кнопок; число, соответствующее каждой нажатой кнопке, сохраняется в переменной gnChoice. Первая кнопка размещается во второй строке и втором столбце. Каждая кнопка имеет высоту в две строки и ширину в четыре столбца, а между собой кнопки разделяются одной строкой.
Только предложение FUNCTION:

STORE 1 TO gnChoice
@ 2,2 GET gnChoice FUNCTION '*I ;;;;' SIZE 2, 4, 1
READ

STORE 1 TO gnChoice
STORE '*I ;;;;' TO mfunc
@ 2,2 GET gnChoice FUNCTION mfunc SIZE 2, 4, 1
READ

Только предложение PICTURE:
STORE 1 TO gnChoice
@ 2,2 GET gnChoice PICTURE '@*I ;;;;' SIZE 2, 4, 1
READ

STORE 1 TO gnChoice
@ 2,2 GET gnChoice PICTURE '@*I' + ' ;;;;' SIZE 2, 4, 1
READ

Оба предложения FUNCTION и PICTURE:
STORE 1 TO gnChoice
@ 2,2 GET gnChoice FUNCTION '*I' PICTURE ' ;;;;' SIZE 2, 4, 1
READ 

STORE 1 TO gnChoice
@ 2,2 GET gnChoice FUNCTION '*I ;;' PICTURE ';;' SIZE 2, 4, 1
READ

Опции N, T, H и V предложений PICTURE и FUNCTION
Вместе с кодом спецификации *I можно указывать и другие опции, которые модицифируют поведение (опции N и T) и выравнивание (опции H и V) прозрачных кнопок. Эти опции описаны в следующей таблице.

Элемент		Описание
N		Не прекращает операцию READ при нажатии прозрачной кнопки.
		Данное поведение принимается по умолчанию.
T		Прекращает READ в момент нажатия прозрачной кнопки. 
H		Позиционирует прозрачные кнопки в горизонтальной строке.
V		Позиционирует прозрачные кнопки в вертикальной строке.
		Данное выравнивание принимается по умолчанию. 

Опции H и V можно комбинировать с опциями T и N следующими способами: NH, NV, TH и TV. Например, следующее предложение создает вертикальную группу кнопок и не прекращает выполнение команды READ при нажатии одной из этих кнопок:

... FUNCTION '*INV... '

Недоступные прозрачные кнопки
Прозрачную кнопку можно сделать недоступной, чтобы ее нельзя было нажать. Когда кнопка недоступна, она изображается в цветах, определенных для данного состояния. Чтобы сделать прозрачную кнопку недоступной, поставьте две обратные косые черты (\\) перед точкой с запятой, соответствующей данной кнопке в предложении FUNCTION или PICTURE.
В следующем примере создается пять прозрачных кнопок. Вторая и четвертая кнопка делаются недоступными: для этого перед второй и четвертой точкой с запятой ставятся по две обратные косые черты.

CLEAR
STORE 1 TO gnChoice
IF NOT _DOS
	MODIFY WINDOW SCREEN FONT 'foxfont', 9
ENDIF
*** Draw boxes для the transparent-button regions. ***
@ 4,2  SAY CHR(218) + CHR(196) + CHR(196) + CHR(191)
@ 5,2  SAY CHR(192) + CHR(196) + CHR(196) + CHR(217)
@ 7,2  SAY CHR(218) + CHR(196) + CHR(196) + CHR(191)
@ 8,2  SAY CHR(192) + CHR(196) + CHR(196) + CHR(217)
@ 10,2 SAY CHR(218) + CHR(196) + CHR(196) + CHR(191)
@ 11,2 SAY CHR(192) + CHR(196) + CHR(196) + CHR(217)
@ 13,2 SAY CHR(218) + CHR(196) + CHR(196) + CHR(191)
@ 14,2 SAY CHR(192) + CHR(196) + CHR(196) + CHR(217)
@ 16,2 SAY CHR(218) + CHR(196) + CHR(196) + CHR(191)
@ 17,2 SAY CHR(192) + CHR(196) + CHR(196) + CHR(217)
@ 4,2 GET gnChoice FUNCTION '*I ;\\;;\\;' SIZE 2, 4, 1
READ 

DEFAULT nExpression1
Когда пользователь нажимает прозрачную кнопку, этот выбор сохраняется в заданной переменной памяти, элементе массива или поле. Если задана несуществующая переменная памяти, она будет автоматически создана и проинициализирована, при условии, что включено предложение DEFAULT. Однако если в этом предложении указать элемент массива, он не будет создан. Если заданная переменная памяти уже существует или если вы задали поле, предложение DEFAULT игнорируется.
Замечание Если предложение DEFAULT опущено и переменная памяти, заданная аргументом MemVarName, не существует, Visual FoxPro сгенерирует сообщение об ошибке.
Выражение nExpression определяет начальное значение переменной MemVarName. Далее приведены примеры предложений DEFAULT для прозрачных кнопок:

@ 2,2 GET gnChoice FUNCTION '*I ;;;;' DEFAULT 1
READ

STORE 3 TO gnButton
@ 2,2 GET gnChoice FUNCTION '*I ;;;;' DEFAULT gnButton
READ

SIZE nHeight, nWidth [, nSpacing]
Задает размер прозрачной кнопки. Аргумент nHeight определяет высоту, а nWidth ширину. По умолчанию высота и ширина равны 0.
По умолчанию между вертикальными кнопками пробелы не делаются, а между горизонтальными кнопками вставляется один столбец. Промежуток между прозрачными кнопками определяется аргументом nSpacing. Если вы создаете вертикальные кнопки, nSpacing обозначает количество строк между кнопками. Если вы создаете горизонтальные кнопки, nSpacing обозначает число столбцов между кнопками.

ENABLE
Делает группу кнопок доступной. По умолчанию прозрачные кнопки становятся доступными при выдаче команды READ. Предложение ENABLE можно включать в программу для напоминания о том, что прозрачной кнопкой можно пользоваться.
DISABLE
Запрещает активизацию группы кнопок при выдаче команды READ. Когда кнопка не активна, она изображается определенными для данного состояния цветами и пользователь не может ее нажимать. О том, как сделать недоступной не целую группу прозрачных кнопок, а отдельную кнопку, см. выше раздел "Недоступные прозрачные кнопки". Чтобы сделать недоступные прозрачные кнопки доступными, используйте команду SHOW GET ENABLE.
MESSAGE cMessageText
Создает сообщение, которое появляется при нажатии прозрачной кнопки.
В Visual FoxPro и FoxPro для Macintosh сообщение выводится в строке состояния. Если строка состояния была отключена с помощью команды SET STATUS BAR OFF, сообщение располагается в последней строке основного окна Visual FoxPro.
В FoxPro для MS-DOS сообщение по умолчанию размещается в центре последней строки основного окна FoxPro. Местоположение сообщения можно изменить командой SET MESSAGE.
NAME ObjectName
Допустимо только в Visual FoxPro.
Создает ссылку на командную кнопку как на объект, что позволяет манипулировать этой кнопкой, используя объектно-ориентированные свойства элемента управления CommandButton. Подробнее о манипулировании элементами управления FoxPro с помощью предложения NAME см. Элементы управления и объекты.
VALID lExpression1 | nExpression2
Санкционирует пользовательский ввод. Когда пользователь нажимает прозрачную кнопку, вычисляется значение выражения VALID.
Как правило, lExpression1 и nExpression2 представляют собой пользовательские функции. С помощью подобных функций можно выбирать другие элементы управления, делать их доступными или недоступными, открывать окно просмотра, открывать другие формы для ввода данных или переходить к новой записи. В качестве пользовательской функции можно задать команду CLEAR READ, которая прекращает операцию READ.
lExpression1
Когда в предложение VALID возвращается логическое значение, это значение игнорируется, а прозрачные кнопки остаются текущим элементом управления. Впрочем, можно задать пользовательскую функцию с выражением lExpression1, которая возвращает в предложение VALID логическое значение и при этом активизирует другой элемент управления.
nExpression2
Предложение VALID с числовым выражением nExpression2 используется для задания элемента управления, который следует активизировать после нажатия прозрачной кнопки. Об элементах управления см. Элементы управления и объекты.
Числовое выражение nExpression2 определяет одну из трех следующих ситуаций.
Если значение nExpression2 равно 0, нажатая прозрачная кнопка остается активной.
Если значение nExpression2 положительно, оно указывает количество элементов управления, на которое следует сдвинуться. Например, если вы находитесь у последней кнопки в группе прозрачных кнопок и VALID возвращает 1, активизируется следующий элемент управления. Если значение nExpression2 больше числа оставшихся элементов управления, команда READ прекращается (если только не выдана команда READ CYCLE, активизирующая элементы управления).
Если значение nExpression2 отрицательно, оно задает количество элементов управления, на которое нужно вернуться. Например, если вы находитесь на первой кнопке в группе прозрачных кнопок и VALID возвращает -1, активизируется предыдущий элемент управления или текстовое поле. Если nExpression2 задает возврат далее первого элемента управления, команда READ прекращается (если только не выдана команда READ CYCLE, активизирующая элементы управления).
WHEN lExpression2
Разрешает или запрещает нажатие прозрачных кнопок в зависимости от логического значения выражения lExpression2; оно должно быть "истиной" (.T.), чтобы какая-либо прозрачная кнопка могла быть нажата. Если значением lExpression2 оказывается "ложь" (.F.), никакие прозрачные кнопки нажимать нельзя, а если они расположены между другими элементами управления, они будут пропускаться.
COLOR SCHEME nSchemeNumber
Задает цвета прозрачных кнопок. Если не задано предложение COLOR, цвета кнопок будут определяться цветовой схемой основного окна Visual FoxPro; если прозрачные кнопки предназначаются для пользовательского окна, то их цвета определяются цветовой схемой этого окна.
COLOR ColorPairList
Задает цвета для прозрачных кнопок. Цвета кнопок определяются только цветовыми парами 5, 6 и 10 цветовой схемы или списка цветовых пар.

Номер цветовой пары	Цветовой атрибут области редактирования
5			Сообщение
6			Нажатая прозрачная кнопка
10			Недоступная прозрачная кнопка

Подробнее о цветовых схемах и цветовых парах см. раздел Использование цветов.

Комментарии
В Visual FoxPro прозрачные кнопки создаются с помощью конструктора форм или DEFINE CLASS. Подробнее о совместимости с элементами управления предыдущих версий FoxPro 2.x см. Элементы управления и объекты.
Подробнее о добавлении элементов управления к форме см. главу 9 "Создание форм" Руководства разработчика и Добавление объекта в контейнерный класс.
Данный вариант команды @... GET создает прозрачные кнопки ѕ прямоугольные области основного окна Visual FoxPro или пользовательского окна, которые можно выбирать ("нажимать"). С помощью команды @... SAY можно помещать символы в прямоугольники кнопок. При нажатии прозрачной кнопки изображенные на ней символы выделяются подсветкой. Чтобы активизировать кнопки, выдайте команду READ или READ CYCLE.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.