Команда @ ... GET - списки

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

Синтаксис

@ nRow, nColumn 
GET MemVarName | FieldName 
FROM ArrayName [RANGE nStartElement [, nElements ]] 
| POPUP MenuName
	[FUNCTION cFormatCodes] | [PICTURE cFormatCodes]
	[NAME ObjectName]
	[FONT cFontName [, nFontSize]]
	[STYLE cFontStyle]
	[DEFAULT Expression]
	[SIZE nHeight, nWidth]
	[ENABLE | DISABLE]
	[MESSAGE cMessageText]
	[VALID lExpression1 | nExpression]
	[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
Задает переменную памяти или поле, где сохраняется число, представляющее сделанный пользователем выбор. Значение MemVarName или FieldName должно быть числового или символьного типа. Если значение MemVarName или FieldName числовое, сохраняется позиция выбранного элемента списка. Если значение MemVarName или FieldName символьное, сохраняется название выбранного элемента.
Начальный выбор элемента
Когда список активизируется, значение MemVarName или FieldName определяет, какой именно элемент списка должен быть выбран вначале (и следует ли вообще что-либо выбирать). Например, если значение MemVarName или FieldName равно 4, это означает, что при активизации списка по команде READ был выбран четвертый элемент списка.
Если значение MemVarName или FieldName не соответствует ни одной из опций списка (то есть оно меньше 1 или больше общего числа опций), то вначале никакие элементы не будут выбраны.
FROM ArrayName
Создает список на основе массива. Если массив одномерный, содержимое первого элемента массива становится первым элементом списка, содержимое второго элемента массива вторым элементом списка и т.д.
Если массив двумерный, список создается из элементов первого столбца массива. Первый элемент первого столбца становится первым элементом списка, второй элемент первого столбца вторым элементом списка и т.д.
RANGE nStartElement [, nElements]
Задает диапазон элементов списка, которые заполняются из массива, начиная с элемента nStartElement. Например, если массив одномерный и значение nStartElement равно 3, третий элемент массива становится первым элементом списка, четвертый элемент массива вторым элементом списка и т.д.
Номер позиции элемента в двумерном массиве вычисляется по строкам. Например, допустим, вы создали следующий массив размерностью 3х3:

a b c
d e f
g h i

Элементы a, b и c находятся в позициях с номерами 1, 2 и 3, элементы d, e и f ѕ в позициях 4, 5 и 6 и т.д. Если используется двумерный массив, в список включаются только элементы того столбца, которому принадлежит элемент массива nStartElement. Например, если номер nStartElement равен 2, элементами списка становятся элементы b, e и h. Если nStartElement равен 5, в список включается только содержимое элементов e и h.
Если задан начальный элемент nStartElement, нужно также указать число элементов в списке, используя аргумент nElements. Если опустить nElements, в список включается содержимое всех элементов массива, начиная с элемента nStartElement и кончая последним элементом столбца.
При выдаче команды SHOW GETS параметры предложения RANGE вычисляются заново. Если элемент nStartElement или число nElements изменились, список обновляется с учетом внесенных изменений.
Содержимое списка можно менять динамически. Вы можете вставлять и удалять элементы списка, модифицируя массив. Манипулировать массивом помогают функции ACOPY( ), ADEL( ), ADIR( ), AELEMENT( ), AFIELDS( ), AINS( ), ALEN( ), ASCAN( ), ASORT( ) и ASUBSCRIPT( ).
POPUP MenuName
Указывает, что список можно построить исходя из меню, созданного по команде DEFINE POPUP. Каждый элемент меню используется для создания одного элемента списка.
Чтобы создать список на основе меню, сначала создайте само меню с помощью команды DEFINE POPUP. В предложении POPUP MenuName нужно указать имя меню, созданного по команде DEFINE POPUP.
Вы можете создать меню (а следовательно, и список), содержащее записи из табличного поля (предложение PROMPT FIELDS), файлы, имеющиеся на диске (PROMPT FILES) или имена полей таблицы (PROMPT STRUCTURE).
В следующем примере демонстрируется создание списка на основе меню. С помощью команды DEFINE POPUP создается меню, содержащее имена файлов таблиц, имеющихся на диске. Имена таблиц становятся опциями списка. Предложение MARGIN включено для того, чтобы предусмотреть дополнительное место для символа маркировки. Элемент SCROLL помещает полосу прокрутки с правой стороны списка.

CLEAR
SET TALK OFF
STORE 1 TO gnChoice
DEFINE POPUP lstScrollOpts FROM 0, 0 PROMPT FILES LIKE *.DBF ;
	MARGIN SCROLL
@ 2,2 GET gnChoice POPUP lstScrollOpts SIZE 8, 20
READ		&& Activate the list box.

FUNCTION cFormatCodes | PICTURE cFormatCodes
Прекращает выполнение команды READ, когда пользователь выбирает элемент из списка. Нужно указать FUNCTION '&T' или PICTURE '@&T'.
Чтобы операция READ не прекращалась при выборе элемента списка, задайте FUNCTION '&N' или PICTURE '@&N'. Например:

... FUNCTION '&N'... 
... PICTURE '@&N'... 

Если предложение FUNCTION или PICTURE не задано, команда READ не будет прекращаться при выборе элемента.
В FoxPro для Macintosh можно создать двумерный и трехмерный список, указав после кода спецификации & значение 2 или 3. Если задать 2, будет создан плоский, двумерный список, аналогичный тем, что используются в диалоговых окнах системы Macintosh. Если задать 3, будет создан трехмерный список, аналогичный используемым в диалоговых окнах FoxPro для Macintosh. Двумерный список создается по умолчанию, если коды спецификации 2 и 3 опущены.
Следующее предложение создает в FoxPro для Macintosh трехмерный список, при выборе из которого команда READ не прекращается.

... FUNCTION '&N3'... 

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

FONT 'Courier', 16 

Если предложение FONT опущено, а список помещается в основное окно Visual FoxPro, используется шрифт этого окна. Если предложение FONT опущено, а список помещается в пользовательское окно, используется шрифт этого пользовательского окна.
Если вы задали предложение FONT, опустив размер шрифта nFontSize, используется 10-пунктовый шрифт.
В Visual FoxPro, если заданный шрифт отсутствует, его заменяет шрифт с похожими характеристиками.
В FoxPro для Macintosh, если заданный шрифт отсутствует, используется шрифт Chicago.
В FoxPro для MS-DOS предложение 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 определяет тип создаваемой переменной памяти и ее первоначальное значение. Это должно быть числовое или логическое выражение.
SIZE nHeight, nWidth
Задает высоту и ширину списка. Аргумент nHeight определяет высоту в строках, а nWidth ширину в столбцах. Если предложение SIZE опущено, ширина списка по умолчанию будет определяться шириной самого длинного элемента списка. Число элементов, отображаемых в списке, по умолчанию определяется количеством элементов в меню или массиве.
Если в списке больше элементов, чем можно отобразить за один раз, Visual FoxPro помещает справа от элементов списка полосу прокрутки.
В Visual FoxPro и FoxPro для Macintosh размер списка определяется его шрифтом. Шрифт списка задается предложением FONT. Если это предложение опущено, в списке используется шрифт его родительского окна (основного окна Visual FoxPro или окна, определенного пользователем).
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.
VALID lExpression1 | nExpression
Санкционирует пользовательский ввод. Когда пользователь выбирает элемент из списка, вычисляется значение выражения VALID.
Как правило, lExpression1 и nExpression представляют собой пользовательские функции. С помощью подобных функций можно выбирать другие элементы управления, делать их доступными или недоступными, открывать окно просмотра, открывать другие формы для ввода данных или переходить к новой записи. В качестве пользовательской функции можно задать команду CLEAR READ, которая прекращает операцию READ.
lExpression1
Когда в предложение VALID возвращается логическое значение, это значение игнорируется, а список продолжает оставаться текущим элементом управления. Впрочем, можно задать пользовательскую функцию, которая возвращает в предложение VALID логическое значение и при этом активизирует другой элемент управления.
nExpression
Предложение VALID с числовым выражением используется для задания элемента управления, который следует активизировать после выбора элемента из списка. Об элементах управления см. Элементы управления и объекты.
Числовое выражение nExpression определяет одну из следующих трех ситуаций.
Если nExpression = 0, список остается активным элементом управления.
Если значение nExpression положительно, оно указывает количество элементов управления, на которое следует сдвинуться. Например, если выбран список и VALID возвращает 1, активизируется следующий элемент управления. Если значение nExpression больше числа оставшихся элементов управления, команда READ прекращается (если только не выдана команда READ CYCLE, активизирующая элементы управления).
Если значение nExpression отрицательно, оно задает количество элементов управления, на которое нужно вернуться. Например, если вы находитесь в списке и VALID возвращает -1, активизируется предыдущий элемент управления. Если nExpression задает возврат далее первого элемента управления, команда READ прекращается (если только не выдана команда READ CYCLE, активизирующая элементы управления).
WHEN lExpression2
Разрешает или запрещает выбор списка в зависимости от логического значения выражения lExpression2. Если значение lExpression2 есть "истина" (.T.), список можно выбирать. Если значением lExpression2 оказывается "ложь" (.F.), список выбирать нельзя, а если он расположен между другими элементами управления, он будет пропускаться.
COLOR SCHEME nSchemeNumber
Задает цвета списка. Если не задано предложение COLOR, цвета списка будут определяться цветовой схемой основного окна Visual FoxPro; если список предназначен для пользовательского окна, то его цвета определяются цветовой схемой этого окна.
COLOR ColorPairList
Задает цвета для списка. В следующей таблице показано, какие элементы контролируются теми или иными цветовыми парами в FoxPro для MS-DOS.

Номер цветовой пары	Цветовой атрибут списка
1			Недоступный элемент
2			Доступный элемент
3			Обрамление и полоса прокрутки (1) 
5			Сообщение
6			Выбранный элемент списка
9			Доступный список
10			Недоступный список

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

ACTIVATE SCREEN
CLEAR
SET TALK OFF
STORE 1 TO gnChoice
DEFINE POPUP lstScrollOpts FROM 0,0 PROMPT FILES LIKE *.DBF ;
	MARGIN SCROLL COLOR SCHEME 4
@ 2,2 GET gnChoice POPUP lstScrollOpts SIZE 8, 20
READ		&& Activate the list box

В следующем примере используется созданный выше массив, при этом определяется список, обладающий следующими цветовыми характеристиками.
Выбранный элемент списка выделяется ярко-белым цветом на синем фоне (W+/B).
В доступном списке опции изображаются желтым цветом на синем фоне (GR+/B).
В недоступном списке опции изображаются белым цветом на синем фоне (W/B).
Если вы пропускаете какую-либо цветовую пару, нужно поставить соответствующую ей запятую.
Итак, команды должны быть такими:

CLEAR
SET TALK OFF
STORE 1 TO gnChoice
DEFINE POPUP lstScrollOpts FROM 0,0 PROMPT FILES LIKE *.DBF ;
	MARGIN SCROLL COLOR ,GR+/B,,,,W+/B,,,,W/B
@ 2,2 GET gnChoice POPUP lstScrollOpts SIZE 8, 20
READ		&& Activate the list box

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

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


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