ОБЪЕКТЫ ИНТЕРФЕЙСА

Каждому объекту интерфейса в OpenEdge ABL присущ набор атрибутов, событий и методов. Каждому событию может быть назначен программный код - триггер, выполняемый по наступлению данного события.

Сразу оговоримся, что здесь мы рассматриваем только атрибуты, события и методы доступные в UNIX CHUI.

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

Триггеры событий объектов описываются следующим образом:

ON event OF object-name
DO:
    ... (тело триггера)
END.

event – событие объекта;
object-name – имя объекта.

Для программной инициализации событий объектов интерфейса:

APPLY event TO object-name.

По способу определения, объекты интерфейса разделяются на: статические - объявленные оператором DEFINE и динамические - создаваемые в процессе выполнения программного кода посредством оператора CREATE.


FRAME (ФРЕЙМ)


Frame представляет собой прямоугольную область, являющуюся контейнером для размещения различных объектов интерфейса, таких как: поле ввода (FILL-IN), кнопка (BUTTON), таблица (BROWSE) и т.д.

DEFINE {[NEW] SHARED] | [PRIVATE] FRAME frame
  [form-item ...]
  [{HEADER | BACKGROUND} head-item ...]
  {[frame-phrase]}

frame - идентификатор фрейма;

form-item - идентификатор элемента интерфейса, располагаемый во фрейме;

Элементами интерфейса являются: константы, переменные, поля таблиц, различные объекты интерфейса (например, кнопка), пробел и перевод строк.

frame-phrase - определяет параметры фрейма:

WITH [ACCUM [max-length]]
     [at-phrase] [ATTR-SPACE | NO-ATTR-SPACE]
     [CANCEL-BUTTON button-name] [CENTERED]
     [color-specification]
     [COLUMN expression] [n COLUMNS]
     [CONTEXT-HELP] [CONTEXT-HELP-FILE help-file-name]
     [DEFAULT-BUTTON button-name]
     [DROP-TARGET]
     [[expression] DOWN] [EXPORT]
     [WIDGET-ID id-number] [FONT expression]
     [FRAME frame]
     [INHERIT-BGCOLOR | NO-INHERIT-BGCOLOR]
     [INHERIT-FGCOLOR | NO-INHERIT-FGCOLOR]
     [KEEP-TAB-ORDER] [NO-BOX]
     [NO-HIDE] [NO-LABELS] [USE-DICT-EXPS]
     [NO-VALIDATE] [NO-AUTO-VALIDATE]
     [NO-HELP] [NO-UNDERLINE]
     [OVERLAY] [PAGE-BUTTON | PAGE-TOP] [RETAIN n]
     [ROW expression] [SCREEN-IO | STREAM-IO]
     [SCROLL n] [SCROLLABLE] [SIDE-LABELS]
     [size-phrase][STREAM stream | STREAM-HANDLE handle] [THREE-D]
     [title-phrase] [TOP-ONLY] [USE-TEXT]
     [V6FRAME [USE-REVVIDEO] | [USE-UNDERLINE]]
     [VIEW-AS DIALOG-BOX] [WIDTH n] [IN WINDOW window]

at-phrase - определяет местоположение фрейма в окне или внутри родительского фрейма:

AT {  COLUMN column ROW row
    | X x Y y
   }

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

CENTERED - центрует положение фрейма по горизонтали. При этом, значение, определяющее положение фрейма по горизонтали, заданное посредством COLUMN или X, если оно было определено в AT, игнорируется.

size-phrase - определяет размеры фрейма:

{SIZE | SIZE-CHARS | SIZE-PIXELS } width BY height

Размер фрейма определяется его шириной width и высотой height, значения которых могут быть заданы либо в печатных символах {SIZE | SIZE-CHARS}, либо в пикселах SIZE-PIXELS. 

NO-BOX - по умолчанию, фрейм имеет окантовку. Данная опция выводит фрейм без окантовки.

title-phrase - заголовок фрейма:

TITLE [   { [BGCOLOR expression]
            [DCOLOR expression]
            [FGCOLOR expression]
          }
        | COLOR color-phrase
      ]
      [FONT expression ] title-string

title-string - текстовая константа или выражение, значение которых определяет заголовок фрейма.

OVERLAY - указывает на то, что фрейм должен выводится поверх других фреймов, кроме тех, в которые объявлены с опцией TOP-ONLY.

TOP-ONLY - данная опция указывает на то, что фрейм всегда будет выведен поверх других фреймов, даже если они объявлены с опцией OVERLAY.

Во фрейме так же могут быть размещены записи таблиц:

DEFINE {[NEW] SHARED] | [PRIVATE]} FRAME frame
  record [EXCEPT field ...]
  {[frame-phrase]}

record - буфер записи;

EXCEPT field ... - список полей записи, исключаемых из вывода во фрейме, с разделителем пробел.

Основные атрибуты FRAME:

Атрибут Аргумент Тип атрибута
(чтение/запись)
Описание
COLUMN DECIMAL чтение/запись Столбец левого верхнего угла фрейма в окне
ROW DECIMAL чтение/запись Строка левого верхнего угла фрейма в окне
CENTERED LOGICAL чтение/запись Размещает Фрейм в центре по горизонтали. По умолчанию имеет значение FALSE
DOWN INTEGER чтение/запись Используется совместно с CENTERED и определяет вертикальное положение фрейма, кол-во строк сверху.
LABELS LOGICAL чтение
SIDE-LABELS LOGICAL чтение/запись Метки (LABEL) объектов внутри фрейма располагаются слева от объектов.
BOX LOGICAL чтение/запись Окантовка фрейма. При значении FALSE аналогичен NO-BOX
NO-BOX LOGICAL чтение/запись По умолчанию фрейм имеет окантовку, указание данного атрибута снимает эту окантовку. Не может использоваться совместно с атрибутом TITLE.
TITLE CHARACTER
чтение/запись Атрибут TITLE используется для указания подписи Фрейма (заголовка) по центру в верхней части окантовки. Использование данного атрибута совместно с атрибутом NO-BOX не представляется возможным.
OVERLAY LOGICAL чтение/запись Поверх других
SCROLLABLE LOGICAL чтение/запись Возможность вертикальной прокрутки.
SENSITIVE LOGICAL чтение/запись Отражает активность фрейма, т.е. его возможность принимать управление, реагировать на события.
SIZE N BY M DECIMAL чтение/запись Размер фрейма, выраженный в символах, где N – размер по горизонтали, а M – по вертикали. Значения N и M могут быть как целочисленными, так и дробными
HIDDEN LOGICAL чтение/запись Объект TRUE - скрыт; FALSE - нет.
VISIBLE LOGICAL чтение/запись Объект TRUE - видим; FALSE - нет
DCOLOR INTEGER чтение/запись Определяет цвет объекта вне фокуса.
PFCOLOR INTEGER чтение/запись Определяет цвет объекта в фокусе.
TITLE-DCOLOR INTEGER чтение/запись Определяет цвет фона заголовка.


События FRAME:

Событие Описание
ENTRY Фокусировка объекта
LEAVE Снятие фокусировки объекта

Методы FRAME:

ENABLE ALL WITH FRAME frame.

Устанавливает значение атрибута SENSITIVE всех объектов во фрейме в TRUE.

DISABLE ALL WITH FRAME frame.

Устанавливает значение атрибута SENSITIVE всех объектов во фрейме в FALSE.


BUTTON (КНОПКА)


Синтаксис:

DEF [PRIVATE] BUTTON button-name
 
[AUTO-GO | AUTO-ENDKEY]
  [DEFAULT]
  [BGCOLOR expression]
  [CONTEXT-HELP-ID expression]
  [DCOLOR]
  [DROP-TARGET]
  [FGCOLOR expression]
  [FONT number]
  [LABEL label]
  [LIKE button]
  [size-phrase]
  [NO-FOCUS [FLAT-BUTTON]]
  {[triget-phrase]}
.

button-name – идентификатор кнопки.

AUTO-GO | AUTO-ENDKEY - указывает на то, что при нажатии на кнопку, AVM автоматически будет инициировано событие GO или ENDKEY для фрейма.

DEFAULT -

CONTEXT-HELP-ID expression - определяет целочисленное значение раздела файла подсказок.

DCOLOR expression - определяет цвет кнопки в CHUI интерфейсе.

LABEL label - надпись на кнопке.

size-phrase - определяет размеры кнопки.

{SIZE | SIZE-CHARS |  SIZE-PIXELS} width BY height

Основные атрибуты BUTTON:  

Атрибут Аргумент Тип атрибута
(чтение/запись)
Описание
COLUMN DECIMAL чтение/запись  Определяет столбец положения верхнего левого угла объекта во фрейме выраженное печатными символами.
ROW DECIMAL чтение/запись  Определяет строку положения верхнего левого угла объекта во фрейме выраженное печатными символами.
LABEL CHARACTER чтение/запись Надпись на кнопке
HELP CHARACTER чтение/запись Подсказка выводящаяся в нижней части экрана во время когда объект в фокусе
FRAME-NAME CHARACTER чтение Возвращает идентификатор фрейма в котором располагается объект
FRAME-COL DECIMAL чтение Вертикальная координата положения верхнего левого угла объекта во фрейме, выраженная печатными символами.
FRAME-ROW DECIMAL чтение Горизонтальная координата положения верхнего левого угла объекта во фрейме, выраженная печатными символами.
FRAME-X INTEGER чтение X координата положения во фрейме левого верхнего угла кнопки.
FRAME-Y INTEGER чтение Y координата положения во фрейме левого верхнего угла кнопки.
TAB-POSITION INTEGER чтение Порядковый номер навигации по TAB
HIDDEN LOGICAL чтение/запись Объект TRUE - скрыт; FALSE - нет.
VISIBLE LOGICAL чтение/запись Объект TRUE - видим; FALSE - нет
DCOLOR INTEGER чтение/запись Определяет цвет объекта вне фокуса.
PFCOLOR INTEGER чтение/запись Определяет цвет объекта в фокусе.

События BUTTON:

Событие Описание
CHOOSE Нажатие кнопки
ENTRY Фокусировка объекта
LEAVE Снятие фокусировки объекта

Методы BUTTON:

MOVE-AFTER [-TAB-ITEM] ()

MOVE-BEFOR [-TAB-ITEM] ()


Пример button_1:

DEF BUTTON button_ok     LABEL "OK".
DEF BUTTON button_cancel LABEL "Cancel".
DEF FRAME frame1 button_ok
button_cancel
WITH CENTERED.


ENABLE ALL WITH FRAME frame1.


ON CHOOSE OF button_ok

DO:
MESSAGE "Все работает" VIEW-AS ALERT-BOX INFORMATION
BUTTONS ok.

END.
ON CHOOSE OF button_cancel
DO:
MESSAGE "Выход" VIEW-AS ALERT-BOX INFORMATION
BUTTONS ok.

END.
WAIT-FOR CHOOSE OF button_cancel.

В первых двух строчках мы объявляем две кнопки: одну с именем button_ok и надписью OK, вторую с именем button_cancel и надписью Cancel:

DEF BUTTON button_ok LABEL "OK".
DEF BUTTON button_cancel LABEL "Cancel".

Далее мы объявляем фрейм с именем frame1, в котором располагаются кнопки:

DEF FRAME frame1 button_ok button_cancel WITH CENTERED.

Данный фрейм объявлен с атрибутом CENTERED, что означает, что он будет выведен в центре экрана по горизонтали.

Триггеры событий нажатий кнопок OK и Cancel описаны в следующих блоках:

ON CHOOSE OF button_ok 
DO:
    MESSAGE "Все работает" VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
END.
ON CHOOSE OF button_cancel

DO:
    MESSAGE "Выход" VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
END.

При этом на экран будут выведены соответствующие сообщения: "Все работает" и "Выход" во фреймы с заголовком INFORMATION и кнопкой ОК.

Последний оператор WAIT-FOR используется для предотвращения досрочного завершения программы и завершения ее только после наступления события нажатия кнопки button_cancel. Если не указать этот оператор, то произойдет следующее: на экране будет выведен фрейм с кнопками и, не дождавшись событий on choose of button_ok, программа завершится.


MESSAGE (СООБЩЕНИЯ)


Оператор MESSAGE используется для вывода на экран текста сообщения. Вывод текста сообщения осуществляется либо в нижней строке экрана, либо в окне предупреждений.

MESSAGE
   [COLOR color-phrase]
   {expression | SKIP [(n)]} ...
   [VIEW-AS ALERT-BOX
      [alert-type]
      [BUTTONS button-set]
      [TITLE title-string]
   ]
   [{SET | UPDATE} field
      {AS datatype | LIKE field}
      [FORMAT string]
      [AUTO-RETURN]
   ]
   [IN WINDOW window]

expression - текстовая константа или выражение определяющее текст сообщения.

MESSAGE "Минуточку... ".

SKIP(n) - добавляет n символов перевода строки в сообщении. Данная опция может применяться только совместно с опцией VIEW-AS ALERT-BOX.

ALERT-BOX - вывод сообщения осуществляется в окне предупреждений с кнопкой "OK" по умолчанию.

alert-type - тип окна предупреждения. Возможные значения типов: INFORMATION (Информация), QUESTION (вопрос), MESSAGE (сообщение), WARNING (предупреждение) и ERROR (ошибка).

BUTTONS button-set - определяет комбинацию кнопок окна предупреждения.

Возможны следующие комбинации кнопок: OK, OK-CANCEL, YES-NO, YES-NO-CANCEL RETRY-CANCEL.

Для определения выбора пользователя (нажатия той или иной кнопки) и последующей обработки события используется переменная логического типа, которая указывается с помощью оператора SET. Данная переменная может быть как объявленной ранее, так и объявленной непосредственно в операторе MESSAGE.  

DEF VAR lRes  AS LOGICAL                NO-UNDO.
DEF VAR cText AS CHAR FORMAT "x(25)" NO-UNDO.

MESSAGE "Вам кофе с сахаром?" VIEW-AS ALERT-BOX QUESTION
BUTTONS YES-NO.
SET lRes.

IF lRes THEN
cText = "Ваш кофе с сахаром!".
ELSE
cText = "Ваш кофе без сахара!".
DISPLAY cText WITH COL 30 ROW 7 NO-LABEL.

Если объявлена комбинация кнопок YES-NO-CANCEL, то при нажатии кнопки CANCEL логической переменной присваивается неизвестное значение - ?.

DEF VAR lRes  AS LOGICAL                NO-UNDO.
Def var cText AS CHAR FORMAT "x(25)" NO-UNDO.
MESSAGE "Вам кофе с сахаром?" VIEW-AS ALERT-BOX QUESTION
BUTTONS YES-NO.
SET lRes.

IF lRes THEN
cText = "Ваш кофе с сахаром".
IF lRes = FALSE THEN
cText = "Ваш кофе без сахара".
IF lRes = ? THEN
cText = "Вы отказались от кофе".
DISPLAY cText WITH COL 30 ROW 7 NO-LABEL.

TITLE title-string - задает заголовок окна предупреждения. Если определен тип окна предупреждения, то по умолчанию, заголовок будет соответствующим этому типу.


VIEW-AS ОБЪЕКТЫ


Объекты VIEW-AS представляют собой визуальные объекты ввода и изменения значений переменных различных типов данных.

Синтаксис:

DEF VAR I AS var-type VIEW-AS object-type main-object-attribute.

Здесь объявляется переменная I типа var-type представленной в виде объекта object-type. Существуют следующие типы таких объектов:

    - TOGGLE-BOX (Логический объект);
    - FILL-IN (Ввод значения переменной);
    - EDITOR (Поле ввода);
    - SELECTION-LIST (Список выбора);
    - COMBO-BOX (Выпадающий список);
    - RADIO-SET (Объект выбора);
    - SLIDER (Ползунок);
    - TEXT (Текст).

main-object-attribute – обязательные атрибуты объекта. Собственные же атрибуты объекта могут быть объявлены только непосредственно во фрейме при объявлении в нем объекта или же в коде программы посредством:

var-name:object-attribute = attribute-argument .

где:
        var-name – идентификатор переменной с которой связан объект;
        object-attribute      – атрибут объекта;
        attribute-argument – значение атрибута.

Объекты VIEW-AS как уже говорилось строятся на основе переменной, которые по своей сути тоже обладают атрибутами. Следовательно, должна быть следующая возможность объявления таких объектов:

DEF VAR I AS var-type var-attribute VIEW-AS object-type main-object-attribute.

где, var-attribute – атрибуты переменной.

Возможность такая конечно же есть, но объектом будут отработаны только те атрибуты переменной которыми может обладать сам объект. Например, объект EDITOR не имеет в списке доступных атрибутов атрибут FORMAT, поэтому если его указать в качестве атрибута переменной ошибки это не вызовет, но и объектом он отработан не будет.

Вводимые пользователем данные в объекты VIEW-AS являются по своей сути экранным буфером так называемым SCREEN-VALUE (атрибутом объектом), а не самим значением переменной. Присвоение же самой переменной значения данного буфера осуществляется оператором ASSIGN.

Хотя атрибут переменной INITIAL (начальное значение) и не входит в список атрибутов ни одного объекта VIEW-AS и указание его изначально не приведет ни к какому результату, добиться отображения начального значения в данных объектах все-таки можно. Для этого необходимо атрибуту объекта SCREEN-VALUE (экранному буферу) присвоить значение переменной предварительно объявив атрибут переменной INITIAL:

ASSIGN i:SCREEN-VALUE = i.


TOGGLE-BOX (ЛОГИЧЕСКИЙ ОБЪЕКТ)


TOGGLE-BOX - это логический объект и определяется логической переменной. Значение данной переменной зависит от атрибута данного объекта Checked, т.е. от наличия или отсутствия установленного пользователем выбора данного объекта.

Синтаксис:

DEF VAR I AS LOGICAL VIEW-AS TOGGLE-BOX.

Основные атрибуты TOGGLE-BOX:

Атрибут
Аргумент Тип атрибута
(чтение/запись)
Описание
CHECKED
LOGICAL чтение/запись Определяет признак отмечен объект или нет.
VISIBLE
LOGICAL чтение/запись Объект TRUE - видим; FALSE - нет.
HIDDEN
LOGICAL чтение/запись Объект TRUE - скрыт; FALSE - нет.
LABEL
CHARACTER чтение/запись Надпись (метка).
HELP
CHARACTER чтение/запись Подсказка выводящаяся в нижней части экрана во время когда объект в фокусе.
SENSITIVE LOGICAL чтение/запись Определяет возможность объекта быть в фокусе.
FRAME-NAME CHARACTER чтение Возвращает идентификатор фрейма в котором располагается объекта.
FRAME-COL DECIMAL чтение Вертикальная координата положения верхнего левого угла объекта во фрейме, выраженная печатными символами.
FRAME-ROW DECIMAL чтение Горизонтальная координата положения верхнего левого угла объекта во фрейме, выраженная печатными символами.
FRAME-X INTEGER чтение X - координата положения во фрейме левого верхнего угла объекта.
FRAME-Y INTEGER чтение Y - координата положения во фрейме левого верхнего угла объекта.
TAB-POSITION INTEGER чтение Порядковый номер навигации по TAB
DCOLOR INTEGER чтение/запись Определяет цвет объекта всего объекта, включая и LABEL.
PFCOLOR INTEGER чтение/запись Определяет цвет непосредственно рабочей части объекта.

События TOGGLE-BOX:

Событие Описание
VALUE-CHANGED Изменение значения
ENTRY Фокусировка объекта
LEAVE Снятие фокусировки объекта

Методы TOGGLE-BOX:

Метод Описание
   
   
   

Пример toggle-box_1:

DEF VAR i AS LOGICAL LABEL "переменная" VIEW-AS TOGGLE-BOX.
DEF FRAME frame1 i WITH ROW 5 CENTERED.
ENABLE i WITH FRAME frame1.
ON VALUE-CHANGED OF i
DO:
ASSIGN i.
IF i = TRUE THEN
MESSAGE "Отмечено"
VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.

END.
WAIT-FOR CLOSE OF THIS-PROCEDURE.

При наступлении события ON VALUE-CHANGED OF i (т.е. изменения значения атрибута CHECKED сопоставленного TOGGLE-BOX’а) присваивается значение переменной i командой ASSIGN i и если значение i равно TRUE/YES тогда выводится сообщение «Отмечено».


FILL-IN (ВВОД ЗНАЧЕНИЯ ПЕРЕМЕННОЙ)


FILL-IN, представляет собой поле ввода значения переменной любого типа. Таким объектом является сама переменная во фрейме, в котором и указываются атрибуты FILL-IN как визуального объекта, либо переменная объявленная с использованием VIEW-AS FILL-IN.

Синтаксис:

DEF VAR I AS VIEW-AS FILL-IN.

Основные атрибуты FILL-IN:

Атрибут Аргумент Тип атрибута
(чтение/запись)
Описание
VISIBLE LOGICAL чтение/запись Объект TRUE - видим; FALSE - нет.
HIDDEN LOGICAL чтение/запись Объект TRUE - скрыт; FALSE - нет.
LABEL CHARACTER чтение/запись Надпись (метка)
NO-LABEL
LOGICAL чтение/запись Без метки
SCREEN-VALUE CHARACTER чтение/запись Экранное значение объекта
HELP CHARACTER чтение/запись Подсказка выводящаяся в нижней части экрана во время когда объект в фокусе.
FRAME-NAME CHARACTER чтение Возвращает идентификатор фрейма в котором располагается объект
FRAME-COL DECIMAL чтение Вертикальная координата положения верхнего левого угла объект во фрейме, выраженная печатными символами.
FRAME-ROW DECIMAL чтение Горизонтальная координата положения верхнего левого угла объекта во фрейме, выраженная печатными символами.
FRAME-X INTEGER чтение X координата положения во фрейме левого верхнего угла объекта
FRAME-Y INTEGER чтение Y координата положения во фрейме левого верхнего угла объекта
TAB-POSITION INTEGER чтение Порядковый номер навигации по TAB
DCOLOR INTEGER чтение/запись Определяет цвет всего объекта, включая и LABEL.
FCOLOR INTEGER чтение/запись Определяет цвет непосредственно рабочей части объекта.

События FILL-IN :

Событие Описание
ENTRY Фокусировка объекта
LEAVE Снятие фокусировки объекта
VALUE-CHANGED Изменение значения

Пример fill-in_1:

DEF VAR i1 AS DEC VIEW-AS FILL-IN.
DEF VAR i2 AS DEC VIEW-AS FILL-IN.
DEF BUTTON bt_ok LABEL "=".
DEF FRAME frame1 i1
"+"
i2
bt_ok AT ROW 3 COL 20
WITH CENTERED.


i1:HELP = "Слагаемое1".

i2:HELP = "Слагаемое2".
ON LEAVE OF i1 ASSIGN i1.
ON LEAVE OF i2 ASSIGN i2.
ON CHOOSE OF bt_ok DISPLAY i1 + i2.
ENABLE ALL WITH FRAME frame1.
WAIT-FOR CHOOSE OF bt_ok.

В данном примере объявлены два объекта FILL-IN i1 и i2:

DEF VAR i1 AS DEC VIEW-AS FILL-IN.
DEF VAR i2 AS DEC VIEW-AS FILL-IN.

с атрибутами HELP:

i1:HELP = "Слагаемое1".
i2:HELP = "Слагаемое2".

Теперь посмотрим, как объекты FILL-IN могут быть получены путем объявления во фрейме переменных. Т.е сначала объявляются переменные, а потом они включаются во фрейм, тем самым, превращаясь в объекты FILL-IN.

Пример fill-in_2:

DEF VAR i1 AS DEC NO-UNDO.
DEF VAR i2 AS DEC NO-UNDO.
DEF BUTTON bt_ok LABEL "=".
DEF FRAME frame1 i1 FORMAT ">>9.99"
HELP "Слагаемое1"
"+"
i2 FORMAT ">>9.99"
HELP "Слагаемое2"
bt_ok AT ROW 3 COL 20
WITH CENTERED.


ON LEAVE OF i1 ASSIGN i1.

ON LEAVE OF i2 ASSIGN i2.
ON CHOOSE OF bt_ok DISPLAY i1 + i2.
ENABLE ALL WITH FRAME frame1.
WAIT-FOR CHOOSE OF bt_ok.

Пример fill-in_3:

DEF VAR i1 AS DEC FORMAT ">>9.99" NO-UNDO.
DEF VAR i2 AS DEC NO-UNDO.
DEF BUTTON bt_ok LABEL "=".
DEF FRAME frame1 i1 HELP "Слагаемое1"
"+"
i2 HELP "Слагаемое2"
bt_ok AT ROW 3 COL 20
WITH CENTERED.


i2:FORMAT = ">>9.99".


ON LEAVE OF i1 ASSIGN i1.

ON LEAVE OF i2 ASSIGN i2.
ON CHOOSE OF bt_ok DISPLAY i1 + i2.
ENABLE ALL WITH FRAME frame1.
WAIT-FOR CHOOSE OF bt_ok.


EDITOR (ПОЛЕ ВВОДА)


EDITOR, представляет собой многострочную область для ввода значения текстовой переменной с которой он ассоциирован. Данное поле ввода может содержать как вертикальный, так и горизонтальный scrollbar.

Синтаксис:

DEF VAR I AS CHAR VIEW-AS EDITOR INNER-CHARS N INNER-LINES M.

где:

  • I – Переменная текстового типа с которой ассоциирован EDITOR;
  • N и М определяют видимую область EDITOR шириной N символов и высотой M строк.

INNER-CHARS и INNER-LINES аргументами которых являются значения N и M являются обязательными атрибутами EDITOR’а. Т.е. их указание является обязательным при объявлении EDITOR. Без хотя бы одного из этих атрибутов EDITOR объявлен быть не может.

Основные атрибуты EDITOR:

Атрибут Аргумент Тип атрибута
(чтение/запись)
Описание
INNER-CHARS INTEGER чтение/запись Ширина видимой части выраженная в символах
INNER-LINES INTEGER чтение/запись Высота видимой части выраженная в строках
VISIBLE LOGICAL чтение/запись Объект TRUE - видим; FALSE - нет.
HIDDEN LOGICAL чтение/запись Объект TRUE - скрыт; FALSE - нет.
LABEL
CHARACTER
чтение/запись Надпись (метка).
SCREEN-VALUE CHARACTER чтение/запись Экранное значение объекта
VALIDATE Условие валидации значения
HELP
CHARACTER
чтение/запись Подсказка выводящаяся в нижней части экрана во время когда объект в фокусе.
FRAME-NAME CHARACTER чтение Возвращает идентификатор фрейма в котором располагается объект
FRAME-COL DECIMAL чтение Вертикальная координата положения верхнего левого угла рабочей области объекта во фрейме, выраженная печатными символами.
FRAME-ROW DECIMAL чтение Горизонтальная координата положения верхнего левого угла рабочей области объекта во фрейме, выраженная печатными символами.
FRAME-X INTEGER чтение X координата положения во фрейме левого верхнего угла объекта
FRAME-Y INTEGER чтение Y координата положения во фрейме левого верхнего угла объекта
TAB-POSITION INTEGER чтение Порядковый номер навигации по TAB
DCOLOR INTEGER
чтение/запись Определяет цвет объекта всего объекта, включая и label.
PFCOLOR
INTEGER
чтение/запись Определяет цвет непосредственно рабочей части объекта.

События EDITOR:

Событие Описание
ENTRY Фокусировка объекта
LEAVE Снятие фокусировки объекта

Пример editor_1:

DEF VAR address AS CHAR VIEW-AS EDITOR INNER-CHARS 50 
INNER-LINES 2.

DEF BUTTON btn-exit LABEL "Выход".
DEF FRAME frame1 address NO-LABEL SKIP
btn-exit WITH TITLE "Адрес" AT ROW 7 COL 15.


ON LEAVE OF address
DO:

ASSIGN address.
MESSAGE address VIEW-AS ALERT-BOT INFORMATION
BUTTONS OK
TITLE "Ваш адрес".

END.
ENABLE ALL WITH FRAME frame1.
WAIT-FOR CHOOSE OF btn-exit.

Аргументы атрибутов FRAME-ROW, FRAME-COL хотя и являются DECIMAL типа, но в текстовой среде (CHUI) могут принимать только целочисленные значения. Если значение данных аргументов являются дробными, они автоматически округляются до целого значения.

Аргументы атрибутов FRAME-X и FRAME-Y в CHUI выражаются печатными символами в отличие от графической среды (GUI), где аргументы данных атрибутов выражаются пикселями.

DEF VAR field1 AS CHAR VIEW-AS EDITOR INNER-CHARS 50
INNER-LINES 2.
DEF FRAME frame1
field1 LABEL "Поле1"
AT ROW 2.1 COL 3.4
DCOLOR 2
WITH SIDE-LABELS.

VIEW FRAME frame1.

DISPL field1:FRAME-X field1:FRAME-COL.
DISPL field1:FRAME-Y field1:FRAME-ROW.

Результат: 10      10.00          2       2.00

Как мы видим в CHUI независимо ни от чего значения аргументов атрибутов FRAME-X и FRAME-COL так же, как и значения аргументов атрибутов FRAME-Y и FRAME-ROW совпадают между собой.

При объявлении объекта мы указали его местоположение по горизонтали равное 3.4 печатных символа. Данное значение было округлено до 3, но при этом возвращенные значения FRAM-X и FRAME-COL являются равными 10. Это связано с тем, что указывая положение объекта во фрейме с помощью атрибутов ROL и СОL мы задаем положение всего объекта включая и LABEL. При этом атрибуты FRAME-X, FRAME-COL и FRAME-Y, FRAME-ROL возвращают положение рабочей части объекта, т.е. в данном случае непосредственно поля ввода без учета LABLE, дописываемого ему автоматически двоеточия и пробела между LABLE и полем ввода.


SELECTION-LIST (ВЫБОР СТРОК)


SELECTION-LIST используется для организации выбора строк, как в SINGLE единичном) режиме, когда выбирается только одна строка из списка, так и в MULTIPLE режиме (множественном), когда можно выбрать несколько строк из представленных.

Синтаксис:

DEF VAR I AS CHAR VIEW-AS SELECTION-LIST select_type LIST-ITEMS "string1","string2",…,"stringN" INNER-CHARS N INNER-LINES M.

Здесь:

  • I – Переменная текстового типа с которой ассоциирован selection-list;
  • label_name – ярлык переменной;
  • select_type – тип выбора строк, может принимать значение SINGLE для единичного выбора и MULTIPLE для множественного. Если тип выбора не  указан, то по умолчанию принимается значение SINGLE;
  • stringN – строка выбора;
  • N – Количество символов в строке определяющее ширину области выбора;
  • M – Количество строк определяющее высоту области выбора.

 Основные атрибуты SELECTION-LIST:

 Атрибут Аргумент Тип атрибута
(чтение/запись)
Описание
LIST-ITEMS CHARCTER чтение/запись Список значений (строк) выбора
INNER-CHARS INTEGER чтение/запись Ширина видимой части выраженная в символах
INNER-LINES INTEGER чтение/запись Высота видимой части выраженная в строках
SINGLE LOGICAL чтение/запись Режим единичного выбора
MULTIPLE LOGICAL чтение/запись Режим множественного выбора
VISIBLE LOGICAL чтение/запись Объект TRUE - видим; FALSE - нет.
HIDDEN LOGICAL чтение/запись Объект TRUE - скрыт; FALSE - нет.
LABEL
CHARACTER
чтение/запись Надпись (метка).
SCREEN-VALUE  CHARACTER
чтение/запись Экранное значение объекта
VALIDATE
HELP
CHARACTER 
чтение/запись Подсказка выводящаяся в нижней части экрана во время когда объект в фокусе.
FRAME-NAME CHARACTER чтение Возвращает идентификатор фрейма в котором располагается
FRAME-COL DECIMAL чтение Вертикальная координата положения верхнего левого угла объекта во фрейме, выраженная печатными символами.
FRAME-ROW DECIMAL чтение Горизонтальная координата положения верхнего левого угла объекта во фрейме, выраженная печатными символами.
FRAME-X INTEGER чтение X координата положения во фрейме левого верхнего угла
FRAME-Y INTEGER чтение Y координата положения во фрейме левого верхнего угла
TAB-POSITION - чтение Порядковый номер навигации по TAB
DCOLOR INTEGER
чтение/запись Определяет цвет объекта всего объекта, включая и LABEL.
PFCOLOR
INTEGER
чтение/запись Определяет цвет непосредственно рабочей части объекта.

События SELECTION-LIST:

Событие Описание
VALUE-CHANGED Изменение значения
LEAVE Снятие фокусировки объекта
ENTRY Фокусировка объекта
DEFAULT-ACTION  

Методы SELECTION-LIST :

Метод Описание
ADD-FIRST() 
Добавление элемента в начало LIST-ITEMS
ADD-LAST() Добавление элемента в конец LIST-ITEMS
ENTRY  
DELETE  

Пример selection-list_1:

DEF VAR sel_day AS CHAR VIEW-AS SELECTION-LIST MULTIPLE LIST-ITEMS 
"Понедельник","Вторник","Среда","Четверг","Пятница","Суббота","Воскресенье"

INNER-CHARS 15 INNER-LINES 7.
DEF BUTTON btn-exit LABEL "Выход".
DEF FRAME frame1 sel_day NO-LABEL
btn-exit AT ROW 12 COL 12
WITH CENTERED NO-UNDERLINE.


ON LEAVE OF sel_day
DO:

ASSIGN sel_day.
MESSAGE "Выбраны дни:" sel_day VIEW-AS ALERT-BOX INFORMATION
BUTTONS OK.

END.
ENABLE ALL WITH FRAME frame1.

WAIT-FOR CHOOSE OF btn-exit.

При наступлении события LEAVE (снятие фокусировки) SELECTION-LIST оператором ASSIGN sel_day текстовой переменой sel_day присваивается значение выбранных значений. Так как в данном примере объявлен список в режиме multiple (множественный выбор), то при выборе более одного значения переменной присваивается значение, состоящее из всех отмеченных значений разделенных запятой.

В примере selection-list_1 список LIST-ITEMS известен заранее и указан при описание SELECTION-LIST . Иногда возникают такие ситуации когда данный список заранее не известен, например если необходимо использовать в качестве возможных вариантов выбора SELECTION-LIST значений одного из полей таблицы, или например, необходимо иметь возможность изменять данный список в процессе выполнения приложения.

Для решения данной задачи воспользуемся методом ADD-LAST либо ADD-FIRST .

Пример selection-list_2:

DEF VAR addItem AS CHAR NO-UNDO.
DEF VAR listItems AS CHAR VIEW-AS SELECTION-LIST
INNER-CHARS 15 INNER-LINES 7.

DEF BUTTON btn-exit LABEL "Выход".
DEF FRAME frame1 listItems NO-LABEL SKIP
addItem LABEL "Ввод"
btn-exit AT ROW 12 COL 12
WITH SIDE-LABELS CENTERED NO-UNDERLINE .

ON LEAVE OF addItem IN FRAME frame1
DO:
ASSIGN addItem.
listItems:add-last(addItem).
addItem:SCREEN-VALUE = "".
END.

Таким образом мы имеем изначально пустой SELECTION-LIST - listItems, а так же поле addItem, при покидании поля которого введенное в него значение добавляется в конец списка listItems. Если бы мы вместо метода ADD-LAST использовали метод ADD-FIRST, то новые значения добавлялись в начало списка SELECTION-LIST.


COMBO-BOX (ВЫПАДАЮЩИЙ СПИСОК)


Представляет собой поле ввода данных посредственно выбора из выпадающего списка готовых значений введенных при объявлении COMBO-BOX. COMBO-BOX ассоциируется с переменной которой будет присвоено введенное (выбранное) значение.

Синтаксис:

DEF VAR I AS var_type LABEL label_name VIEW-AS COMBO-BOX LIST-ITEMS "string1","string2",…,"stringN"  INNER-LINES M.

где: 

  • I – Переменная с которой ассоциирован COMBO-BOX;
  • var_type – тип переменной I;
  • label_name – ярлык переменной;
  • stringN – N-ая строка выбора;
  • M – Количество строк определяющее высоту области выбора.

Ширина области COMBO-BOX определяется форматом переменной I.

 Атрибуты:

Атрибут Аргумент  Тип атрибута
(чтение/запись) 
Описание
COLUMN DECIMAL чтение/запись Определяет столбец положения верхнего левого угла объекта во фрейме выраженное печатными символами.
ROW DECIMAL чтение/запись Определяет строку положения верхнего левого угла объекта во фрейме выраженное печатными символами.
LIST-ITEMS CHARACTER чтение/запись Список значений выбора
INNER-LINES INTEGER чтение/запись Определяет высоту видимой области объекта
FORMAT CHARACTER чтение/запись
SCREEN-VALUE  CHARACTER чтение/запись Экранное значение объекта
SENSETIVE LOGICAL чтение/запись Определяет возможность объекта быть в фокусе.
LABEL CHARACTER  чтение/запись Надпись (метка).
HELP CHARACTER  чтение/запись Подсказка выводящаяся в нижней части экрана во время когда объект в фокусе.
FRAME-NAME CHARACTER чтение Возвращает идентификатор фрейма в котором располагается
FRAME-COL DECIMAL чтение Вертикальная координата положения верхнего левого угла объекта во фрейме, выраженная печатными символами. Значение может быть дробным.
FRAME-ROW DECIMAL чтение Горизонтальная координата положения верхнего левого угла объекта во фрейме, выраженная печатными символами. Значение может быть дробным.
FRAME-X INTEGER чтение X координата положения во фрейме левого верхнего угла
FRAME-Y INTEGER чтение Y координата положения во фрейме левого верхнего угла
TAB-POSITION INTEGER чтение Порядковый номер навигации по TAB
HIDDEN  LOGICAL чтение/запись Объект скрыт
VISIBLE  LOGICAL чтение/запись Объект видим
DCOLOR INTEGER чтение/запись Определяет цвет объекта всего объекта, включая и LABEL.
PFCOLOR  INTEGER чтение/запись Определяет цвет непосредственно рабочей части объекта (окошка отметки).

События:

Событие Описание
VALUE-CHANGED Изменение значения
LEAVE Снятие фокусировки объекта
ENTRY Фокусировка объекта

Пример Combo-box_1:

DEF VAR sel_town AS CHAR FORMAT "x(15)" LABEL "Город:" VIEW-AS COMBO-BOX
LIST-ITEMS "Москва","Самара", "Волгоград", "Екатеринбург", "Смоленск",
"Воронеж", "Саратов", "Калуга" INNER-LINES 3.
DEF BUTTON btn-exit LABEL "Выход".
DEF FRAME frame1 sel_town btn-exit AT ROW 6 COL 12 WITH CENTERED
NO-UNDERLINE.


ON LEAVE OF sel_town
DO:

ASSIGN sel_town.
MESSAGE "Выбран город:" sel_town
VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.

END.
ENABLE ALL WITH FRAME frame1.WAIT FOR CHOOSE OF btn-exit.

Допустим мы хотим чтобы при запуске данного кода COMBO-BOX имел какое-нибудь начальное значение.

Пример Combo-box_2:

DEF VAR sel_town AS CHAR FORMAT "x(15)" 
INIT "Самара"
LABEL "Город:"
VIEW-AS COMBO-BOX
LIST-ITEMS "Москва","Самара", "Волгоград", "Екатеринбург", "Смоленск",

"Воронеж", "Саратов", "Калуга" INNER-LINES 3.
DEF BUTTON btn-exit LABEL "Выход".
DEF FRAME frame1 sel_town btn-exit AT ROW 6 COL 12 WITH CENTERED
NO-UNDERLINE.


ON LEAVE OF sel_town
DO:

ASSIGN sel_town.
MESSAGE "Выбран город:" sel_town
VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.

END.
ASSIGN sel_town:SCREEN-VALUE = sel_town.
ENABLE ALL WITH FRAME frame1.
WAIT-FOR CHOOSE OF btn-exit.


RADIO-SET (ОБЪЕКТ ВЫБОРА)


RADIO-SET представляет собой подобие SELECTION LIST и TOGGLE-BOX. С помощью данного объекта организовывается выбор значения из заранее заготовленных вариантов посредством отметки нужного.

Синтаксис:

DEF VAR i AS INT VIEW-AS RADIO-SET RADIO-BUTTONS "text1",N1, "text2",N2, ... "textN",Nn.

где:

  • textN – описание варианта n;
  • Nn – значение переменной варианта n

Атрибуты:

Атрибут Аргумент  Тип атрибута
(чтение/запись)
Описание
RADIO-BUTTONS CHARACTER,
INTEGER
Описание вариантов выбора
SCREEN-VALUE INTEGER  чтение/запись Экранное значение
HORIZONTAL  LOGICAL  чтение/запись Горизонтальное расположение
DELIMETER  LOGICAL запись Вставка разделителя
EXPAND запись
VISIBLE LOGICAL
чтение/запись Объект видим
HIDDEN LOGICAL
чтение/запись Объект скрыт
LABEL
 CHARACTER 
чтение/запись Надпись (метка).
HELP
 CHARACTER 
чтение/запись Подсказка выводящаяся в нижней части экрана во время когда объект в фокусе.
FRAME-NAME CHARACTER чтение Возвращает идентификатор фрейма в котором располагается объект
FRAME-COL DECIMAL чтение Вертикальная координата положения верхнего левого угла объекта во фрейме, выраженная печатными символами.
FRAME-ROW INTEGER чтение Горизонтальная координата положения верхнего левого угла объекта во фрейме, выраженная печатными символами.
FRAME-X INTEGER чтение X  координата положения во фрейме левого верхнего угла
FRAME-Y INTEGER чтение Y  координата положения во фрейме левого верхнего угла
TAB-POSITION INTEGER чтение Порядковый номер навигации по TAB
DCOLOR INTEGER 
чтение/запись Определяет цвет объекта всего объекта, включая и label.
PFCOLOR INTEGER чтение/запись  Определяет цвет непосредственно рабочей части объекта (окошка отметки).

События:

Событие Описание
VALUE-CHANGED Изменение значения
LEAVE Снятие фокусировки объекта
ENTRY Фокусировка объекта

Пример Radio-set_1.

DEF VAR answ AS INT INIT 1 LABEL "Сколько ног у коровы?" VIEW-AS
RADIO-SET RADIO-BUTTONS "Одна", 1, "две", 2, "Три", 3, "Четыре", 4.
DEF BUTTON btn-exit LABEL "Выход".
DEF FRAME frame1 SKIP(2) answ SKIP(2) btn-exit WITH CENTERED
SIDE-LABELS.
ON VALUE-CHANGED OF answ
DO:

ASSIGN answ.
MESSAGE "Ответ: " + STRING(answ).
END.
DISPLAY answ WITH FRAME frame1.

MESSAGE "Ответ: " + STRING(answ).
ENABLE ALL WITH FRAME frame1.
WAIT-FOR CHOOSE OF btn-exit.

По своей сути:

DISPLAY answ WITH FRAME frame1.

аналогичен

ASSIGN answ:SCREEN-VALUE = answ.


SLIDER (ПОЛЗУНОК)


SLIDER представляет собой графический объект указания значения переменной INTEGER типа в виде ползунка.

Синтаксис:

DEF VAR i AS INT VIEW-AS SLIDER MIN-VALUE min MAX-VALUE max HORIZONTAL SIZE-CHARS N BY P.

Атрибуты:

Атрибут Аргумент Тип атрибута
(чтение/запись)
Описание
HORIZONTAL LOGICAL чтение/запись Определяет горизонтальное расположение SLIDER
SCREEN-VALUE INTEGER чтение/запись Экранное значение объекта
MIN-VALUE INTEGER чтение/запись Начальное положение (значение)
MAX-VALUE INTEGER чтение/запись Конечное положение (значение)
NO-CURRENT-VALUE
запись
SENSITIVE LOGICAL чтение/запись
VISIBLE LOGICAL
чтение/запись
Объект видим
HIDDEN LOGICAL
чтение/запись
Объект скрыт
LABEL
CHARACTER
чтение/запись
Надпись (метка).
HELP
CHARACTER
чтение/запись
Подсказка выводящаяся в нижней части экрана во время когда объект в фокусе.
FRAME-NAME CHARACTER чтение Возвращает идентификатор фрейма в котором располагается объект
FRAME-COL DECIMAL чтение Вертикальная координата положения верхнего левого угла объекта во фрейме, выраженная печатными символами.
FRAME-ROW DECIMAL чтение Горизонтальная координата положения верхнего левого угла объекта во фрейме, выраженная печатными символами.
FRAME-X INTEGER чтение X координата положения во фрейме левого верхнего угла
FRAME-Y INTEGER чтение Y координата положения во фрейме левого верхнего угла
TAB-POSITION INTEGER чтение Порядковый номер навигации по TAB
DCOLOR INTEGER
чтение/запись
Определяет цвет объекта всего объекта, включая и LABEL.
PFCOLOR INTEGER
чтение/запись
Определяет цвет непосредственно рабочей части объекта.

События:

Событие Описание
VALUE-CHANGED Изменение значения
LEAVE Снятие фокусировки объекта
ENTRY Фокусировка объекта

Пример Slider_1:

DEF VAR x AS INT INIT 1 VIEW-AS SLIDER MIN-VALUE 1 MAX-VALUE 100
HORIZONTAL SIZE-CHARS 30 BY 2.
DEF BUTTON btn-reset LABEL "Сброс".

DEF BUTTON btn-exit LABEL "Выход".
DEF FRAME frame1 SKIP(5)
x NO-LABEL
AT ROW 2 COLUMN 1 SKIP(2)
btn-reset
SKIP(1)
btn-exit
WITH CENTERED.

ON VALUE-CHANGED OF x ASSIGN x.

ON CHOOSE OF btn-reset
DO:

DEF VAR i AS INT.
DO i = x TO 1 BY -1:
x = i.
DISPLAY x WITH FRAME frame1.
END.
END.
ENABLE ALL WITH FRAME frame1.
WAIT-FOR CHOOSE OF btn-exit.


TEXT (ТЕКСТ)


Text единственный VIEW-AS объект не предназначенный для ввода значения переменной, а использующийся только для отображения статического текста являющегося значением переменной текстового типа.

Синтаксис:

DEF VAR i AS CHAR VIEW-AS TEXT.


Атрибуты:

Атрибут Аргумент Тип атрибута
(чтение/запись)
Описание
SCREEN-VALUE CHARACTER чтение/запись Экранное значение
VISIBLE LOGICAL чтение/запись Объект видим
HIDDEN LOGICAL чтение/запись Объект скрыт
LABEL CHARACTER чтение/запись Надпись (метка).
HELP CHARACTER
чтение/запись Подсказка выводящаяся в нижней части экрана во время когда объект в фокусе.
FRAME-NAME CHARACTER чтение Возвращает идентификатор фрейма в котором располагается объект
FRAME-COL DECIMAL чтение Вертикальная координата положения верхнего левого угла объекта во фрейме, выраженная печатными символами.
FRAME-ROW DECIMAL чтение Горизонтальная координата положения верхнего левого угла объекта во фрейме, выраженная печатными символами.
FRAME-X INTEGER чтение X  координата положения во фрейме левого верхнего угла объекта
FRAME-Y INTEGER чтение Y  координата положения во фрейме левого верхнего угла объекта
TAB-POSITION INTEGER чтение Порядковый номер навигации по TAB
DCOLOR INTEGER
чтение/запись
Определяет цвет всего объекта, включая и LABEL.
PFCOLOR INTEGER
чтение/запись Определяет цвет непосредственно рабочей части объекта.

События:

Событие Описание
VALUE-CHANGED Изменение значения
LEAVE Снятие фокусировки объекта
ENTRY Фокусировка объекта
Вы здесь: Главная Основы ABL ОБЪЕКТЫ ИНТЕРФЕЙСА