ГЛАВА 8 - SCREEN-СТРУКТУРЫ

ЭКРАНЫ КЛАРИОН

Что такое Screen

В языке Кларион есть два типа экранных структур - собственно экраны - SCREEN, и PULLDOWN-структуры. PULLDOWN-структуры являются SAA/CUA-совместимыми выпадающими меню. SCREEN-структуры используются для всех остальных типов экранов. SCREEN-структура может быть SAA/CUA-совместимой, а может и не быть. В обоих случаях для PULLDOWN и SCREEN-структур имеется полная поддержка мышки после выполнения команды SETMOUSE.

Применение SAA/CUA-совместимости заметно влияет на интерфейс программы с пользователем. При наличии SAA/CUA-совместимости, вы можете делать свои программы "видом и ощущением" подобными программам с графическим интерфейсом пользователя (GUI). То есть, ваша программа будет интуитивно понятна тем, кто имел хоть какое то дело с GUI. Более того, ваши программы могут быть целиком графическими, используя атрибут GRAPHIC для SCREEN-структур. Хотя, если у вас есть собственный стиль "вида и ощущения", то вы можете отказаться от стандарта SAA/CUA.

Главное отличие между SAA/CUA и не-CUA пользовательскими интерфейсами в действии клавиш ENTER и ESC при выборе и завершении поля. В не-CUA экранах, ENTER (или TAB) завершает ввод в поле и переводит оператора к следующему полю для ввода. Клавиша ESC (или BACKTAB) возвращает на предыдущие поля без завершения поля. В SAA/CUA-экранах, только TAB завершает поле и переходит к следующему. BACKTAB завершает поле и переходит к предыдущему. ENTER и Esc не перемещают по полям в CUA-экранах.

Это - руководство по языку, следовательно, все атрибуты и операторы структур SCREEN и PULLDOWN и их синтаксис будут рассмотрены подробно. Как правило, SCREEN-ы и PULLDOWN-ы Кларион "рисуются" с помощью соответствующих иснтрументальных средств в Редакторе Текста и Генераторе Приложений, причем, для вас формируется корректный кларионовский синтаксис. Стало быть, ручное кодирование структур SCREEN или PULLDOWN не является необходимым.

Equate-метки полей

В SCREEN-структурах, каждое поле с USE-переменной получает от компилятора свой номер. Эти номера полей начинаются с единицы и присваиваются полям по мере их появления в описании SCREEN-струк туры. Этот порядок определяет последовательность выбора полей оператором ACCEPT (хотя, его можно изменить оператором SELECT). Порядок появления полей в описании экрана НЕ зависит от атрибутов ROW и COL, которые задают месторасположение поля на экране. Таким образом, нет нужды в какой-либо корреляции между положением поля на экране и номером поля, присвоенным компилятором.

Есть несколько операторов, которые используют эти номера полей как параметры: SELECT, DISPLAY, UPDATE, ERASE, DISABLE, ENABLE, и некоторые другие. Было бы довольно сложно задавать каждый раз номера полей для использования в этих операторах. Поэтому, Кларион имеет механизм решения этой проблемы: Equate-метки полей.

Equate-метки полей всегда начинаются со знака вопроса (?), за которым идет имя USE-переменной поля. Ведущий знак вопроса означает для компилятора Equate-метку поля. Они очень похожи на нормальные директивы компилятора EQUATE. Компилятор подставляет номер поля для конкретной Equate-метки во время компиляции. Это делает ненужным знать или вычислять заранее номера полей.

Поля LIST, POINT, BUTTON и PAUSE в SCREEN-структурах могут иметь USE-переменные, которые могут быть только Equate-метками, что предлагает способ обращения к этим полям из программы.

Equate-метки меню

В PULLDOWN-структурах, компилятор назначает каждому полю MENU и ITEM свой номер. Эти номера полей - отрицательные, начинаются с минус единицы (-1) и назначаются полям по мере их появления в описании PULLDOWN-структуры.

Equate-метки меню для PULLDOWN то же самое, что Equate-метки полей для SCREEN. Они всегда начинаются со знака вопроса (?). Поля MENU и ITEM в PULLDOWN-структурах могут иметь USE-переменные, которые могут быть только Equate-метками меню, что предоставляет способ обращения к этим полям из программы.

SCREEN-СТРУКТУРЫ

SCREEN (описывает screen-структуру)


  метка        SCREEN([rows][,columns])[,AT()][,ALRT()][,CENTER]

               [,COLOR()][,TRN][,EXPAND()][,GRAPHIC][,HLP()]

               [,PRE()][,SHADOW][,  ZOOM ][,CUA]

                                    FADE 

                                    WIPE 

                                    FALL 

               [ROW()]

               [COL()]

                       [BUTTON()]

                       [CHECK()]

                       [ENTERY()]

                       [IMAGE()]

                       [LIST()]



                       [OPTION

                           [CHECK()]

                           [RADIO()]

[метка]                    [STRING()]

                       .]

                       [PAINT()]

                       [PAUSE()]

                       [PROMT()]



                       [REPEAT()

                           [POINT()]

                           [multiple other fields]

                       .]

[метка]                [STRING()]

                       [TEXT()]

             .

метка Допустима в Кларион метка. Она требуется для оператора SCREEN и не обязательна для экранных STRING-полей.
rows Целочисленная константа, задающая число строк на экране. Под экраном, в данном случае, понимается окно, используемое SCREEN-структурой. Максимум - 255, но произведение ROWS и COLUMNS не может превышать 32767. Если этот параметр опущен, то изображение, затертое экраном не сохраняется.
columns Целочисленная константа, задающая число колонок на экране. Максимум - 255, но произведение ROWS и COLUMNS не может превышать 32767. Если этот параметр опущен, то изображение, затертое экраном не сохраняется.
AT Задает X и Y координаты для экрана, положение которого, фиксированно.
ALRT Задает клавиши завершения поля, активные на всем экране.
CENTER Указывает, что открываемое окно должно быть отцентрировано относительно физического экрана.
COLOR Задает основной цвет экрана.
TRN Указывает на то, что предыдущий экран может прозрачно "просвечивать" сквозь текущий.
EXPAND Задает строку экрана, которая дублируется если экран, разработанный для режима 25 строк, открывается в режиме 43/50 строк.
GRAPHIC Переводит дисплей в графический режим.
HLP Задает окно помощи, связанное с экраном.
PRE Задает префикс метки для STRING-переменных.
SHADOW Указывает, что вокруг окна экрана автоматически размещается тень.
ZOOM, FADE, WIPE, FALL WIPE, FALL CUA Управляет методом появления экрана на дисплее. Задает SAA/CUA-подобный пользовательский интерфейс.
ROW Задает номер строки для описания в SCREEN-структуре.
COL Задает столбец в последней заданной строке для описания элемента SCREEN-структуры.
BUTTON Описывает поле-кнопку.
CHECK Описывает поле, позволяющее пользователю выбирать одно из двух возможных состояний.
ENTRY Описывает поле для ввода данных.
IMAGE Описывает область графического экрана, в которой может быть показан файл типа GIF/PCX.
LIST Описывает прямоугольник на экране для просмотра списка элементов.
OPTION Описывает меню-подобную структуру, содержащую несколько полей типа CHECK, RADIO или STRING. Все поля в структуре OPTION, должны быть одного типа.
RADIO Описывает выборы в меню для OPTION-структур. Только одна радиокнопка из нескольких, может быть активна в отдельный момент.
STRING Объявляет экранную переменную или символьную константу для показа на экране.
PAINT Устанавливает байты видеоатрибутов или цвета в прямоугольной области экрана.
PAUSE Замораживает курсор и показывает приглашение нажать клавишу завершения поля.
PROMPT Задает строку, которая ассоциируется с полем типа ENTRY, TEXT, LIST или OPTION.
REPEAT Описывает циклический набор полей.
POINT Описывает указатель (яркую полоску) в структуре REPEAT, используемую для выбора единичного элемента REPEAT.
TEXT Описывает мнгострочное поле для редактирования текста подобно редактору.

SCREEN-структура объявляет экран. Внутри структуры могут быть описания и атрибуты, которые описывает вывод символов, цвета и поля для пользовательского ввода. Когда экран активен, его строковые (STRING) поля с метками могут обрабатываться как любые другие поля данных с метками. Другой экран может быть открыт БЕЗ закрывания предыдущих, хотя активным может быть только один. Последний открытый экран и является активным.

SCREEN с параметрами ROWS и COLUMNS (размер не важен) описывает окно, которое автоматически сохраняет перекрываемое им видеоизображение. При закрытии экрана, сохраненное изображение восстанавливается. Если же параметры ROWS и COLUMNS опущены, то экран не сохраняет перекрытое изображение.

Экран может быть описан с размерами, большими чем у физического экрана (область, которую можно одновременно видеть на мониторе). Такой экран называется виртуальным. Размер видимой части виртуального экрана задается оператором SETAREA. При необходимости, можно использовать SETAREA для изменения размеров виртуальной рабочей области.

Виртуальный экран автоматически позиционируется так, чтобы его активное в данный момент поле было видно на физическом экране. Во время исполнения программы, когда активное поле находится за пределами физического экрана, рабочая область виртуального экрана сдвигается так, чтобы его верхний (или нижний, левый, правый) край находился двумя строками выше (ниже, левее, правее) выбранного поля.

SCREEN-структуры предлагают автоматическое позиционирование от поля-к-полю. Нажатие клавиши завершения завершает текущее активное поле и переводит курсор не следующее поле, подлежащее редактированию. Порядок выбора полей задается размещением описаний полей в описании экрана. Таким образом, порядок выбора полей НЕ зависит от атрибутов полей COL и ROW, задающих расположение на экране.

Все экранные структуры содержат полную поддержку мышки. Если перед запуском программы загружен драйвер мышки, достаточно выполнить команду SETMOUSE, и программа сможет работать с ней. Оператор может перемещать физический экран по виртуальному с помощью мышки. Помещение курсора мышки на край экрана вызывает сдвиг или прокрутку физического экрана в пределах экрана виртуального.

Если оператор вручную переместил виртуальный экран так, что активное поле не видно на физическом экране, то автоматический выбор поля перенесет физический экран к выделенному полю, как только оператор нажмет какую-нибудь клавишу.

Если у экрана есть атрибут GRAPHIC, то монитор переключается в графический режим при открытии такого экрана. Максимальный размер графического экрана - 25x80. Из-за ограничений по памяти, в графическом режиме НЕ разрешены виртуальные экраны. Открываемые в последствии экраны без атрибута GRAPHIC не изменят режим дисплея; он останется графическим до тех пор, пока не будет закрыт первоначальный экран с атрибутом GRAPHIC. Если какой-нибудь из последующих экранов больше, чем 25 x 80, программа аварийно завершит работу.

Атрибут GRAPHIC требуется только для экранов с IMAGE-полями. Все остальные экраны работают одинаково как в текстовом, так и графическом режимах. Текстовый, конечно, намного быстрее чем графический, потому, что требуется перемещать гораздо меньше данных.

Некоторые поля позволяют описать "горячие" клавиши, которые задаются амперсандом. Символ, стоящий за амперсандом и есть "горячая клавиша" поля. Для перехода к такому полю, надо нажать ALT и "горячую" клавишу.

Пример:


Screen    SCREEN(75,160),PRE(Scr)        !A virtual screen

            !(declarations)              !  fields, strings, etc

          .                              !End screen structure

См. также: SETAREA, SETMOUSE

AT (задает координаты экрана)


             AT(строка,столбец)

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

AT задает конкретное место для окна, так что оно не сможет "плавать". Обычно, это используется для экранов, меньших по размеру, чем виртуальный.

SCREEN без атрибута AT пытается "плавать" так, чтобы не закрыть собой последние столбец и строку, к которым обращался предыдущий экран. Положение по умолчанию - под последней строкой, к которой было обращение и на последнем столбце, к которому было обращение. Если при этом край окна выходит за физический экран, то окно пытается разместиться над последней строкой, к которой было обращение. Если и это не получается, то SCREEN центрирует себя на виртуальном экране. Первый столбец окна помещается на последний столбец, к которому было обращение. Если при этом край окна выходит за пределы физического экрана, то окно сдвигается влево до тех пор, пока не будет виден самый правый край окна.

Щелчок-и-перемещение мышки на верхней строке "плавающего" экрана, меньшего чем виртуальный, позволяет переместить окно в любое место виртуального экрана.

Пример:


  Screen1  SCREEN(15,50),AT(27,15)!Fix window at row 27, column 15

             !(declarations)      !   declare fields etc.

           .                      !End of screen structure

CENTER (центрирование на физическом экране)


             CENTER

Атрибут CENTER указывает на то, что окно SCREEN-структуры всегда будет открываться в центре экрана. Его стоит использовать, когда заранее неизвестно, в каком режиме будет работать программа - 25 43 или 50 строк, и важно расположить окно в центре. С помощью мышки можно перетащить центрированный экран, размеры которого меньше чем у виртуального, в любое место на виртуальном экране.

Пример:


  Screenl  SCREEN(15,50),CENTER           !Always pop up in center

             !(declarations)              !   declare fields etc.

           .                              !End of screen structure

CUA (объявляет пользовательский интерфейс типа SAA/CUA)


             CUA

Атрибут CUA в операторе SCREEN задает SAA/CUA-подобный интерфейс. SAA/CUA-подобие включает множество возможностей, большинство из которых, включены в экраны Кларион с или без атрибута CUA. Атрибут CUA имеет свои специфичные методы перемещения по полям и обработки клавиш завершения.

SAA/CUA-подобные экраны используют TAB и BACKTAB для перемещения по полям экрана. TAB завершает редактирование поля и переходит к следующему. BACKTAB завершает редактирование текущего поля и переходит к ПРЕДЫДУЩЕМУ. НЕ-SAA/CUA экраны используют ENTER и ESC (а также TAB и BACKTAB) для перемещения между полями экрана. ENTER (и TAB) завершают редактирование поля и переходит к следующему полю для обработки. ESC (и BACKTAB) обрывают обработку текущего поля и выбирают для редактирования предыдущее поле, НЕ завершая редактирования текущего.

Пример:


  Screen1  SCREEN(15,50),AT(27,15).CUA

                                !SAA/CUA navigation and completion

             !(declarations)    !  declare fields etc.

           .                    !End of screen structure

EXPAND (задает размножаемую строку)


             EXPEND(строка)

строка Целочисленная константа в диапазоне 1..25, включительно.

Атрибут EXPAND в SCREEN-структуре задает строку (для режима 25 строк), которая будет повторена несколько раз в режимах 43 или 50 строк. Это позволяет использовать экраны, разработанные для режима 25 строк в режиме 43/50 строк. Указанная строка повторяется столько раз, сколько надо, чтобы заполнить экран. Обычно, выбранная строка используется для раздвижки REPEAT-структуры или LISTбокса на добавочные 18 или 25 строк.

Пример:


  Screen1  SCREEN(25,80),EXPAND(10)

                           !В режиме 43/50 повторяем 10ю строку

                 REPEAT(12),INDEX(Ndx),MAX(MaxRows)

                           !Repeat-структура в строках 3..15

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

  Month      COL(5)   STRING(3)

             COL(12)  ENTRY(@N_7.2),USE(Amt),INS

           .     .         !End of screen structure

См. также: SETTEXT

GRAPHIC (задает графический режим)


             GRAPHIC

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

Войдя в графический режим, программа остается в нем, пока не закроется экран, вызвавший переход в этот режим. Любые экраны, открываемые после экрана с GRAPHIC, будут открываться в графическом режиме независимо от наличия у них этого атрибута. Переход к графическому режиму прозрачен для оператора; все экранные поля, все функции редактирования такие же, как и в текстовом режиме. Любой текст с предыдущих текстовых экранов, автоматически будет преобразован в графику. Функция BLINK не работает в графическом режиме. То есть, любой мигающий текст, в графике будет выведен на ярком фоне.

Из-за ограничений по памяти, 25х80 - максимальный размер графического экрана. Если вы работаете в режиме 43/50, то, при открытии графического экрана, экран автоматически переводится в режим 25 строк. В графическом режиме НЕДОСТУПНЫ виртуальные экраны. Если при работе в графическом режиме попытаться открыть виртуальный экран, то программа аварийно остановится.

Пример:


  Screenl  SCREEN(15,50),GRAPHIC!Screen puts video in graphics mode

             ! (declarations)   ! declare fields etc.

           .                    !End of screen structure

SHADOW (автоматическая тень под окном)


             SHADOW

Атрибут SHADOW вызывает автоматическое размещение "теней" у нижнего и правого краев окна или поля-кнопки, для имитации трехмерного эффекта. Тени - прозрачны, т.е. лежащий под ними текст виден как бы в дымке. SHADOW обычно используется в SCREEN-структурах, размер которых меньше физического экрана.

В PULLDOWN-меню, SHADOW выделяет тенью только "выпадающие" подменю.

Пример:


  Screen1  SCREEN(15,50),SHADOW !Automatic shadowing around screen

             !(declarations)    !  declare fields etc.

           .                    !End of screen structure

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

ZOOM, FADE, WIPE, FALL (методы открытия экрана)


             ZOOM

             FADE

             WIPE

             FALL

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


     ZOOM        окно "вырастает" на экране

     FADE        окно "проявляется" на экране посимвольно

     WIPE        окно "втирается" в экран

     FALL        окно "выпадает" на экран

Пример:


  Screen1        SCREEN(12,12),ZOOM

  Screen2        SCREEN(25,80),FADE

  Screen3        SCREEN(50,180),WIPE

  Screen4        SCREEN(10,30),FALL

ПОЗИЦИОНИРОВАНИЕ ЭКРАННЫХ ПОЛЕЙ

ROW (задает строку)


             ROW(строка[,столбец])

строка Целая константа, означающая строку, в которой поле буде выведено на экран.
столбец Целая константа, означающая столбец, начиная с которого, поле или строка будет выведено на экран. Если пропущен, то подразумевается столбец из последнего оператора ROW или COL.

ROW управляет размещением полей и строк на экране. СТРОКА и СТОЛБЕЦ должны быть в пределах высоты и ширины экрана соответственно.

Пример:


   ROW(4,12)      PAINT(12,34),COLOR(7,4)



   ROW(9)         ENTRY(@Sl2),USE(Status)

COL (задает столбец)


             COL(столбец)

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

COL разделяет описания в пределах структуры SCREEN установкой столбца для следующего поля или строки в той же СТРОКЕ экрана, что и для непосредственно предыдущего поля.

Пример:


   Fname  ROW(2,2) STRING(@S12)      !Вывод Fname в стр. 2 столб. 2

   Init   COL(16)  STRING(@S1)       !Вывод Init в стр. 2 столб. 16

   Lname  COL(18)  STRING(@S12)      !а Lname в стр. 2 столбце 18

ПОЛЯ СТРУКТУРЫ SCREEN

BUTTON (поле-кнопка)


             BUTTON(текст),USE()[,COLOR()][,TRN][,MSG()][,ESC()]

               [,HLP()][,SHADOW][,REQ][,IMM]

текст Строковая константа или переменная, содержащая надпись на кнопке.
USE Equate-метка поля, которая позволяет оператора программы обращаться к этому полю.
COLOR Задает цвета.
TRN В графическом режиме указывает на то, что при выводе кнопки, использовать только цвет переднего плана, оставляя фон неизменным.
MSG Сообщение, которое будет показано в строке сообщений экрана.
ESC Поле, на которое перейти при нажатии ESC или BACKTAB.
HLP Идентификатор окна подсказки, связанного с этим полем.
KEY КОД_КЛАВИШИ для "горячей клавиши", вызывающей немедленное нажатие BUTTON.
SHADOW Автоматически разместить тени вокруг кнопки.
REQ Заставляет BUTTON проверять все поля на данном экране с атрибутом REQ на предмет наличия в них данных, отличных от нуля или пробелов.
IMM BUTTON автоматически завершается при нажатии левой кнопки мыши и связанная с ней процедура вызывается непрерывно до отпускания кнопки мыши.

BUTTON описывает поле-кнопку в SCREEN-структуре. Текстовая строка может содержать амперсанд (&),который означает, что следующий за ним символ - "горячая" клавиша для этого поля. Нажатие ALT и выделенного амперсандом символа взывает немедленное "нажатие" этой кнопки.

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

Клавиша TAB, и в CUA и в не-CUA экранах, НЕ завершает поле-кнопку. Клавиша же ENTER завершает поле кнопку в обоих режимах экрана.

Текстовая строка может содержать также вертикальную черту (|), которая означает конец строки текста. Таким образом, можно создавать многострочные кнопки. Общая ширина прямоугольника-кнопки определяется наибольшим числом символов до вертикальной черты.

BUTTON с атрибутом REQ - кнопка, которая "требует проверки полей". На CUA экранах, атрибут REQ для полей ENTRY или TEXT не проверяется, пока не будет нажата кнопка с атрибутом REQ.

BUTTON без атрибута IMM, завершается при отпускании левой кнопки мыши. BUTTON с атрибутом IMM завершается при нажатии левой кнопки мыши. Это позволяет исполнять назначенный этой кнопке исполняемый код до тех пор, пока не будет отпущена кнопка мыши.

Пример:


   BUTTON('              Ѓ ButtonTextЃ  Ѓ'),USE(?Pushbutton)

                                          !трехстрочная кнопка

CHECK (поле отметки (чекбокс)


             CHECK(text),USE()[,COLOR()][,TRN][,MSG()][,HLP()]

               [,ESC()]

text Строковая константа или переменная, содержащая текст для вывода на экран.
USE Целочисленная переменная или EQUATE-метка.
COLOR Цвета для данного поля.
TRN В графическом режиме цвет фона - прозрачный, и через него просвечивает фон предыдущего изображения.
MSG Текст, который будет выведен в строку сообщений экрана.
HLP Задает экран подсказки, связанный с этим полем.
ESC Указывает поле, на которое надо перейти при нажатии ESC или BACKTAB.

CHECK это поле с двумя состояниями - вкл/выкл. Чекбокс помещает пробел левее строки, заданной как параметр оператора CHECK. Когда это поле "включено", связанная с ним USE-переменная устанавливается в единицу и значок "отметка" (v) появляется в рамочке (до тех пор, пока иное не задано командами LOADSYMBOLS или USESYMBOLS). Если "выключен", то рамка очищается и USE-переменная устанавливается в ноль (ложь). Состояние чекбокса можно изменять клавишей пробела.

Текстовая строка может содержать амперсанд, который действует так же как и в текстовой строке для BUTTON - задает "горячую клавишу" для данного поля.

CHECK может быть отдельно, или может быть сгруппирован с другими операторами CHECK в структуру OPTION. Состояние полей переключается пробелом.

Пример:


   ROW(12,23) CHECK('Employed?'),USE(Employed) !Одиночный чекбокс



   ROW(5,6) OPTION                    !Начало структуры OPTION

   ROW(6,9)   CHECK('Deduct &Medical')! 'Alt-M' для медиков

   ROW(7,9)   CHECK('Deduct &Dental') ! 'Alt-D' для стоматологов

   ROW(8,9)   CHECK('Deduct &AD&&D')  ! 'Alt-A' для любителей РПГ

         .                         !Конец структуры OPTION

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

ENTRY (Поле для ввода)


             ENTRY([picture]),USE()[,COLOR()][,TRN][,HLP()]

               [,ESC()][,IMM][,LFT][,INS][,CAP][,ALRT()]

                                     OVR   UPR

               [,MSG()][,SKIP][,HIDE][,REQ]

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

Поле ENTRY позволяет оператору вводить и редактировать содержимое USE-переменной. Шаблон поля ENTRY может быть не такой длины, как его USE-переменная. Например, an ENTRY(@S30) может использоваться для изменения STRING(85), и USE-переменная будет прокручиваться влево или вправо в рамках, заданных шаблоном. То есть, когда поле ENTRY активно, можно использовать стрелки влево/вправо для перемещения в любое место USE-переменной.

Если используется как "пустое" поле (без щаблона), то оператор ACCEPT немедленно завершает это поле. Таким образом, "пустые" поля позволяют программе получать управление в каких-то точках обработки SCREEN-структуре (обычно используется для обработки НЕ-CUA экранов).

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

Если есть атрибут SKIP, то поле не может быть выбрано для ввода данных. Тем не менее, USE-переменая может быть показана оператором DISPLAY, что позволяет создавать поля "только для глаз".

Пример:


    ROW(6,14)   ENTRY(@S24),USE(Name),CAP,LFT,HLP('Name')

    ROW(8,16)   ENTRY(@S2),USE(state),UPR.IMM,HLP('StateLst')

    ROW(12.20)  ENTRY(@N4.1),USE(Percent),INS,REQ,ESC(?Amount)

    ROW(10,8)   ENTRY(@P###-##-####P),USE(SocSecNbr),OVR,REQ.IMM

    ROW(1,1)    ENTRY,USE(?FirstField)

IMAGE (поле-рисунок)


             IMAGE(row,columns),[NAME()][,USE()][,IMM][,REUSE]

               [,SKIP][,MSG()][,ESC()][,HLP()][,KEY()]

rows Строк в IMAGE-поле, максимум - 25.
columns Столбцов в IMAGE-поле, максимум - 80.
NAME Строковая переменная или константа, содержащая имя PCX или GIF файла для показа. Если USE содержит метку MEMO-поля, то атрибут NAME не используется.
USE EQUATE-метка поля, или метка переменной, которая содержит PCX или GIF рисунок для показа, обычно это MEMO_поле с атрибутом BINARY.
IMM Немедленно показать рисунок, позволяя любым строковым литералам перекрывать его.
REUSE В 256-цветном SVGA режиме, рисунок будет выводиться в палитре цветов, заданной другим .PCX или .GIF, показанным ранее, или в палит ре видеокарты по умолчанию, по принципу "наилучшего соответствия".
SKIP Это поле не может быть выбрано пользователем.
MSG Текст, который будет выведен в строку сообщений экрана.
HLP Задает экран подсказки, связанный с этим полем.
ESC Указывает поле, на которое надо перейти при нажатии ESC или BACKTAB.
KEY "Горячая" клавиша, немедленно завершающая IMAGE-поле.

IMAGE описывает область для вывода графики для SCREEN-структуры с атрибутом GRAPHIC. Параметры rows и columns определяют размер выводимого на экран рисунка. PCX или GIF рисунки автоматически масштабируются при необходимости.

IMAGE-поле без атрибута SKIP действует как поле BUTTON. Оно может иметь EQUATE-метку поля, как и его USE-переменная, что позволяет ссылаться на нее операторами программы. Пользователь может: переместиться на это поле клавишей TAB и нажать ENTER, щелкнуть на нем мышкой, или нажать заданную атрибутом KEY горячую клавишу - ACCEPT завершит это поле. Если атрибут KEY указан, то задаваемый им код клавиши будет возвращаться функцией KEYCODE() при завершении IMAGE-поля, независимо от клавиши, действительно завершившей его. Если IMAGE-поле выбрано пользователем, то в его верхнем левом углу появляется мигающий ромбик (ASCII 4). Цвет ромбика - это цвет переднего плана для текущего Цветового Стиля, который имел символ в текстовом режиме в этой позиции.

IMAGE-поля поддерживаются в графических режимах EGA, VGA и SVGA; CGA Color и Hercules graphics не поддерживаются. Поддерживаются все 16-цветные режимы. 256-цветные PCX или GIF рисунки автоматически выводятся в 16-цветном режиме на 16-цветном "железе". 256цветные SVGA режимы поддерживаются при определенном минимуме аппаратных средств:


   Карта/Чипсет             Разрешение        Требует Памяти

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



   TSENG Chip Set           640 x 350             512K

   Video7/Headland          640 x 400             256K

   Ahead Systems            640 x 400             256K

   Paradise                 640 x 400             256K

   VESA                     640 x 400             256K

   Trident/Everex           640 x 400             256K

   Zymos                    640 x 400             256K

   Genoa                    640 x 400             256K

Пример:


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

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

                                                !Показать рисунок

            ROW(3,35) IMAGE(14,25),NAME('picture.gif'),IMM

                                                !IMAGE как BUTTON

            ROW(3,37) STRING('Picture Select Button')

                               !Строка накладывается на рисунок

          .

См. также: BUTTON, SHOWIMAGE

LIST (описывает список)


             LIST(rows,cols),FROM()[,COLOR()][,TRN][,HLP()]

               [ESC()][,IMM][,SKIP][,MSG()][,USE()][,HIDE]

               [,FILL()][,COLS()][,FIX()][,HSCROLL ]

                                           VSCROLL 

                                           HVSCROLL

rows Число строк (элементов) списка, выводимых на экран.
cols Число столбцов для вывода в этом списке.
FROM Метка QUEUE или элемента QUEUE для вывода Может быть типа GROUP.
COLOR Задает цвета.
TRN В графическом режиме в качестве цвета фона используется цвет перекрываемого изображения
HLP Идентификатор окна помощи, связанного с этим полем.
ESC Задает поле, на которое перейти при нажатии клавиш ESC или BACKTAB.
IMM Поле считается заполненным, как только указатель попадает на него.
SKIP Ввод данных в это поле невозможен.
MSG Текст, показываемый в строке сообщений экрана.
USE EQUATE-метка поля, которая позволяет операторам программы ссылаться на этот список.
HIDE Курсор-указатель будет виден только тогда, когда данное поле активно.
FILL Целочисленная константа или EQUATE-метка поля, задающая поле, которое принимает значение, выбранное из списка.
COLS Задает ширину столбца в списке. Содержит строковую константу или переменную, задающую число символов в каждом столбце, целочисленную переменную, в которую передается номер подсвеченного столбца, когда список завершен, и целочисленную константу, задающую расстояние между столбцами.
FIX Целочисленная константа, задающая число статичных строк в списке, что позволяет, при использовании атрибута COLS, помещать в список заголовки столбцов.
HSCROLLЛинейка горизонтальной прокрутки, занимающая самую нижнюю строку списка.
VSCROLLЛинейка вертикальной прокрутки, занимающая самый правый столбец списка.
HVSCROLL Поместить в список обе линейки прокрутки - горизонтальную и вертикальную.

LIST объявляет список в SCREEN-структуре. LIST выводит на экран rows элементов/полей из QUEUE, имя которой задается атрибутом FROM. Поле QUEUE выводится по одной записи в строке, в области, задаваемой параметрами rows и cols. Элементы очереди выводятся в список как есть, так что некоторые поля придется форматировать во время построения QUEUE. Если у LIST-а есть атрибут IMM и QUEUE изменяется в то время, когда LIST ждет ввода от пользователя, надо использовать оператор DISPLAY для обновления списка.

Полоса курсора позволяет оператору выбирать элемент из списка. FILL-поле обновляется по мере продвижения курсора по списку. Список завершается нажатием TAB для CUA экранов (и TAB или ENTER для не-CUA экранов) и процесс обработки переходит к следующему полю для ввода. Двойной щелчок мышки также завершает список, но не переводит обработку автоматически на следующее поле. Функция CHOICE возвращает номер записи в QUEUE (значение возвращаемое функцией POINTER(queue)) соответствующий элементу, выбранному по завершении списка. Второй параметр оператора SELECT может быть использован для помещения курсора на НЕ первый элемент списка.

Список с атрибутом IMM, прокручивается горизонтально на 255 символов. Без атрибута IMM, он прокручивается в пределах самой длин ной записи в QUEUE (до 255 символов).

Если задан атрибут COLS, полоса курсора подсвечивает один столбец (заданный атрибутом COLS) за раз, и стрелки влево/вправо позволяют переходить от столбца к столбцу в пределах элемента списка. Атрибут FIX можно использовать для создания заголовков столбцов, которые прокручиваются только горизонтально, вместе со всем списком, не прокручиваясь по вертикали (они зафиксированы в списке). Пользователь не может отметить или изменить заголовки.

Пример:


SelectPart PROCEDURE

ListOue    QUEUE,PRE(Lst)               !Очередь для номеров З/Ч

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

           .                            !  вывода на экран

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

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

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

               ,FILL(?Trn:PartNo),USE(?PartList)

        .



        CODE

        SET(PartsFile)         !Строим QUEUE для LISTбокса

        LOOP UNTIL EOF(PartsFile)

          NEXT(PartsFile)

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

          Lst:PartNo = Par:PartNo

          ADD(ListOue,Lst:PartNo)

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

        .

        OPEN(Screen)            !Теперь откроем экран и...

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

См. также: QUEUE, SELECT

OPTION (описывает меню опций)


             OPTION[,COLOR()][,TRN]

               CHECK()

             .

             OPTION[USE()][,COLOR()][,TRN][,HLP()][,ESC()]

               RADIO()

             .

             OPTION([picture])[USE()][,COLOR()][,TRN][,HLP()]

                 [,ESC()][,ALRT()][,IMM][,REQ][,SKIP][,PRE()]

[метка]        STRING()

             .

picture Шаблон формата используется для форматирования символов для вывода или присвоения USE-переменной. Этот параметр разрешен для STRING OPTION структур.
USE Переменная или EQUATE-метка поля. Этот параметр разрешен для RADIO или STRING OPTION структур.
COLOR Задает цвета экрана для данного поля. Этот параметр разрешен для структур CHECK, RADIO, и STRING OPTION.
TRN В графическом режиме в качестве цвета фона используется цвет фона перекрываемого изображения. Этот параметр разрешен для структур CHECK, RADIO, и STRING OPTION.
HLP Идентификатор окна помощи, связанного с этим полем. Этот параметр разрешен для структур RADIO или STRING OPTION.
ESC Поле, на которое перейти при нажатии ESC или BACKTAB. Этот параметр разрешен для структур RADIO или STRING OPTION.
ALRT Задает активные ALERT-клавиши для данного поля. Этот параметр разрешен для структур STRING OPTION.
IMM Поле считается завершенным, как только оно заполнено. Этот параметр разрешен для структур STRING OPTION.
REO Поле не может быть оставлено пустым или нулевым. Этот параметр разрешен для структур STRING OPTION.
SKIP Это поле не может использоваться для ввода данных. Этот параметр разрешен для структур STRING OPTION.
PRE Задает префикс структуры. Этот параметр разрешен для структур STRING OPTION.

Структура OPTION формирует на экране структуру меню. В структуре OPTION разрешены три типа полей: CHECK (чекбоксы), RADIOкнопки и STRING (строки). Поля разных типов не могут использоваться в одой и той же структуре OPTION. Нажатием горячей клавиши, заданной амперсандом в предшествующем операторе PROMPT, можно выбрать для ввода целиком структуру OPTION.

OPTION, содержащий операторы CHECK, группирует несколько чекбоксов вместе. Группа может иметь один общий цвет (атрибут COLOR оператора OPTION). Стрелки вверх/вниз перемещают курсор-указатель с одного чекбокса на другой и при необходимости - с самого нижнего на самый верхний. Каждый чекбокс может быть переключен индивидуально (пробелом) не влияя на остальные чекбоксы в структуре OPTION. Каждый чекбокс может иметь собственную горячую клавишу, задаваемую амперсандом в его строке параметров. USE-переменные не разрешены для OPTION-ов, и функция CHOICE не влияет на этот тип OPTION-ов.

OPTION, содержащий RADIOкнопки позволяет выбрать только одну из списка, приведенного в структуре OPTION. Когда кнопка выбрана, любая другая выбранная ранее кнопка отключается (гаснет). USEпеременная получает значение строки от выбранной RADIOкнопки, а функция CHOICE возвращает относительную позицию кнопки в структуре OPTION.

OPTION, содержащий операторы STRING, работает как меню в структуре SCREEN. Каждая строка может быть подсвечена курсором и выбрана нажатием ENTER на обычном экране, или нажатием TAB на CUAэкране. USE-переменная обновляется значением строки, а функция CHOICE возвращает относительную позицию выбранной строки в структуре OPTION. Можно использовать необязательный шаблон формата. Он выводит значение текущей строки в верхний левый угол структуры OPTION, и обновляет его при перемещении курсора.

Пример:


   ROW(5,6)  OPTION                 !Начало структуры CHECK OPTION

    ROW(6,9)    CHECK('Deduct &Medical')!'Alt-M' для медиков

    ROW(7,9)    CHECK('Deduct &Dental') !'Alt-D' для стоматологов

    ROW(8,9)    CHECK('Deduct &AD&&D')  !'Alt-A' для любителей RPG

              .                         !Конец структуры OPTION

    ROW(10,6) OPTION,USE(TaxSelection) !Начало структуры RADIO OPTION

    ROW(11.9)  RADIO('Pre-Tax'),MSG('Это было до сбора налогов')

    ROW(12,9)  RADIO('Post-Tax'),MSG('Это стало после сбора налогов')

              .

   

    ROW(15,6) OPTION                   !Begin item option structure

    ROW(16,9)   STRING('Process &Medical')

                                       !'Alt-M' for medical procedure

    ROW(17,9)   STRING('Process &Dental')

                                       !'Alt-D' for dental procedure

    ROW(18,9)   STRING('Process &AD&&D')!'Alt-A' for AD&D procedure

              .                         !End option structure

См. также: CHECK, RADIO, STRING, PROMPT

PAINT (закраска части экрана)


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

columns Сколько столбцов закрашивать. Целочисленная константа.
rows Сколько строк закрашивать. Целочисленная константа.
COLOR Цвет закраски.
TRN Прозрачная закраска.

При открытии SCREEN-структуры, все ее видеоатрибуты определяются ее атрибутом COLOR. PAINT изменяет байты видеоатрибутов в заданной прямоугольной области экрана.

Пример:


    ROW(4,25)  PAINT(13,32),COLOR(23)

                        !Закрасить голубым 13 строк по 32 столбца

    ROW(6,58)  PAINT(6,22),TRN

                        !Закрасить прозрачно 6 строк по 22 столбца

PAUSE (поле ожидания нажатия на клавишу)


           PAUSE(строка)[,USE()][,COLOR()][,TRN][,HLP()][,ESC()]

             [,ALRT()][,MSG()]

string Строковая константа или переменная, содержащая сообщение, выводимое во время ожидания.
USE EQUATE-метка поля, позволяющая операторам программы ссылаться на него.
COLOR Цвета данного поля.
TRN В графическом режиме, для изображения поля использовать только цвет переднего плана, оставляя фон "как есть".
HLP Идентификатор окна помощи, связанного с данным полем.
ESC Поле, на которое перейти при нажатии ESC или BACKTAB.
ALRT Задает ALERT-клавиши, активные для данного поля.
MSG Текст, выводимый в строке сообщений экрана.

Когда PAUSE-поле выбрано, на экран выводится строка string. Любая клавиша кроме ESC или BACKTAB завершает PAUSE-поле. Завершение PAUSE-поля убирает строку string с экрана.

PAUSE НЕ передает значение в USE-переменную. Тем не менее, вы можете ИСПОЛЬЗОВАТЬ (английская игра слов - USE=ИСПОЛЬЗОВАТЬ) EQUATE-метку, что позволяет вам определять это поле функцией FIELD для своих целей. PAUSE-поля обычно используются на НЕ-CUA экранах, для вывода сообщений типа "бьем/не бьем", требующих подтверждения от оператора.

Пример:

             :

  PAUSE('F10 - Облом, любая другая клавиша - продолжаем')|

        ,USE(?Complete)

             :

  CODE

  CASE FIELD()

  OF ?Complete

   IF KEYCODE() = F10Key THEN RETURN.

  .

См. также: FIELD

POINT (указатель структуры REPEAT)


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

               [,ALRT()][,HLP()][,ESC()][,REQ()][,MSG()][,IMM]

строк Высота указателя в строках.
столбцов Ширина указателя в символах.
USE EQUATE-метка поля, позволяющая ссылаться на него.
COLOR Цвета для данного поля.
TRN В графическом режиме, для изображения поля использовать только цвет переднего плана, оставляя фон "как есть".
HLP Идентификатор окна помощи, связанного с данным полем.
ESC Поле, на которое перейти при нажатии ESC или BACKTAB.
ALRT Задает ALERT-клавиши, активные для данного поля.
MSG Текст, выводимый в строке сообщений экрана.
REQ Указывает, что элемент должен быть выбран.
IMM Поле считается завершенным, как только оно подсвечено курсором.

POINT-поле создает полоску подсветки (курсор) позволяющую опера тору выбрать элемент из REPEAT-структуры. С другой стороны, оно устанавливает значение REPEAT INDEX. POINT-указатель формируется изменением цветов в покрываемой им области. Размер курсора определяется параметрами СТРОК и СТОЛБЦОВ. Пропущенный параметр считается равным единице. Верхний левый угол указателя находится в позиции, задаваемой его параметрами ROW и COL, и изменяется в пределах области, заданной параметрами DOWN и ACROSS (вниз и поперек) REPEAT-структуры, и параметром EVERY. Стрелки, клавиши Home и End позволяют оператору перемещаться в пределах структуры REPEAT. POINT НЕ подсвечивает полностью пустой элемент.

Следующие клавиши завершают POINT-поле, и устанавливают переменную REPEAT INDEX в относительную позицию в REPEAT. Они могут использоваться для передаче управления программе из REPEAT:


  Tab (CUA)        Enter (non-CUA)        Ins        Del

  Backspace        Pgup                   PgDn       CtrlPgUp

  CtrlpgDn         Up (с самого верха)    Down (с самого низа)

  Любой алфавитно-цифровой символ.

POINT-поле завершается, если СТРЕЛКА ВВЕРХ (или BACKTAB для CUAрежима) нажата в самой первой позиции REPEAT-структуры, или СТРЕЛКА ВНИЗ нажата в самой последней позиции. Тем не менее, поле типа POINT с атрибутом REQ будет "свертываться" в последнюю/ первую позиции соответственно, без завершения.

Любой алфавитно-цифровой символ также завершит POINT-поле. Это позволяет программисту создавать "локаторные" поля. "Локаторное" поле динамически репозиционирует курсор не первую запись, содержащую введенные пользователем символы. Код для "локаторных" полей осуществляет "поиск с увеличением" для нахождения первой записи, содержащей данные, начинающиеся с этих символов.

Пример:


                REPEAT(12),INDEX(Ndx)

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

Month    COL(5)    STRING(3)

                .                        !Конец структуры REPEAT

См. также: REPEAT

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