Документация по Clarion

REPEAT (структура-посторение)


REPEAT(down,across)[,EVERY()][,INDEX()][,PRE()][,MAX()]
[POINT()]
fields to repeat
.

down Целочисленная константа, задающая число повторений сверху вниз. Если пропущено, подразумевается 1.
across Целочисленная константа, задающая число повторений слева направо. Если пропущено, подразумевается 1.
EVERY Число строк и столбцов между повторяющимися полями. По умолчанию - EVERY(1,1).
INDEX Индексная переменная для REPEAT-структуры.
PRE Префикс для меток в составе REPEAT-структуры.
MAX Переменная, получающая количество строк в REPEAT-структуре во время исполнения.
POINT Курсор-указатель, подсвечивающий отдельные элементы REPEAT-структуры.



REPEAT-структура может рассматриваться как "массив на экране". Каждое повторение структуры соответствует одному элементу массива. Общее число элементов - это произведение параметров down и across. Чаще всего в REPEAT-структуре используются поля типа STRING, для вывода прокручиваемой таблицы.
Кроме этого, в REPEAT-структуру можно помещать и ENTRY-поля. USE переменные ENTRY-полей, помещенных в REPEAT-структуру, должны иметь атрибут DIM, с размером большим или равным произведению параметров down и across. Каждая USE-переменная в REPEAT-структуре имеет свой атрибут DIM, она не может быть частью группы, имеющей атрибут DIM.
Номера повторяющимся полям назначаются в том порядке, в котором они появляются в SCREEN-структуре (так же, как и неповторяющимся полям). Не имеет значение, на каком элементе-повторении вы находитесь, поскольку номер поля будет один и тот же. Это означает, что EQUATE-метка REPEAT-структуры ссылается целиком на всю структуру, а не на отдельные ее элементы. Номер текущего элемента-повторения можно получить из переменной INDEX.
Повторяющиеся поля выводятся в позициях, определяемых их параметрами row и column, атрибутом EVERY и значением индексной перемен ной (REPEAT INDEX). При открытии экрана, выводится каждый элемент-повторение инициализированного поля. Первый элемент-повторение в REPEAT-структуре, выводится с позиции, задаваемой координатами самой структуры REPEAT.
Атрибут EVERY задает позиции последующих повторений, опираясь на число строк и столбцов, разделяющих отдельные элементы.
Когда поле-повторение получает данные, значение индексной переменной определяет, какой элемент массива USE-переменной получает введенное значение. Оператор ACCEPT автоматически увеличивает индексную переменную, по мере заполнения очередного элемента в REPEAT-структуре, если INDEX превысит максимальное значение, то для ввода выбирается следующее поле для экрана. Нажатие клавиши Esc (на НЕ-SAA/CUA экранах) или BACKTAB (для SAA/CUA экранов), уменьшает INDEX, заставляя выбрать предыдущий элемент-повторение. Если был выбран первый элемент, то ESC, BACKTAB, или СТРЕЛ КА ВВЕРХ выбирает для ввода следующее поле на экране.
Пример:
Следующая REPEAT-структура позволяет оператору обновлять массив
помесячных затрат:
LoadMonthArray PROCEDURE
Ndx BYTE !Индексная переменная
Amt DECIMAL(7,2),DIM(12) !Массив помесячных
!затрат
Month STRING('JanFebMarAprMayJunJulAugSepOctNovDec')
Mnth STRING(3),DIM(12),OVER(Month) !Этот массив наложен
!поверх массива Month
Screen SCREEN(16,22),AT(5,30),PRE(Scr),COLOR(7)
ROW(2,5) STRING('Помесячные затраты')
ROW(16,7) STRING('F10 - выход')
REPEAT(12),INDEX(Ndx)
ROW(3,5) POINT(1,16),USE(?Point),ESC(?-l),REQ
Month COL(5) STRING(3)
COL(12) ENTRY(@N_7.2),USE(Amt),INS
.. !Конец структур REPEAT и SCREEN
CODE
OPEN(Screen)
LOOP Ndx = 1 TO 12 !Заполняем месяцы
Scr:Month = Mnth[Ndx] ! на экране
.
LOOP
ALERT(2058) !Взводим клавишу F10
ACCEPT
IF KEYCODE() = 2058 !Если нажата F10
RETURN ! то выходим
. .
См. также:

Содержание раздела