PROMPT (строка подсказки для следующего поля)

             PROMPT(text)[,COLOR()][,TRN]

text Строковая константа или переменная, содержащая текст подсказки.
COLOR Задает цвета экрана для PROMPT
TRN Указывает, что в графическом режиме поле выводится только цветом переднего плана, оставляя фон как есть.

PROMPT задает текст, выводимый в связи со следующим за ним полем типа ENTRY, TEXT, LIST или OPTION. Текстовая строка PROMPT-а может содержать амперсанд (&), который означает, что следующий за амперсандом символ - "горячая" клавиша для вызова связанного поля. Одновременное нажатие Alt и "горячей клавиши" немедленно выбирает связанное поле типа ENTRY, TEXT, LIST или OPTION.

Пример:


    ROW(6,14) PROMPT('Как Вас зовут: ')

    ROW(6,30) ENTRY(@S20),USE(Name)

RADIO (поле радио-кнопка)

             RADIO(text)[,COLOR()][,TRN][,MSG()]

text Строковая константа или переменная, содержащая выводимую на экран строку.
COLOR Задает цвета экрана для этого поля.
TRN Указывает, что в графическом режиме поле выводится только цветом переднего плана, оставляя фон как есть.
MSG Текст, выводимый в строке сообщений экрана.

RADIO-кнопки - это элементы меню в структурах OPTION. Если иное не задано через LOADSYMBOLS или USESYMBOLS, text выводится в скобках. Если кнопка выбрана, то она представляет собой символ бубей (ASCII 4 = ). Только одна кнопка из структуры OPTION может быть выбрана в один момент времени.

Пример: ROW(10,6) OPTION,USE(TaxSelection)!Начало структуры радиокнопки ROW(11,9) RADIO('Pre-Tax'),MSG('Было до сбора налогов') ROW(12,9) RADIO('Post-Tax'),MSG('Стало после сбора налогов') . !конец структуры

См. также: LOADSYMBOLS, USESYMBOLS

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                            !  то выходим

       . .

См. также: POINT

STRING (экранная переменная - строка)


                       длина  

  [метка]      STRING (значен.)[,COLOR][,TRN][,MSG()]

                       формат 

метка Имя, которое позволяет обращаться к полю.
длина Числовая константа, задающая длину строки. В этом случае, строка изначально пуста.
значение Строковая константа или переменная, содержащая начальное значение строки. ДЛИНА строки становится равной длине ЗНАЧЕНИЯ.
формат Используется для форматирования ЗНАЧЕНИЯ строки. ДЛИНА, в таком случае, будет такой, чтобы вместить отформатированную строку. ЗНАЧЕНИЕ в этом случае - пусто.
COLOR Задает цвета экрана для этого поля.
TRN Указывает, что в графическом режиме поле выводится только цветом переднего плана, оставляя фон как есть. Таким образом, можно наложить строку на графический рисунок.
MSG Текст, выводимый на строке сообщений экрана, которая задается функцией SETMSG.

STRING выводится на экран в относительной позиции (ROW,COL) от верхнего левого угла экрана. STRING это единственный тип переменных, который можно описать в SCREEN-структурах.

К экранной строке с меткой, можно обратиться как и к любой другой переменной, пока открыт содержащий ее экран. Она занимает видеопамять и требует, также, обычной памяти и специальной обработки для выполнения любых математических операций. Скажем, для увеличения значения СТРОКИ, ее надо преобразовать в число, увеличить, преобразовать число обратно в строку и вновь записать получившуюся строку в видеопамять. Гораздо эффективней будет использовать числовые переменные для вычислений, и уже их значения присваивать экранным строкам.

Пример:


  Screen  SCREEN(3,30),PRE(Scr),CENTER

            ROW(1,1) STRING('<201,205{22},187>')  ! Рисуем

            ROW(2,1) STRING('<186,32{22},186>')   ! рамочку

            ROW(3,1) STRING('<200,2O5{22},188>')  !

  Msg       ROW(2,5) STRING(20)                   !Поле для сооб-

                                                  !щений

          .

TEXT (область для ввода текста)


             TEXT(строк,столбцов),USE()[,COLOR()][,TRN][,HLP()]

               [ESC()][,LFT][,REQ][,ЃINSЃ][,ЃCAPЃ][,ALRT()]

                                    ЃOVRЃ   ЃUPRЃ

               [,MSG()][,SKIP]

строк Целочисленная константа, задающая число строк в TEXT-поле.
столбец Целочисленная константа, задающая число столбцов в TEXT-поле.
USE Задает переменную, которая принимает введенное в TEXT-поле значение.
COLOR Задает цвета экрана для этого поля.
TRN Указывает, что в графическом режиме поле выводится только цветом переднего плана, оставляя фон как есть.
HLP Задает идентификатор окна помощи, связанного с этим полем.
ESC Поле, на которое перейти при нажатии клавиш ESC или BACKTAB.
LFT Разрешает перенос слов во вводимых данных.
REQ Поле не может быть пустым или нулевым.
INS/OVR Режим ввода - ВСТавка/ЗАМена.
UPR/CAP В каком режиме происходит ввод - ВСЕ БУКВЫ ЗАГЛАВНЫЕ или Первая Буква Каждого Слова.
ALRT ALERT-клавиши, активные для данного поля.
MSG Текст, выводимый в строке сообщений экрана.
SKIP Это поле нельзя выбрать для ввода данных.

TEXT-поле, это многорядное строковое поле с переносом слов, и вертикальной прокруткой, в SCREEN-структуре. Как и ENTRY-поле, TEXT-поле может отличаться по длин от своей USE-переменной. Длина TEXT-поля, это произведение параметров СТРОК и СТОЛБЦОВ. Если USE-переменая длиннее, чем TEXT-поле, то она делится на сегменты, длиной по СТОЛБЦОВ символов. Эти сегменты можно прокручивать вертикально в TEXT-поле так, что СТРОК сегментов USE-переменной одновременно видны в TEXT-поле в любой момент времени. Если же USE-переменная короче, чем TEXT-поле, то можно ввести не больше символов, чем длина USE-переменной.

Когда TEXT-поле выбрано, курсор помещается в первый столбец первой строки. Клавиша ENTER переводит курсор в первый столбец следующей строки. Таким образом, ENTER эквивалента нажатию клавиш СТРЕЛКА ВНИЗ и HOME. Нажав ENTER на последней строке TEXT-поля, можно вызвать прокрутку поля вверх на одну строку, до тех пор, пока еще есть доступные для прокрутки сегменты USE-переменной. Нажатие ENTER или СТРЕЛКИ ВНИЗ на последнем сегменте, вызывает завершение поля и обновление USE-переменной.

Атрибут ALRT или оператор ALERT можно использовать для назначения клавиши, которая завершает поле, не дожидаясь заполнения всех строк. ALERT-клавиши не обновляют USE-переменную, поэтому надо использовать оператор UPDATE.

Стрелки ВВЕРХ и ВНИЗ, клавиши PgUp, PgDn, Ctrl-PgUp и Ctrl-PgDn позволяют прокручивать USE-переменную в TEXT-поле. Стрелки ВВЕРХ и ВНИЗ прокручивают за раз на один сегмент вверх или вниз с первой или последней строки TEXT-поля. PgUp и PgDn прокручивают сразу СТРОК сегментов. Ctrl-PgUp и Ctrl-PgDn переходят к первому или последнему сегменту USE-переменной. Нажатие ВВЕРХ из первого сегмента, приводит к выбору предыдущего поля, нажатие ВНИЗ из последнего сегмента, вызывает обновление USE-переменной и выбор следующего поля.

Перенос слов разрешается атрибутом LFT. Перенос слов забивает хвост каждого сегмента пробелами так, чтобы слово попало целиком в следующий сегмент, если иначе оно попадает сразу в два сегмента. Таким образом, USE-переменные TEXT-полей становятся "чувствительными к ширине." Если чувствительная к ширине переменная использована в TEXT-поле переменной ширины, между словами появятся ненужные пробелы, и слова могут разбивать строки.

Пример:


       ROW(18,15) TEXT(4,60),USE(Act:Comments),HLP('Comments')

       ROW(20,10) TEXT(3,50),USE(Rec:Notes),LFT,ESC(?Rec:Phone)

       ROW(10,15) TEXT(10,60)USE(Emp:History),LFT

АТРИБУТЫ ПОЛЕЙ

ALRT (установить клавишу(и) завершения поля)

             ALRT(первый-код-клавиши[,последний-код-клавиши])

первый-код-клавиши Числовой код клавиши или EQUATE-метка кода клавиши. Он может быть началом диапазона кодов клавиш.
последний-код-клавиши Последний код клавиши или EQUATE-метка в диапазоне кодов клавиш.

Атрибут ALRT задает клавиши завершения поля для отдельного поля на экране. Он используется с полями типа ENTRY, TEXT, OPTION, PAUSE или POINT. Если поле завершается ALRT-клавишей, то его USE-переменная НЕ обновляется автоматически.

Атрибут ALRT разрешен и для оператора SCREEN. Клавиши, взведенные таким образом, активны для любого поля на экране.

Пример:


  Screen SCREEN(6,40).PRE(Scr),ALRT(F10Key)

                               !F10 взведена для всех полей

           ROW(2,5)  ENTRY(@S20),USE(Name),ALRT(F5Key)

                               !F5 взведена только для этого

                               !поля

           ROW(4,5)  TEXT(2,30),USE(Memo),ALRT(F7Key,F9Key)

                               !F7 - F9 взведены только для

                               !этого поля

        .

      CODE

      OPEN(Screen)               !Открываем экран для обработки

      LOOP                       ! и обрабатываем все поля

        ACCEPT                   !Ждем завершения поля

        IF KEYCODE() = F10Key    !Проверяем ALERT-клавишу экрана

          RETURN

        .

        CASE FIELD()

        OF ?Name                 !На ENTRY-поле

          IF KEYCODE() = F5Key   !Проверяем его ALERT-клавишу

            UPDATE               !  обновляем USE-переменную

            DO SomeRoutine       !  и что-то делаем

          .

        OF ?Comments             !На TEXT-поле

          CASE KEYCODE()         !Проверяем его ALERT-клавиши

          OF F7Key               !и обрабатываем каждую по-своему

            UPDATE

            DO SevenRoutine

          OF F8Key

            UPDATE

            DO EightRoutine

          OF F9Key

            UPDATE

            DO NineRoutine

      . . .                      !Конец case, case и loop

CAP (Первые буквы слов делать заглавными)

             CAP

Атрибут CAP задает автоматическую капитализацию для полей типа ENTRY и TEXT. Не важно, в каком регистре слова вводятся - каждый символ, следующий за пробелом, и первый символ первого слова будет переведен в верхний регистр, а остальные символы - в нижний.

Пример:


  Screen      SCREEN(6,40),PRE(Scr)

                ROW(2,5) ENTRY(@S20).USE(Name),CAP

                ROW(4,5) TEXT(2,30),USE(Comments),CAP

              .

См. также: ENTRY, TEXT

COLOR (задать цвета показа)


        COLOR(normal[,selected][,dim][,hot-normal][,hot-select])

normal Цвет для обычного вывода.
selected Цвет поля, когда оно выбрано.
dim Цвет поля, когда оно запрещено оператором DISABLE.
hot-normal Цвет "горячей" клавиши при обычном выводе.
hot-select Цвет "горячей" клавиши, когда поле активно.

Атрибут COLOR идентифицирует цвета, используемые в SCREEN-структуре, в любом поле SCREEN-структуры или в PULLDOWN-структуре. Каждый тип поля может использовать все или некоторые параметры, связанные с атрибутом COLOR. Ниже описаны параметры для каждого типа поля. (SPA. - вероятно рекомендуемые, а не обязательные)


Оператор              normal selected dim hot-normal hot-select

-----------           ------ -------- --- ---------- ----------

BUTTON                  x       x      x      x          x

CHECK                   x       x      x      x          x

ENTRY                   x       x      x

LIST                    x       x      x

OPTION                  x       x      x

OPTION STRING           x       x      x      x          x

PAINT                   x

PAUSE                   x

POINT                   x

PROMPT                  x       x      x      x          x

RADIO                   x       x      x      x          x

SCREEN                  x

STRING                  x

TEXT                    x       x      x

PULLDOWN                x       x      x      x          x

MENU                    x       x      x      x          x

Параметры атрибута COLOR, это числа, в диапазоне 0..255, которые задают номера элементов внутреннего массива Кодов Цветовых Стилей. Это 256-байтный массив, который хранит выбранные на данный момент Коды Цветовых Стилей. Каждый элемент инициализирован значением, равным его номеру (элемент 0 := 0, элемент 1 :=1 итд), до тех пор, пока иное не задано операторами SETSTYLES или GETSTYLES. Текущий цвет вывода есть Код Цветового Стиля, хранящийся в элементе массива.

Пример:


  Screen  SCREEN,COLOR(1)                     !Базовый цвет экрана

            ROW(4,2)  PROMPT('&State:'),COLOR(5,6,7,8,9)

            ROW(4,10) ENTRY(@S2),USE(State),COLOR(5,6,7)

          .

См. также: SETSTYLES, GETSTYLES, STYLES, Коды Цветовых Стилей

COLS (задает столбцы в LIST-структуре)

             COLS(string,variable[,spaces])

string Строковая константа или переменная, содержащая ASCII-значения, задающие число символов для подсветки в каждом столбце. Каждый символ этой строки задает ширину одного столбца в LIST. Общее число символов в строке зависит от числа столбцов в LIST-структуре.
variable Имя целочисленной переменной, которая получает номер текущего подсвеченного столбца, когда LIST завершается оператором ACCEPT.
spaces Целочисленная константа, задающая число пробелов между столбцами на экране.

Атрибут COLS задает вывод элементов очереди в листбоксе подобно электронной таблице. Курсор подсвечивает только один столбец за раз. Строка, описывает число символов в каждом столбце, которые должен подсвечивать курсор. Параметр SPACES задает количество пробелов, автоматически вставляемых между выводимыми столбцами.

Когда ACCEPT завершает LISTбокс, VARIABLE получает номер подсвеченного столбца. Если VARIABLE уже содержит какое-то значение при активизации листбокса, то сращу же активизируется столбец, номер которого хранится в VARIABLE.

Если вместе с атрибутом COLS, к листбоксу применяется еще и атрибут FIX, то появляется возможность ввести заголовки столбцов в листбоксе. Эти заголовки не будут прокручиваться, и не могут быть выбраны.

Пример:


   ListOue  QUEUE,PRE(Lst)              !Очередь номеров деталей

   PartNoA    STRING(10)                !  отформатированная для

   PartNoB    STRING(10)                !  вывода в две колонки

            .



   Screen   SCREEN(20,30),PRE(Scr)

              ROW(3,45) ENTRY(@s10),USE(Trn:PartNo),SKIP

              ROW(4,45) LIST(10,20),FROM(Lst:PartNo), |

                    USE(?PartList),COLS('<10,10>',Column#,1)

            .



            CODE                  !Строим очередь для листбокса

     SET(PartsFile)

     LOOP

       NEXT(PartsFile)

       Lst:PartNoA = Par:PartNo

       IF EOF(PartsFile) THEN BREAK.

       NEXT(PartsFile)

       Lst:PartNoB = Par:PartNo

       IF EOF(PartsFile) THEN BREAK.

       ADD(ListQue)

         IF ERRORCODE() THEN STOP(ERROR()).

       CLEAR(ListQue)

     .

     ADD(ListQue)

       IF ERRORCODE() THEN STOP(ERROR()).

     OPEN(Screen)                       !Затем откроем экран

     ACCEPT                             !  и позволим сделать выбор

     GET(ListQue,CHOICE())              !Получаем выбранный элемент

     EXECUTE Column#

       Trn:PartNo = Lst:PartNoA         !Выбрано из первого столца?

       Trn:PartNo = Lst:PartNOB         !А может быть из второго?

     .

См. также: LIST, FIX

ESC (куда перейти при нажатии ESC)

             ESC(field)

field Целое число, EQUATE-метка поля или же выражение, задающее выбираемое поле.

Атрибут ESC для полей типа ENTRY, TEXT, OPTION, PAUSE и POINT устанавливает поле, которое надо выбрать при нажатии Esc (НЕ-CUA экраны) или BACKTAB (CUA экраны). Обычно, нажатие ESC или BACKTAB приводит к выбору предыдущего поля в той последовательности, в которой поля выбирались. Атрибут ESC перекрывает нормальную последовательность.

Пример:


   Screen  SCREEN,COLOR(1)

             ROW(3,10) ENTRY(@S15),USE(Name)       !Поле 1

             ROW(4,10) ENTRY(@S20),USE(Address)

             ROW(5,10) ENTRY(@S12),USE(City)

             ROW(5,24) ENTRY(@S2),USE(State).ESC(?Name)

                                                !по ESC - на поле 1

          ROW(5,28) ENTRY(@NO5),USE(Zip),ESC(1) !по ESC - на поле 1

             ROW(6,10) ENTRY(@P(###)###-####P),USE(Phone),ESC(?-5)

           .                                    !по ESC - на поле 1

См. также: ENTRY, TEXT, MENU, PAUSE, POINT

EVERY (установить промежуток для REPEAT)

             EVERY(строк,столбцов)

строк Целочисленная константа, которая указывает, на сколько строк ниже будут выводиться следующие поля в REPEAT-структуре.
столбцов Целочисленная константа, которая указывает, на сколько столбцов правее будут выводиться следующие поля в REPEAT-структуре.

EVERY задает числа СТРОК и СТОЛБЦОВ, разделяющих отдельные элементы в REPEAT-структуре. Например, EVERY(2,20) размещает элементы-повторения в каждой второй строе, через 20 столбцов. Если параметр пропущен, подразумевается единица. Если в описании структуры REPEAT вообще пропущен атрибут EVERY, то подразумевается EVERY(1,1).

Пример:


   Screen SCREEN,PRE(Scr)

            REPEAT(12,3),EVERY(1,20),INDEX(Ndx)!12x3,20 cols apart

              ROW(2,5) ENTRY(@N-7.2),USE(Amt)!36 elements on screen

          .

FILL (переменная, получающая значение из листбокса)

             FILL(field)

field EQUATE-метка поля, идентифицирующая экранное поле, которое будет принимать значение.

Атрибут FILL задает поле экрана, в которое будет передано значение, которое выбрано из листбокса.

Пример:


   PartOue  QUEUE,PRE(Que)

   RecPtr     LONG

   PartNo     STRING(10)

            .

   Screen SCREEN.PRE(Scr)

            ROW(2,5) ENTRY(@N_7.2),USE(Fil:PartNo),SKIP

            ROW(3,5) LIST(10,10),FROM(Que:PartNo),FILL(?Fil:PartNo)

          .                 !Fil:PartNo получает выбранное значение

См. также: LIST

FROM (очередь для просмотра через LIST)

             FROM(field)

field Метка очереди (QUEUE) или поля очереди. Может быть типа GROUP.

Атрибут LIST-структуры FROM, задает поле, которое надо вывести в листбоксе.

Пример:


   PartOue  QUEUE,PRE(Que)

   RecPtr     LONG

   PartNo     STRING(10)         !Это поле выводим на экран

            .

   Screen SCREEN,PRE(Scr)

            ROW(2,5) ENTRY(@N_7.2),USE(Fil:PartNo),SKIP

            ROW(3,5) LIST(10,10),FROM(Oue:PartNo),FILL(?Fil:PartNo)

                                 !Показываем список из Que:PartNo

          .

См. также: LIST

FIX (заголовки листбокса)

             FIX(number)

number Целочисленная константа, которая задает число фиксированных строк.

Атрибут LIST-структуры FIX, задает число элементов очереди, которые содержат "статичную" информацию. Эти элементы выводятся в верхней части листбокса. Они не подлежат прокрутке, и не могут быть выбраны. Эти элементы используются для вывода заголовков в листбоксе, позволяя задать заголовок для каждого столбца, если LIST описан с атрибутом COLS.

Пример:


   ListOue QUEUE,PRE(Lst)         !Очередь номеров запчастей

   PartNoA   STRING(10)           !  отформатированная для вывода

   PartNoB   STRING(10)           !  на экран в две колонки

           .

   Screen  SCREEN(20,30),PRE(Scr)

             ROW(3,45) ENTRY(@s10),USE(Trn:PartNo).SKIP

             ROW(4,45) LIST(10,20),FROM(Lst:PartNo), Ѓ

                 USE(?PartList),COLS('<10,10>',Column#,1),FIX(2)

           .

           CODE

    Lst:PartNoA = 'Part A'       !Создаем заголовки столбцов

     Lst:PartNoB = 'Part B'

     ADD(ListQue)                 !  и добавляем их к очереди

       IF ERRORCODE() THEN STOP(ERROR()).

     ListOue = ALL('-')           !Создаем разделители столбцов

     ADD(ListOue)                 !  и добавляем их в очередь

       IF ERRORCODE() THEN STOP(ERROR()).

     SET(PartsFile)               !Строим очередь для листбокса

     LOOP

       NEXT(PartsFile)

       Lst:PartNoA = Par:PartNo

       IF EOF(PartsFile) THEN BREAK.

       NEXT(PartsFile)

       Lst:PartNoB = Par:PartNo

       IF EOF(PartsFile) THEN BREAK.

       ADD(ListOue)

         IF ERRORCODE() THEN STOP(ERROR()).

      CLEAR(ListQue)

    .

     ADD(ListQue)

       IF ERRORCODE() THEN STOP(ERROR()).

     OPEN(Screen)                 !Открываем экран

     ACCEPT                       !  и доверяем выбор пользователю

     GET(ListOue,CHOICE())        !Берем выбранный элемент очереди

     EXECUTE Column#

       Trn:PartNo = Lst:PartNoA   !Выбрано из первого столбца?

       Trn:PartNo = Lst:PartNoB   !Выбрано из второго столбца?

     .

См. также: LIST, COLS

HIDE (скрыть содержимое поля)

             HIDE

ENTRY-поле с атрибутом HIDE не показывает данные на экране. По мере ввода символов в поле, они (только на экране) заменяются звездочками. Обычно это используется для полей для ввода паролей

Атрибут HIDE можно использовать с листбоксами. В этом случае, по давляется полоса подсветки (курсор) когда листбокс не активен.

HLP (идентификатор окна помощи для данного поля)

             HLP(window)

window Строковая константа или переменная (до 20 символов), которая задает идентификатор окна подсказки из HELP-файла программы.

Атрибут HLP для полей типа ENTRY, TEXT, CHECK, LIST, BUTTON, OPTION, PAUSE или POINT задает окно подсказки для этого поля. Атрибут HLP в описании SCREEN, действует для всех полей экрана, у которых этот атрибут не задан.

Активное (выбранное) окно подсказки вызывается по клавише F1 во время ожидания ввода операторами ASK или ACCEPT, либо выполнением оператора HELP без параметров. HELP-файл должен быть открыт перед вызовом окна.

См. также: ENTRY, TEXT, CHECK, LIST, BUTTON, OPTION, PAUSE, POINT, SCREEN, HELP

HSCROLL, VSCROLL, HVSCROLL (линейки прокрутки для LIST)


             HSCROLL

             VSCROLL

             HVSCROLL

Параметры HSCROLL, VSCROLL и HVSCROLL помещают в листбокс линейки прокрутки. HSCROLL - горизонтальную вниз листбокса, VSCROLL вертикальную справа, а HVSCROLL - обе. Линейки прокрутки занимают одну строку или один столбец из LIST(строк,столбцов).

Вертикальные линейки прокрутки позволяют прокручивать список мышью вверх и вниз, а горизонтальные - панорамировать его мышью влево/вправо.

IMM (немедленное исполнение)

             IMM

Поля ENTRY или TEXT с атрибутом IMM считаются завершенными, как только они полностью забиты данными, без нажатия ENTER или TAB. Структура OPTION с атрибутом IMM, завершается, как только нажат первый непустой символ, содержащийся в элементах меню, или нажата "Горячая" клавиша, задаваемая амперсандом в строке. Поля типа LIST или POINT с атрибутом IMM, считаются завершенными при каждом перемещении курсора по списку или REPEAT-структуре. При этом программа получает управление при каждом нажатии клавиш ВВЕРХ или ВНИЗ.

IMAGE-поля с атрибутом IMM, выводятся немедленно, позволяя любым строковым литералам, идущим за ними в описании SCREEN-структуры, перекрывать область рисунка. BUTTON с атрибутом IMM, завершается при нажатии ЛЕВОЙ кнопки мыши. Таким образом, можно непрерывно выполнять связанный с кнопкой код до тех пор, пока кнопка мыши не будет отпущена.

См. также: ENTRY, TEXT, OPTION, LIST, POINT, BUTTON, IMAGE

INDEX (индексная переменная для REPEAT)

             INDEX(varible)

variable Метка численной переменной.

Атрибут INDEX называет переменную, которая как и индекс массива, задает активный в данный момент элемент REPEAT-структуры. Значение 1 активизирует первый элемент, а значение равное произведению параметров структуры REPEAT (down и across) активизирует последний элемент.

Если индексная переменная выходит за допустимые для НЕЕ пределы, то она сбрасывается в единицу. REPEAT INDEX проходит по строкам и по столбцам - сначала сверху вниз, а потом слева направо.

См. также: REPEAT

INS (ввод - в режиме вставки)

             INS

Атрибут INS можно использовать с полями типа ENTRY и TEXT для включения ввода в режиме вставки. Символа, введенные в режиме вставки, сдвигают введенные перед ними символы вправо. Цифры толкают другие цифры влево от десятичной точки. Для выключения режима вставки можно воспользоваться клавишей INS.

См. также: ENTRY, TEXT

LFT (выравнивание влево)

             LFT

Этот атрибут используется с ENTRY-полями для выравнивания строковых данных влево. При обновлении USE-переменной, из строки удаляются ведущие пробелы.

Использование этого атрибута с TEXT-полями, позволяет перенос строк при редактировании.

См. также: ENTRY, TEXT

MAX (переменная-счетчик столбцов в REPEAT)

             MAX(varible)

variable Метка численной переменной.

Атрибут MAX называет переменную, которая получает, во время работы программы, число столбцов экрана, занятых REPEAT-структурой. MAX, совместно с атрибутом EXPAND, позволяет использовать экраны с REPEAT-структурами, разработанные для режима 25 строк, в режимах 43/50 итд. строк. MAX-переменная позволяет вам во время исполнения определить, сколько элементов содержит REPEAT-структура. То есть появляется возможность писать некий обобщенный код для заполнения REPEAT-массива.

Пример:


   Rows  BYTE                                !Столбцов в REPEAT

   Ndx   BYTE                                !Индекс повторения

   Amt   DECIMAL(7,2),DIM(100)               !Массив выплат

 

   Screen SCREEN(25,80),PRE(Scr),COLOR(7),EXPAND(4)

            REPEAT(12),INDEX(Ndx),MAX(Rows)  !Переменная Rows

                                             !получаю число строк

              ROW(3,5) POINT(1,16),USE(?Point)

   Amnt       ROW(3,12) STRING(@N_7.2)

          . .

         CODE

       OPEN(Screen)

       LOOP Ndx = 1 TO Rows                  !Заполняем экран вы-

         Scr:Amnt = Amt[Ndxl                 !  платами

       .

См. также: EXPAND, REPEAT

MSG (вывод сообщения на экран)

             MSG(text)

text Строковая константа или переменная, содержащая строку для вывода.

Этот атрибут можно использовать с полями типа ENTRY,CHECK,RADIO, STRING, TEXT, LIST, BUTTON и OPTION STRING. MSG выводит текстовую строку в Область Сообщений Экрана, задаваемую SETMSG. Если эта область не была задана SETMSG, то по умолчанию ей становится нижняя строка экран, начиная с 1 столбца и длиной 80 символов.

См. также: SETMSG

NAME (файл с графикой для показа)

             NAME(filename)

filename Строковая константа или переменная, содержащая спецификацию (путь+имя) .PCX или .GIF файла.

Атрибут NAME поля IMAGE, задает имя файла с PCX или GIF рисунком который надо показать.

Пример:


   Screen   SCREEN(20,30),PRE(Scr),GRAPHIC

              ROW(3,5) IMAGE(14,20),NAME('picture.pcx')

            .

См. также: IMAGE

OVR (ввод - в режиме замены)

             OVR

Этот атрибут используется с полями ENTRY и TEXT. Он переключает клавиатуру в режим замены. Во время ввода можно отменить его действие, нажав клавишу INS.

См. также: ENTRY, TEXT

REQ (поле не может быть нулевым или пустым)

             REQ

Атрибут REQ означает, что поля ENTRY, TEXT, OPTION, или POINT требуют ввода в них. ТРЕБУЮЩИЕ строку поля ENTRY или TEXT не могут быть заполнены пробелами, а ТРЕБУЮЩЕЕ поле ENTRY не может быть нулем.

ТРЕБУЮЩИЕ поля типа OPTION или POINT, заставляют курсор "вернуть ся на верх или в низ структуры (что зависит от направления движения курсора). Требующие поля типа OPTION и POINT заставляют делать выбор, чтобы завершить это поле.

Поля типа BUTTON с атрибутом REQ, автоматически проверяют все остальные поля с этим же атрибутом на текущем экране, чтобы убедиться, что те поля не нулевые и не пустые. Это происходит и на не-CUA и на CUA экранах. Это позволяет пользователю перемещаться между полями с помощью мышки, оставаясь уверенным, что все ТРЕБУ ЮЩИЕ поля содержат правильные данные по завершении экрана.

На не-CUA экранах, попытка завершить ТРЕБУЮЩЕЕ поле с нулем или пробелом, вызывает звуковой сигнал и мигание этого поля. Исправить положение можно нажатием ESC или вводом корректного значения. На CUA экранах, поля с атрибутом REQ не проверяют своих данных пока не нажата "кнопка" с атрибутом REQ.

См. также: BUTTON, ENTRY, TEXT, OPTION, REPEAT, REUSE

REUSE (использовать ранее установленную палитру)

             REUSE

Атрибут REUSE для IMAGE-полей указывает, что PCX или GIF-образ будет выведен на экран в палитре, установленной другим рисунком, который уже на экране. Если на экране нет других рисунков, то ис пользуется стандартная палитра вышего адаптера. Если же этот атрибут вовсе не задан, то используется собственная палитра рисунка, а выведенные ранее образы перекрашиваются.

Это атрибут нужен только для SVGA режима в 256 цветов. В 16-цвет ных VGA и EGA режимах используется только стандартная палитра выидеоадаптера.

Пример:


   Screen  SCREEN(20,30),PRE(Scr),GRAPHIC

             ROW(3,5) IMAGE(14,20),NAME('picture.pcx'),REUSE

          .

См. также: IMAGE

SKIP (пропустить это поле)

             SKIP

Атрибут SKIP используется с полями ENTRY, TEXT, STRING OPTION и LIST. Поле с атрибутом SKIP не может редактироваться человеком или активизироваться оператором SELECT. SKIP создает экранные поля "только для просмотра". Его USE-переменная выводится на экран оператором DISPLAY.

Пример:


   Screen SCREEN(20,60),PRE(Scr)

            ROW(6,14) ENTRY(@S24),USE(Name),SKIP!Только для показа

            ROW(15,10) TEXT(3,50),USE(Rec:Notes),SKIP

                                                !и текст тоже

           ROW(19,5) PAUSE('Press any key to continue')

          .                      !Весь экран - только для просмотра

См. также: ENTRY, TEXT, OPTION, LIST

TRN (прозрачное изображение)

             TRN

Атрибут TRN разрешен только для операторов PAINT или SCREEN в текстовом режиме. Это позволяет закрытому экраном изображению проглядывать через текущий экран, делая этот экран или закрашенный прямоугольник прозрачными. (С.П.А. - Ну и фразочка!)

В графическом режиме, любое экранное поле с атрибутом TRN выводится только цветом переднего плана, оставляя фон как есть. Таким образом, можно делать надписи НА рисунках, сквозь которые будет виден рисунок.

См. также: PAINT

UPR (ввод преобразовывать в верхний регистр)

             UPR

Атрибут UPR используется с полями ENTRY и TEXT для преобразования всех введенных БУКВ в заглавные.

См. также: ENTRY, TEXT

USE (связать с полем переменную или метку)


             USE( variable )

                   label  

variable Метка переменной, принимающей введенные данные.
метка EQUATE-метка поля или меню.

USE с параметром-переменной поддерживает поля ENTRY, TEXT,CHECK, и RADIO (или STRING) OPTION переменной, которая обновляется при вводе данных. Когда поле завершено (завершен ввод данных в поле) эта переменная получает введенное значение.

Для IMAGE-полей, USE(variable) задает переменную, которая содержит PCX или GIF-образ для вывода. Обычно, такая переменная - это MEMO-поле с атрибутом BINARY.

USE(label) предлагает способ обращения к полю операторами программы.Параметр label может быть использован для полей RADIO или STRING OPTION, CHECK, TEXT и ENTRY. Метка должна использоваться для полей POINT, PAUSE и BUTTON в SCREEN-структурах, и для полей MENU и ITEM в структурах PULLDOWN.

Пример:


    ROW(l,l)   ENTRY.USE(?FirstField)

    ROW(6,14)  ENTRY(@S24),USE(Name)

    ROW(8,16)  TEXT(2,20),USE(comments)

    ROW(10,8)  CHECK('Check String'),USE(CheckVar)

    ROW(12,20) PAUSE('Press any key to continue'),USE(?Pause)

См. также: ENTRY, TEXT, CHECK, OPTION, PAUSE, POINT, BUTTON, EQUATE-метки полей

СТРУКТУРЫ PULLDOWN (выпадающие меню)

PULLDOWN (структура "выпадающее меню")


   метка    PULDOWN[,COLOR()][,KEY()][,SINGLE()][,SHADOW][,LOCAL]

                                       DOUBLE()

                                        FULL() 

                                        HALF() 

            [MENU()

               [INTEM()]

               [MENU()

                  [INTEM()]

               .]

            .]

         .

COLOR Задает цвета вывода.
KEY "Горячая" клавиша для PULLDOWN-структуры.
SINGLE,DOUBLE,FULL,HALF Тип рамки для выпадающих меню.
SHADOW Если есть, то нужны тени под выпадающими меню
LOCAL Указывает, как открывать PULLDOWN - на первой строке физического или виртуального экрана (оставляя экран в том же самом положении)
MENU Подменю с отдельным выпадающим окошком.
ITEM Элемент меню.

PULLDOWN описывает SAA/CUA-подобную структуры выпадающего меню. PULLDOWN-структуры задают несколько возможностей выбора из меню, которые можно активизировать при исполнении оператора ACCEPT.

Все MENU и ITEM в структуре PULLDOWN нумеруются отрицательными числами в порядке, в котором они появляются в этой структуре, начиная с минус единицы (-1). Когда выбор сделан, функция FIELD возвращает номер выбранного элемента (ITEM).

В PULLDOWN-структурах есть два вида "горячих" клавиш. Первый тип служит для перемещения по элементам меню, его "горячие" клавиши задаются вставкой амперсанда прямо перед нужным символом в строке для MENU или ITEM, при этом, при работе такой символ выделен. Если же в строке нет амперсанда, то подсвечивается первый НЕпустой символ строки. Такие "горячие" клавиши используются вместе с клавишей ALT для вызова полосы выпадающего меню, если оно не видно на экране в данный момент (разумеется, меню уже должно быть открыто оператором OPEN) и/или выбора конкретного подменю (MENU) или элемента меню (ITEM).

Второй тип горячих клавиш, это клавиши, задаваемые атрибутом KEY для элементов MENU или ITEM. Они могут быть любыми разрешенными кодами клавиш (в т.ч. и EQUATE) и вызывают немедленное выполнение связанного с ними MENU или ITEM. Если атрибут KEY был задан для MENU или ITEM, то заданный им код клавиши будет всегда возвращаться функцией KEYCODE() при завершении MENU или ITEM, независимо от того, какой клавишей был завершен этот элемент.

Пример:


   PullDown  PULLDOWN                 !Полоса выпадающего меню

               MENU('File'),USE(?File)!Описываем подменю

                 ITEM('Open'),USE(?FileOpen)

                                      ! элементы подменю

                 ITEM('Close'),USE(?FileClose)

                 ITEM('Save'),USE(?FileSave)

               .

               MENU('Options'),USE(?Options)

                 ITEM('43/50 Line Mode'),USE(?OptLine)

                 ITEM('Colors'),USE(?OptColor)

               .

               MENU('Quit'),USE(?Quit),KEY(CtrlQ).

   !Этот элемент выполняется без подменю, прямо из полосы PULLDOWN

            .

SINGLE, DOUBLE, FULL, HALF (виды рамок для меню)


             SINGLE(color)

             DOUBLE(color)

             FULL(color)

             HALF(color)

color Код цветового стиля для символов рамки.

Эти атрибуты задают, какой тип символов рамок будет использоваться для всех подменю в PULLDOWN-структуре. Для отдельного PULLDOWN-меню может быть задан только один из этих типов рамки.


     SINGLE  одинарные линии

     DOUBLE  двойные линии

     FULL    блоки полной высоты

     HALF    блоки полной высоты слева и справа, блоки  половин-

             ной высоты снизу и сверху.

Пример:


     PullDown PULLDOWN,SINGLE(5)        !Рамка из одинарных линий

              .

См. также: Коды Цветовых Стилей

LOCAL (позиция, в которой открывается PULLDOWN)

             LOCAL

Атрибут LOCAL указывает, что PULLDOWN-структура открывается на первой строке физического экрана. Если он пропущен, то PULLDOWN открывается на первой строке последнего открытого экрана, если это был виртуальный экран.

Первые строки физического и виртуального экранов различаются только тем, что первая строка физического экрана всегда остается на своем месте, в то время, как первая строка виртуального экрана может быть прокручена за пределы экрана физического. В этом случае, она возвращается на место при обращении к PULLDOWN если PULLDOWN-меню описано БЕЗ атрибута LOCAL.

Пример:


   PuIlDown  PULLDOWN,LOCAL  !Открывать на первой строке ТЕКУЩЕГО

                             !экрана

См. также: PULLDOWN

Поля в PULLDOWN

ITEM (элемент выпадающего меню)


             ITEM(текст)[,KEY()][,USE()][,TOGGLE]

текст Строковая константа, задающая выводимую на экран строку, связанную с ITEM.
KEY Задает код клавиши или одиночный символ, который немедленно выполняет этот элемент.
USE EQUATE-метка меню.
TOGGLE Этот элемент типа ВКЛ/ВЫКЛ.

ITEM описывает выбор из меню в структуре PULLDOWN. Текстовая строка может содержать амперсанд, который означает, что следующий за ним символ - "горячая" клавиша для этого поля. Нажатие такой клавиши БЕЗ ALT подсвечивает и исполняет данный элемент. Если в ТЕКСТе нет амперсанда, то в роли такой "горячей" клавиши выступает первый непустой символ ТЕКСТа.

Атрибут KEY назначает отдельную "горячую" клавишу для поля. Это может быть любой допустимый код клавиши, он также вызовет немедленное выполнение элемента, независимо от того,показано PULLDOWN на экране или нет. Если атрибут KEY задан для ITEM, то заданный им код клавиши будет всегда возвращаться функцией KEYCODE(), независимо от того, какая клавиша завершила этот элемент.

Полоска курсора подсвечивает отдельные ITEM-ы :) в структуре MENU. Каждый ITEM может быть связан с PROCEDURE, или неким кодом, который надо выполнить при выборе этого элемента.

Пример:


    Pul]Down PULLDOWN

               MENU

                 ITEM('&GL'),USE(?GL),KEY(AltG)     !Hot key - Alt-G

                 ITEM('A&R'),USE(?AR),KEY(AltR)     !Hot key - Alt-R

                 ITEM('A&P'),USE(?AP),KEY(A]tP)     !Hot key - Alt-P

             . .

MENU (подменю в выпадающем меню)


             MENU(текст)[,KEY()][,USE()][,COLOR()][,RIGHT()]

               [ITEM()]

               [MENU()]

                   multiple other ITEM and/or MENU statements

             .

текст Строковая константа, задающая выводимую на экран строку, связанную с MENU.
KEY Задает код клавиши или одиночный символ, который немедленно выполняет этот элемент.
USE EQUATE-метка меню.
COLOR Цвета экрана для выборов в этом подменю.
RIGHT Указывает, что MENU появится на правом краю полосы меню на первой строке экрана.

MENU описывает выпадающее подменю в структуре PULLDOWN. Когда MENU выбрано, операторы MENU и/или ITEM в структуре MENU выводятся в отдельном окошке (дропбоксе). MENU не обязано содержать в себе другие операторы MENU или ITEM. Текстовая строка может содержать амперсанд, который означает, что следующий за ним символ - "горячая" клавиша для этого поля. Если MENU находится на полосе PULLDOWN, нажатие Alt вместе "горячей" клавишей подсвечивает и выполняет MENU. Если меню находится в другом MENU, то его выполнит нажатие "горячей" клавиши без ALT. Если в ТЕКСТе нет амперсанда, то в качестве "горячей" клавиши выступает первый непустой символ ТЕКСТа. Атрибут KEY назначает для этого подменю добавочную "горячую" клавишу. Это может быть любой допустимый код клавиши, он также вызовет немедленное выполнение элемента, независимо от того, показано PULLDOWN на экране или нет. Если атрибут KEY задан для MENU, то заданный им код клавиши будет всегда возвращаться функцией KEYCODE(), независимо от того, какая клавиша завершила этот элемент.

Дропбокс для MENU появляется прямо под ТЕКСТом в полосе PULLDOWN. Если выбрать клавишами ENTER или СТРЕЛКА ВЛЕВО вложенные в это подменю другие подменю, то они будут появляться справа от текущего подменю. СТРЕЛКА ВЛЕВО возвращает в предыдущий дропбокс.

Пример:


   PuIlDown PULLDOWN                 !Полоса PULLDOWN

              MENU('File'),USE(?File)!Выпадающее подменю

                ITEM('Open'),USE(?FileOpen)

                                !  этот элемент находится в подменю

                ITEM('Close'),USE(?Fi]eClose)

                MENU('Tools'),USE(?Fi]eTools) !Еще одно подменю

                  ITEM('Rebuild Keys'),USE(?FileTooIsRebuild)

              . .                    !Конец обоих меню

              MENU('Quit'),USE(?Quit)

                       !Этот элемент выполняется из полосы PULLDOWN

            . .

Атрибуты полей в PULLDOWN

KEY (клавиша быстрого выбора)


             KEY( character )

                   keycode 

character Задает символ для выбора данного пункта меню или SCREEN BUTTON. Этот параметр не чувствителен к регистру букв.
keycode Кларионовский код клавиши или EQUATE-метка кода клавиши.

Атрибут KEY для элементов структуры PULLDOWN MENU, ITEM, SCREEN IMAGE или SCREEN BUTTON задает "горячую" клавишу для выбора и выполнения данного поля. Такая "горячая" клавиша отличается от той, которая задается амперсандом тем, как она связана с полями MENU, ITEM или BUTTON. "Амперсандовые" "горячие" клавиши используются для ПЕРЕХОДА на поля типа MENU или ITEM. "Горячие" клавиши атрибута KEY используются дл НЕМЕДЛЕННОГО выполнения связанного с полем кода.

Если у какого-то поля есть атрибут KEY, то по завершении этого поля, функция KEYCODE() ВСЕГДА вернет код клавиши, заданный этим атрибутом, независимо от того, какая клавиша использовалась на самом деле.

Пример:


   PuIlDown PULLDOWN

              MENU('Options'),USE(?Options)

                ITEM('43/50 Line Mode'),USE(?OptLine)

                ITEM('Colors'),USE(?OptColor)

              .

              MENU('Quit'),USE(?Quit),KEY(CtrIX)   !Ctrl-X - ВЫХОД

            .

   Screen SCREEN(5,15),CENTER

            ROW(2,3) STRING('OK to continue?)

            ROW(4,5) BUTTON(' OK '),KEY(EnterKey)   !Enter - OK

             COL(10) BUTTON(' Cancel '),KEY(EscKey) !Esc - отмена

          .

См. также: PULLDOWN, MENU, ITEM, IMAGE, BUTTON

RIGHT (позиция для MENU)

             RIGHT

Атрибут RIGHT указывает, что элемент меню должен появиться на самом правом краю полосы PULLDOWN. Этот атрибут игнорируется для элементов меню, появляющихся в дропбоксах.

Пример:


   PuIlDown PULLDOWN

              MENU('Options')

                ITEM('43/50 Line Mode')

                ITEM('Colors')

              .

              MENU('Quit'),RIGHT           !Поместить на самом краю

            .

См. также: MENU

TOGGLE (элемент-переключатель типа ВКЛ/ВЫКЛ)

             TOGGLE(varible)

variable Метка целочисленной переменной.

Атрибут TOGGLE для элемента ITEM структуры PULLDOWN, указывает на то, что ITEM - переключатель. Когда ITEM включен, VARIABLE=1 и после ТЕКСТА связанного с ITEM появится значок (v). Когда же ITEM выключен, VARIABLE станет равной нулю, а значок (v) исчезнет.

ITEM можно включить/выключить нажатием на нем клавиши ENTER, или присвоением нуля или единице переменной VARIABLE из исполняемого кода.

Пример:


   LineMode        BYTE(1)          !Переключатель заранее включен

   

   PuIlDown PULLDOWN

            MENU('Options')

            ITEM('43/50 Line Mode'),TOGGLE(LineMode) !Переключатель

            ITEM('Colors')

            . .

См. также: ITEM

Назад | Содержание | Вперед