Команда @ ... GET - переключатели

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

Синтаксис

@ nRow, nColumn
GET MemVarName | FieldName 
FUNCTION cFormatCodes | PICTURE cFormatCodes
	[NAME ObjectName]
	[FONT cFontName [, nFontSize]]
	[STYLE cFontStyle]
	[DEFAULT Expression]
	[SIZE nHeight, nWidth [, nSpacing]]
	[ENABLE | DISABLE]
	[MESSAGE cMessageText]
	[VALID lExpression1 | nExpression]
	[WHEN lExpression2]
	[COLOR SCHEME nSchemeNumber
	| COLOR ColorPairList]

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

GET MemVarName | FieldName
Задает переменную памяти, элемент массива или поле, в котором следует сохранять сделанный пользователем выбор при установке переключателя. Значения MemVarName и FieldName должны быть числового или символьного типа.
Если значение MemVarName или FieldName числового типа, то в заданной им переменной памяти, элементе массива или поле сохраняется число, соответствующее установленному переключателю. Например, если вы создали три переключателя и пользователь устанавливает второй из них, сохраняется число 2.
Если значение MemVarName или FieldName символьного типа, то в переменной памяти, элементе массива или поле сохраняется название установленного переключателя.
Столбцы нумеруются слева направо. Первый столбец имеет номер 0 в основном окне Visual FoxPro или пользовательском окне.
Когда первый из группы переключателей помещается в пользовательское окно, координаты его строки и столбца берутся относительно данного пользовательского окна, а не основного окна Visual FoxPro.
В Visual FoxPro и FoxPro для Macintosh позиция переключателя в основном окне Visual FoxPro или в пользовательском окне определяется шрифтом этого окна. Большинство шрифтов допускают множество вариантов с различными размерами, а некоторые из них имеют пропорциональные промежутки. Номер строки зависит от высоты текущего шрифта, а номер столбца от средней ширины буквы в текущем шрифте.
В Visual FoxPro и FoxPro для Macintosh позицию переключателя можно задавать дробными значениями координат по строкам и столбцам.
В FoxPro для MS-DOS десятичные дробные значения, используемые в качестве координат по строкам и столбцам, округляются до ближайшего целого числа.
Начальная установка переключателя
Значение MemVarName или FieldName определяет, какой именно переключатель получит фокус при активизации переключателей по команде READ (и получит ли фокус вообще). Если значение MemVarName или FieldName числового типа, то фокус получает переключатель, соответствующий этому значению. Например, если значение MemVarName или FieldName равно 1, это означает, что первоначально фокус получает первый из определенных вами переключателей. Если значение MemVarName или FieldName не соответствует ни одному из переключателей (то есть оно меньше 1 или больше общего числа переключателей), то вначале ни один из переключателей не получит фокус.
Если значение MemVarName или FieldName символьного типа, проводится сравнение этого значения со всеми названиями переключателей с учетом регистра символов. При сравнении все специальные символы, а также все начальные и конечные пробелы игнорируются. Если найдено совпавшее название, этот переключатель и будет первоначально установлен. Если совпадений не обнаружится, то вначале ни один из переключателей не получит фокус.
FUNCTION cFormatCodes | PICTURE cFormatCodes
Задает переключатель, а также название или рисунок для него. Необходимо включить предложение FUNCTION, предложение PICTURE или оба эти предложения. Ни один из трех этих методов нельзя выделить в качестве предпочтительного. Обратную косую черту (\) в названии командной кнопки использовать нельзя.
Символьное выражение cFormatCodes предложения FUNCTION должно начинаться с символов *R. Чтобы создать названия переключателей, после *R через пробел задайте список названий, разделяя их точками с запятой. Для каждого названия создается один переключатель. Например, следующее предложение FUNCTION создает три переключателя None, Single и Double:

... FUNCTION '*R None;Single;Double'... 

В символьном выражении cFormatCodes предложения PICTURE используется тот же синтаксис, что и в предложении FUNCTION, только в предложении PICTURE символьное выражение должно начинаться символом @, за которым следует *R. Например, следующее предложение PICTURE создает три переключателя None, Single и Double:

... PICTURE '@*R None;Single;Double'... 

Можно задать оба предложения, FUNCTION и PICTURE. В этом случае символьное выражение cFormatCodes предложения FUNCTION должно содержать *R, что указывает на создание переключателей, а затем после пробела можно задавать их названия. Символьное выражение cFormatCodes предложения PICTURE также может содержать названия, создающие дополнительные переключатели.
В следующем примере иллюстрируются разнообразные формы синтаксиса, используемые при создании группы переключателей. Они начинаются со второй строки и второго столбца. Создаются три переключателя None, Single, и Double. Число, соответствующее установленному переключателю, сохраняется в переменной памяти gnChoice.
Только предложение FUNCTION:

STORE 1 TO gnChoice
@ 2,2 GET gnChoice FUNCTION '*R None;Single;Double'
READ

STORE 1 TO gnChoice
STORE '*R None;Single;Double' TO gcMyFunc
@ 2,2 GET gnChoice FUNCTION gcMyFunc
READ 

Только предложение PICTURE:

STORE 1 TO gnChoice
@ 2,2 GET gnChoice PICTURE '@*R None;Single;Double'
READ

Предложения FUNCTION и PICTURE:

STORE 1 TO gnChoice
@ 2,2 GET gnChoice FUNCTION '*R' PICTURE ' None;Single;Double'
READ

STORE 1 TO gnChoice 
@ 2,2 GET gnChoice FUNCTION '*R None;Single' PICTURE ';Double'
READ

Переключатели с рисунками
В Visual FoxPro и FoxPro для Macintosh название переключателя может также являться именем файла рисунка. В FoxPro для Macintosh можно использовать как файл рисунка типа PICT, так и растровый файл BMP.
Когда в переключателе для названия используется файл рисунка, этот переключатель ведет себя как переключатель с текстовым названием. Например, на экране появляется рисунок, а сам переключатель не отображается. При выборе рисунка, как и при установке переключателя соответствующее значение сохраняется в переменной памяти MemVarName или в поле FieldName.
Чтобы использовать файл рисунка для переключателя, включите букву B в код его спецификации. В предложениях FUNCTION и PICTURE кодами спецификации, создающими переключатель, являются соответственно *R и @*R. Чтобы создать переключатель с рисунком, укажите код *RB или @*RB, а затем после пробела имена файлов рисунков, разделенных точками с запятой. Если файл рисунка находится в каталоге, отличном от принимаемого по умолчанию, укажите вместе с именем файла путь к нему.
Замечание Рисунки, размещаемые на переключателе, не обрезаются, не уменьшаются и не увеличиваются. Чтобы вписать рисунок в переключатель, можно подрегулировать размер переключателя, используя предложение SIZE.
В FoxPro для Macintosh, если расширение имени файла рисунка опущено, Visual FoxPro сначала будет искать файл с заданным именем и расширением .BMP. Если такой файл не найден, Visual FoxPro ищет файл с заданным вами именем и расширением .PCT. Если и такой файл найти не удастся, Visual FoxPro ищет файл рисунка с заданным вами именем без расширения.
Маски рисунка и переключатели
В Visual FoxPro и FoxPro для Macintosh переключатель с рисунком имеет три состояния: верхнее, нижнее и недоступен. Visual FoxPro автоматически контролирует внешний вид переключателя с рисунком в каждом из этих трех состояний, но вы можете с помощью маски рисунка отменить внешний вид, используемый по умолчанию, и задать свой.
Маска рисунка определяет, какие области переключателя с рисунком должны быть прозрачными. По умолчанию прозрачными являются белые области. Если задана маска рисунка, то прозрачными будут белые области маски рисунка, а не файла рисунка.
Маска рисунка представляет собой файл монохромного рисунка. В Visual FoxPro маской рисунка является растровый файл с расширением имени .MSK. В FoxPro для Macintosh маской может служить как растровый файл с расширением .MSK, так и файл типа PICT с расширением .PCM. Маска рисунка должна иметь то же базовое имя, что и файл рисунка, и соответствующее расширение. Visual FoxPro автоматически ищет маску для данного файла рисунка в том же каталоге, в котором находится файл рисунка.
В большинстве случаев без маски можно обойтись. Если вам не нужно, чтобы какие-то фрагменты рисунка были белыми или если в файле рисунка задан белый фон, то переключатель с рисунком будет иметь требуемый вид во всех трех состояниях ѕ верхнем, нижнем и недоступном.
Если переключатель с рисунком сопровождается маской и находится в верхнем или нижнем состоянии, то все белые области рисунка окажутся прозрачными и сквозь них будет виден цвет самого переключателя. Однако для определенных областей можно сохранить белый цвет. Предположим, на рисунке изображена собака на белом фоне; пусть у нее белые глаза, а поверхность переключателя красного цвета. Вы хотите, чтобы фон переключателя остался красным, но при этом чтобы глаза у собаки были не красными, а белыми. Создайте маску рисунка, имеющую тот же размер, что и файл рисунка, но выполненную только в двух цветах ѕ черном и белом. Оставьте фон маски белым, а собаку сделайте целиком черной, включая глаза. Когда переключатель появится на экране, фон окажется красным и сольется с переключателем, но глаза останутся белыми.
Когда переключатель с рисунком недоступен, все белые области файла рисунка становятся прозрачными и сквозь них просвечивает цвет поверхности переключателя. Все области другого (не белого) цвета окажутся темно-серыми. Если у переключателя есть маска, все белые области маски будут прозрачными (сквозь них виден цвет кнопки), а все черные области приобретут темно-серую окраску.

Опции N, T, H, V, 2 и 3 предложений PICTURE и FUNCTION
Вместе с кодом спецификации *R можно указывать и другие опции, модифицирующие поведение (опции N и T) и внешний вид (опции H, V, 2 и 3) переключателей.
Коды спецификации 2 и 3 допустимы только в FoxPro для Macintosh.

Опция	Описание
N	Не прекращает операцию READ при установке переключателя. Данное поведение принимается по умолчанию.
T	Прекращает READ в момент установки переключателя.
H	Позиционирует переключатели в горизонтальной строке.
V	Позиционирует переключатели в вертикальном столбце. Данная ориентация принимается по умолчанию.
2	Создает плоские (двумерные) переключатели. Данный тип переключателя принимается по умолчанию в FoxPro для Macintosh.
3	Создает трехмерные переключатели. 

Опции T и N можно комбинировать с опциями H или V и 2 или 3. Например, следующее предложение создает вертикальный ряд переключателей, при установке которых операция READ не прекращается.

... FUNCTION '*RNV... '

В FoxPro для Macintosh следующее предложение создает вертикальный ряд двумерных переключателей, при установке которых операция READ не прекращается:

... FUNCTION '*RNV2... '

Переключатели с особыми возможностями
Переключателю можно назначить клавишу доступа, кроме того, его можно сделать недоступным. Чтобы наделить переключатель такими возможностями, нужно при определении его названия задать специальные символы. При сохранении названия в переменной памяти MemVarName или поле FieldName эти специальные символы отбрасываются.

Клавиши доступа
Для каждого переключателя можно создать клавишу доступа, поставив в названии переключателя перед нужным символом обратную косую черту со знаком "меньше" (\<). В следующем примере создаются три переключателя None, Single и Double, которым назначаются клавиши доступа: N для None, S для Single и D для Double:

STORE 1 TO gnChoice
@ 2,2 GET gnChoice FUNCTION '*R' PICTURE '\<None;\<Single;\<Double'
READ

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

STORE 1 TO gnChoice
@ 2,2 GET gnChoice FUNCTION '*R' PICTURE 'None;\\Single;Double'
READ

NAME ObjectName
Допустимо только в Visual FoxPro.
Создает ссылку на переключатель как на объект, что позволяет манипулировать переключателем, используя объектно-ориентированные свойства элемента управления OptionButton. Подробнее о манипулировании элементами управления FoxPro с помощью предложения NAME см. Элементы управления и объекты.
FONT cFontName [, nFontSize]
Допустимо только в Visual FoxPro и FoxPro для Macintosh.
Задает шрифт для названия переключателя и размер шрифта. Аргумент cFontName задает имя шрифта, а nFontSize размер шрифта. Например, следующая команда отображает название переключателя в шрифте Courier размером в 16 пунктов:

FONT 'Courier', 16 

Если вы указали предложение FONT, опустив аргумент nFontSize, используется 10-пунктовый шрифт.
В Visual FoxPro, если заданный шрифт отсутствует, его заменяет шрифт с похожими характеристиками.
В FoxPro для Macintosh, если заданный шрифт отсутствует, используется шрифт Chicago.
В FoxPro для MS-DOS предложение FONT игнорируется.
Если предложение FONT опущено, а переключатели помещаются в основное окно Visual FoxPro, используется шрифт этого окна. Если предложение FONT опущено, а переключатели помещаются в пользовательское окно, используется шрифт этого пользовательского окна.
STYLE cFontStyle
Допустимо только в Visual FoxPro и FoxPro для Macintosh.
Задает стиль шрифта для названий переключателей. Если предложение STYLE опущено, используется стиль Normal (нормальный).
В Visual FoxPro, если заданный вами стиль шрифта отсутствует, его заменяет стиль с похожими характеристиками.
В FoxPro для Macintosh, если заданный стиль шрифта отсутствует, используется стиль Normal.
В FoxPro для MS-DOS предложение STYLE игнорируется.
Стили шрифта, которые можно задавать в качестве cFontStyle, перечислены в следующей таблице.

Символ	Стиль шрифта
B	Bold (Полужирный)
C	Condense (Уплотненный; только в FoxPro для Macintosh)
E	Extend (Расширенный; только в FoxPro для Macintosh)
I	Italic (Курсив)
N	Normal (Нормальный)
O	Outline (Контурный)
Q	Opaque (Непрозрачный)
S	Shadow (Затененный)
-	Strikeout (Перечеркнутый; только в Visual FoxPro)
T	Transparent (Прозрачный)
U	Underline (Подчеркнутый)

Можно указать сразу несколько символов, задав комбинацию стилей. Например, следующее предложение задает полужирный курсив (Bold Italic):

STYLE 'BI'

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

@ 2,2 GET gnChoice FUNCTION '*R' + ;
	'None;Single;Double' DEFAULT 'Single'
READ 

@ 2,2 GET gnChoice FUNCTION '*R None;Single;Double' ;
	DEFAULT 2
READ

SIZE nHeight, nWidth [, nSpacing]
Задает размер каждого переключателя и интервал между ними. Аргумент nHeight определяет высоту переключателя в строках.
В FoxPro для MS-DOS переключатель всегда имеет высоту в одну строку, поэтому числовое выражение nHeight игнорируется.
Аргумент nWidth задает ширину переключателя в столбцах. Если предложение SIZE опущено, ширина каждого отдельного переключателя по умолчанию определяется длиной его названия.
Промежуток между переключателями в строке определяется аргументом nSpacing. Если предложение SIZE опущено, между вертикальными переключателями строки не вставляются, а между горизонтальными вставляется один столбец.
В Visual FoxPro и FoxPro для Macintosh на размер переключателя также влияет его шрифт. Шрифт переключателя задается с помощью предложения FONT. Если это предложение опущено, в переключателях используется шрифт родительского окна (основного окна Visual FoxPro или пользовательского окна).
В следующем примере показано, как определять промежуток между переключателями с помощью предложения SIZE:

CLEAR
@ 2,2 GET gnChoice1 FUNCTION '*R'+ '\<None;\<Single;\<Double' ;
	DEFAULT 'None' SIZE 1, 12, 1
@ 2,16 GET gnChoice2 FUNCTION '*R'+ '\<None;\<Single;\<Double' ;
	DEFAULT 'None' SIZE 1, 12, 3
READ

ENABLE
Делает переключатель доступным. По умолчанию переключатель становится доступным при выдаче команды READ. Предложение ENABLE можно включать в программу для напоминания о том, что переключателем можно пользоваться.
DISABLE
Запрещает активизацию переключателя при выдаче команды READ. О том, как сделать недоступным отдельный переключатель, а не всю группу, см. выше раздел "Недоступные переключатели". Когда переключатель не активен, он изображается определенными для данного состояния цветами и пользователь не может его устанавливать. Чтобы сделать недоступный переключатель доступным, используйте команду SHOW GET ENABLE.
MESSAGE cMessageText
Создает сообщение, которое выдается при установке переключателя.
В Visual FoxPro и FoxPro для Macintosh сообщение выводится в строке состоян FoxPro. Местоположение сообщения можно изменить командой SET MESSAGE.
VALID lExpression1 | nExpression
Санкционирует пользовательский ввод. Когда пользователь устанавливает переключатель, вычисляется значение выражения VALID. Как правило, lExpression1 и nExpression представляют собой пользовательские функции. С помощью подобных функций можно выбирать другие элементы управления, делать их доступными или недоступными, открывать окно просмотра, открывать другие формы для ввода данных или переходить к новой записи. В качестве пользовательской функции можно задать команду CLEAR READ, которая прекращает операцию READ.
lExpression1
Когда в предложение VALID возвращается логическое значение, это значение игнорируется, а переключатели остаются активными элементами управления. Впрочем, можно задать пользовательскую функцию, которая возвращает в предложение VALID логическое значение и при этом активизирует другой элемент управления.
nExpression
Определяет, какой элемент активизируется после установки переключателя. Подробнее об элементах управления см. Элементы управления и объекты.
Числовое выражение определяет одну из следующих трех ситуаций.
Если nExpression = 0, установленный переключатель остается активным элементом управления.
Если значение nExpression положительно, оно задает количество элементов управления, на которое следует сдвинуться. Например, если выбран последний переключатель в группе переключателей и VALID возвращает 1, активизируется следующий элемент управления. Если значение nExpression больше числа оставшихся элементов управления, команда READ прекращается (если только не выдана команда READ CYCLE, активизирующая элементы управления).
Если значение nExpression отрицательно, оно задает количество элементов управления, на которое нужно вернуться. Например, если выбран первый переключатель в группе переключателей и VALID возвращает -1, активизируется предыдущий элемент управления. Если nExpression задает возвращение далее первого элемента управления, команда READ прекращается (если только не выдана команда READ CYCLE, активизирующая элементы управления).

WHEN lExpression2
Задает условие, в соответствии с которым переключатели можно устанавливать только в том случае, если значением выражения lExpression2 является "истина" (.T.). Если значением lExpression2 оказывается "ложь" (.F.), переключатель устанавливать нельзя, а если он расположен между другими элементами управления, он будет пропускаться.
COLOR SCHEME nSchemeNumber
Задает цвета переключателя. Если не задано предложение COLOR, цвета переключателя будут определяться цветовой схемой основного окна Visual FoxPro; если переключатели расположены в пользовательском окне, то их цвета определяются цветовой схемой этого окна.
COLOR ColorPairList
Задает цвета переключателей. В следующей таблице перечислены цветовые пары каждой цветовой схемы и контролируемые ими компоненты переключателя.

Номер цветовой пары	Атрибут переключателя
5			Сообщение
6			Название установленного переключателя 
7			Клавиши доступа
9			Название доступного переключателя
10			Название недоступного переключателя

В следующем примере показано, как заменить одну цветовую схему другой, заранее определенной:

STORE 1 TO gnChoice
@ 2,2 GET gnChoice FUNCTION '*R None;Single;Double';
	COLOR SCHEME 4
READ

В следующем примере создаются переключатели None, Single и Double с клавишами доступа N для None и S для Single. Помимо этого, переключатели обладают следующими цветовыми характеристиками в FoxPro для MS-DOS.
Установленный переключатель отображается с ярко-белым названием на синем фоне (W+/B).
Символы клавиш доступа изображаются красным цветом на синем фоне (R/B).
Доступным переключателям соответствуют желтые названия на синем фоне (GR+/B).
Недоступным переключателям соответствуют белые названия на синем фоне (W/B).
Если вы пропускаете какую-либо цветовую пару, нужно поставить соответствующую ей запятую.
Итак, команды имеют следующий вид:

STORE 1 TO gnChoice
@ 2,2 GET gnChoice FUNCTION '*R \<None;\<Single;\\Double';
	COLOR ,,,,,W+/B,R/B,,GR+/B,W/B
READ

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

Комментарии
В Visual FoxPro переключатель создается с помощью конструктора форм или DEFINE CLASS. Подробнее о совместимости с элементами управления предыдущих версий FoxPro 2.x см. Элементы управления и объекты.
Подробнее о добавлении элементов управления к форме см. главу 9 "Создание форм" Руководства разработчика и Добавление объекта в контейнерный класс.
Устанавливая переключатель, вы делаете выбранную опцию текущей и отменяете предыдущую опцию. Возле названия переключателя появляется маркер, указывающий на сделанный выбор.
Если вы создаете формы ввода данных с помощью конструктора форм, вы можете обойтись вообще без данной команды. Конструктор форм автоматически генерирует команды, создающие переключатели.
В Visual FoxPro и FoxPro для Macintosh для переключателя можно задать название или рисунок. См. описание предложений FUNCTION и PICTURE в разделе "Параметры".


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