к оглавлению

КЛАРИОH. Справочное руководство

ГЛАВА 9 - Команды обработки экранов

Процедуры работы с экраном.................................. 9-1
     ACCEPT (обработчик полей экрана)....................... 9-1
     ALERT (установка клавиши завершения поля).............. 9-3
     BEEP (звуковой сигнал динамиком)....................... 9-3
     CLOSE (закрыть текущий экран).......................... 9-4
     DISABLE (запретить выбор поля и затемнить его)......... 9-5
     DISPLAY (вывести USE-переменные на экран).............. 9-6
     ENABLE (разрешить выбор затемненного ранее поля)....... 9-7
     ERASE (очистить поле на экране и его USE-переменную)... 9-8
     GETSTYLES (считать Коды Цветовых Стилей из файла)...... 9-9
     HELP (доступ к окну подсказки)......................... 9-11
     IDLE (периодически вызываемая процедура)............... 9-12
     LOADSYMBOLS (загрузка псевдографики)................... 9-13
     OPEN (открыть экран для обработки)..................... 9-14
     SELECT (выбрать поле для обработки).................... 9-15
     SETAREA (установить размер виртуального экрана)........ 9-16
     SETMSG (задать строку сообщений экрана)................ 9-17
     SETSTYLES (установить Коды Цветовых Стилей)............ 9-18
     SHOWIMAGE (показать .PCX или .GIF)..................... 9-19
     UPDATE (записать данные с экрана в USE-переменные)..... 9-20
     USESYMBOLS (графические мышка, кнопки и рамочки)....... 9-21

Функции работы с экраном.................................... 9-22
     CHOICE (относительная позиция элемента)................ 9-22
     COL (номер столбца).................................... 9-23
     COLS (число столбцов).................................. 9-24
     CONTENTS (содержимое USE-переменной)................... 9-25
     FIELD (последнее завершенное поле)..................... 9-26
     FIELDS (число полей на экране)......................... 9-27
     REFER (было обращение к полю или нет).................. 9-27
     ROW (номер строки)..................................... 9-28
     ROWS (число строк)..................................... 9-29
     SELECTED (выбранное для обработки поле)................ 9-30
     STYLES (возвращает внутренний массив Цветовых Стилей).. 9-31

		  ПРОЦЕДУРЫ РАБОТЫ С ЭКРАНОМ

----------------------------------------------------------------
ACCEPT                                 (обработчик полей экрана)
================================================================
             ACCEPT
----------------------------------------------------------------

ACCEPT ожидает от оператора  (человека :) ввода в  экранные поля
или выбора из PULLDOWN.

В PULLDOWN-структуре, ACCEPT производит внутреннюю обработку вы-
падающих подменю. Из полей типа ITEM, могут быть выбраны  только
те, которые не запрещены оператором DISABLE.  PULLDOWN-структура
завершается только если был выбран элемент типа ITEM. По  завер-
шении, функция FIELD возвращает номер поля для данного ITEM.

В SCREEN-структурах, ACCEPT инициирует ввод в выбранное в данный
момент поле. По умолчанию, выбор полей идет в том порядке, в ко-
тором они описаны в SCREEN-структуре. Можно, но не  обязательно,
выбирать конкретные поля  оператором SELECT. Выбраны  могут быть
только те поля, которые имеют USE-переменную, НЕ имеют  атрибута
SKIP и не запрещены оператором DISABLE.
(С.П.А. -  в дальнейшем,  я буду  писать не  "запрещены о...", а
просто "DISABLED" - англ. ЗАПРЕЩЕНЫ)

Для полей  ENTRY и  TEXT, ACCEPT  подсвечивает поле,  показывает
USE-переменную, высвечивает курсор, разрешает ввод с  клавиатуры
и ждет действий оператор. Когда поле завершено нормально (не  по
ALERT-клавише), то введенное значение деформатируется,  согласно
шаблону поля, и автоматически переписывается в USE-переменную.

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

Для полей типа PAUSE,ACCEPT показывает параметр оператора PAUSE,
разрешает ввод  с клавиатуры  и ждет  нажатия на  клавищу. Любая
клавиша завершит это  поле, за исключением  ESC или BackTAB  для
НЕ-CUA экранов.

ACCEPT производит внутреннюю обработку ESC и BackTAB только  для
НЕ-CUA экранов.  Esc или  BackTab заставляют  ACCEPT выбрать для
ввода предыдущее  поле, или  поле, заданное  атрибутом ESC. Если
такого поля нет, то ACCEPT издаст звуковой сигнал и останется на
том же поле.

ACCEPT также проводит внутреннюю обработку полоски-курсора в по-
лях типа OPTION STRING, OPTION RADIO, POINT и в листбоксах  (без
атрибута IMM) как для CUA- так и для НЕ-CUA экранов.

Пример:

Screen SCREEN(5,40),PRE(Scr),COLOR(1),ZOOM,CUA,SHADOW
          ROW(2,5) ENTRY(@N3),USE(Ctl:Code)
          ROW(3,5) ENTRY(@S30),USE(Ctl:Name)
          ROW(4,15)BUTTON('OK'),USE(?OkButton),KEY(EnterKey)
          ROW(4,25)BUTTON('Отмена'),USE(?CanxButton),KEY(EscKey)
       .
       CODE
       OPEN(Screen)
       LOOP
         ACCEPT                            !Ввод - в каждое поле
         CASE FIELD()
         OF ?OkButton
           EXECUTE DiskAction
             ADD(Control)
             PUT(Control)
             DELETE(Control)
           .
           BREAK
         OF ?CanxButton
           IF KEYCODE() EscKey THEN RETURN.
       . .

----------------------------------------------------------------
ALERT                        (установка клавиши завершения поля)
================================================================
             ALERT([first-keycode][,last-keycode])
----------------------------------------------------------------

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

last-keycode        Аналогично first-keycode, но является  ВЕРХ-
                    ним пределом в диапазоне кодов клавиш.

ALERT задает клавишу или ВКЛЮЧАЮЩИЙ диапазон клавиш, как клавишу
завершения поля. (С.П.А. - говоря по-русски, ALERT "взводит" кла
вишу(и). Поэтому, в дальнейшем, я так и буду говорить - "взведен
ные клавиши" или "ALERT-клавиши"). Оператор ALERT без параметров
отключает все ALERT-клавиши (клавиши, взведенные атрибутом  ALRT
для полей экрана НЕ отменяются).

Любая клавиша, или комбинация клавиш, имеющая код,  может  стать
параметром оператора ALERT. Если поле завершено  ALERT-клавишей,
то его USE-переменная НЕ обновляется, для обновления используйте
оператор UPDATE.

Пример:

   ALERT                        !Отменить все взведенные клавиши
   ALERT(F1Key,F12Key)          !Взвести все F-клавиши
   ALERT(279)                   !Взвести "клавишу" Ctrl-ESC

См. также: UPDATE

----------------------------------------------------------------
BEEP                                 (звуковой сигнал динамиком)
================================================================
             BEEP([частота][,длительность])
----------------------------------------------------------------

частота             Числовая константа,переменная или выражение,
                    дающее частоту тона. Если ЧАСТОТА не задана,
                    подразумевается 150hz.
длительность        Числовая константа,переменная или выражение,
                    дающее время (в сотых долях секунды) звуча-
                    ния сигнала. Если не задана, то подразумева-
                    ется 16 сотых секунды.

Оператор BEEP  заставляет динамик  компьютера издать  звук. Если
ЧАСТОТА=0 (звука нет), то BEEP становится эффективным  средством
для паузы в течении заданного времени, независимо от железа.

Пример:

 IF ERRORCODE()   !Блин! Неужели ошибка?
   BEEP(200,100)  !  ну тогда длинно бибикнуть
   STOP(ERROR())  !  остановиться для вывода сообщения об ошибке
 .                !Конец оператора IF
 BEEP(0,200)      !Просто пауза аж на целых две секунды!

----------------------------------------------------------------
CLOSE                                    (закрыть текущий экран)
================================================================
             CLOSE(метка)
----------------------------------------------------------------

метка               Метка структуры SCREEN или PULLDOWN.

CLOSE прекращает обработку текущего SCREEN или PULLDOWN. Память,
занятая текущим экраном освобождается  при его закрытии. Если  у
текущего экрана были заданы параметры СТРОК и СТОЛБЦОВ, то будет
восстановлено закрытое им изображение.

Пример:

    CLOSE(MenuScr)      !Закрыть экран с меню
    CLOSE(CustEntry)    !Закрыть экран ввода данных о покупателе

----------------------------------------------------------------
DISABLE                   (запретить выбор поля и затемнить его)
================================================================
             DISABLE(first field [,last field])
----------------------------------------------------------------

first field         Номер или EQUATE-метка поля или элемента ме-
                    ню для отдельного поля или для первого  поля
                    из диапазона полей.

last field          То же, что и FIRST FIELD, но для  последнего
                    поля из диапазона поле.

Оператор DISABLE запрещает ввод в поле или в диапазон полей экра
на или PULLDOWN-меню.  Поля экрана должны  иметь USE-переменные.
Когда поле запрещено, оно отображается в цвете, задаваемом треть
им параметро атрибута COLOR, связанного с ним, и оператор не мо-
жет вводить данные  в такое поле.  DISABLE влияет не  целиком на
PULLDOWN, а только на его элементы (ITEM).

Пример:

Screen SCREEN(5,40),PRE(Scr).COLOR(l),ZOOM,CUA,SHADOW
         ROW(2,5) ENTRY(@N3),USE(Ctl:Code)
         ROW(3,S) ENTRY(@S30),USE(Ctl:Name)
         ROW(4,15) BUTTON('OK').USE(?OkButton),KEY(EnterKey)
         ROW(4,25) BUTTON('Cancel'),USE(?CanxButton).KEY(EscKey)
       .

       CODE
       OPEN(Screen)
       DISABLE(?Ctl:Code)              !Запретить поле
       DISABLE(?Ct]:Code,?Ctl:Name)    !Запретить диапазон полей
       DISABLE(2)                      !Запретить второе по сче-
       				       !  ту поле

PuIlDown  PULLDOWN
            MENU('Выход'),USE(?FirstMenu)
              ITEM('Выход в Dos'),USE(?FirstItem)
            .
            MENU('Параметры')
              ITEM('Обработать запись'),USE(?ProcRec)
              ITEM('Удалить запись'),USE('DelRec')
          . .
          CODE
          OPEN(PuIlDown,1)
          DISABLE(?FirstItem)
                   !Дезактивировать первый пункт меню в PULLDOWN
          SomeProcedure           !  и выполнить некую процедуру
          ENABLE(?FirstItem)      !Снова активировать пункт меню

См. также: ENABLE

----------------------------------------------------------------
DISPLAY                        (вывести USE-переменные на экран)
================================================================
             DISPLAY(first field [,last field])
----------------------------------------------------------------

first field         Номер или EQUATE-метка поля или элемента ме-
                    ню для отдельного поля или для первого  поля
                    из диапазона полей.

last field          То же, что и FIRST FIELD, но для  последнего
                    поля из диапазона поле.

DISPLAY записывает  значения USE-переменных  в связанные  с ними
поля текущего экрана. DISPLAY  без параметров, выводит на  экран
все USE-переменные. Если задано только FIRST FIELD, то будет вы-
ведено значение USE-переменной  только для заданного  поля. Если
заданы и FIRST и LAST FIELD, то будут показаны значения всех USE
переменных в диапазоне FIRST FIELD..LAST FIELD включительно.

Пример:

  DISPLAY                    !Показать все поля
  DISPLAY(2)                 !Показать поле номер 2
  DISPLAY(3,7)               !Показать поля с 3 по 7
  DISPLAY(?MenuField)        !Показать поле-меню
  DISPLAY(?TextBlock,?Pause) !Показать поля с TextBlock по Pause

См. также: EQUATE-метки полей, UPDATE, ERASE

----------------------------------------------------------------
ENABLE                 (разрешить выбор затемненного ранее поля)
================================================================
             ENABLE(first field [,last field])
----------------------------------------------------------------

first field         Номер или EQUATE-метка поля или элемента ме-
                    ню для отдельного поля или для первого  поля
                    из диапазона полей.

last field          То же, что и FIRST FIELD, но для  последнего
                    поля из диапазона поле.

Оператор ENABLE вновь активизирует поле или диапазон полей,  ко-
торые были запрещены  оператором DISABLE. Реактивированное  поле
вновь доступно оператору для ввода.

Пример:
SomeScreen PROCEDURE
Screen SCREEN,COLOR(0)
         ROW(2,3) ENTRY(@N4),USE(Fieldl),COLOR(0,1,2)
         ROW(3,3) ENTRY(@N4),USE(Field2),COLOR(0,1.2)
       .
       CODE
       OPEN(Screen)
       DISABLE(?Field2)               !Field2 дезактивировано
       IF Ctl:Password = 'Supervisor'
         ENABLE(?Field2)              !Реактивируем Field2
       .

SomeMenu PROCEDURE
PuIlDown PULLDOWN
           MENU('Quit'),USE(?FirstMenu)
             ITEM('Exit to Dos'),USE(?FirstItem)
           .
           MENU('Options')
             ITEM('Process Record'),USE(?ProcRec)
             ITEM('Delete Record'),USE('DelRec')
         . .

         CODE
         DISABLE(?FirstItem)    !Запретить первый пункт меню в
                                !  PULLDOWN
         SomeProcedure          !  и что-то сделать
         ENABLE(?FirstItem)     !Снова активизировать этот пункт

См. также: DISABLE

----------------------------------------------------------------
ERASE  (очистить поле(я) на экране и его(их) USE-переменную(ые))
================================================================
             ERASE([first field][,last field])
----------------------------------------------------------------

first field         Номер или EQUATE-метка поля или элемента ме-
                    ню для отдельного поля или для первого  поля
                    из диапазона полей.

last field          То же, что и FIRST FIELD, но для  последнего
                    поля из диапазона поле.

ERASE очищает поля  экрана и соответствующие  им USE-переменные.
ERASE без  параметров очищает  все поля  на экране.  Если задано
только first field, то ERASE очистит конкретную USE-переменную и
связанное с ней поле. Если заданы и first и last field, то будут
очищены поля и USE-переменные в диапазоне от first field до last
field включительно.

Пример:

ERASE(?)                !Очистить текущее поле

ERASE                   !Очистить все поля на экране

ERASE(3,7)              !Очистить поля с 3 по 7

ERASE(?Name,?Zip)       !Очистить все от ИМЕНИ до ИНДЕКСА

ERASE(?City.?City+2)    !Очистить ГОРОД и два поля после него

См. также: EQUATE-метки полей

----------------------------------------------------------------
GETSTYLES                (считать Коды Цветовых Стилей из файла)
================================================================
             GETSTYLES([файл])
----------------------------------------------------------------

файл                Строковая константа или переменная  содержа-
                    щая  спецификацию  файла  с  Кодами Цветовых
                    Стилей. Если этот параметр опущен, то  будет
                    установлен стандартный набор цветов.

GETSTYLES читает файл  стилей и присваивает  внутреннему массиву
Цветовых Стилей значения из этого файла. Если файл не найден, то
GETSTYLES игнорируется и внеутренний массив кодов цветовых  сти-
лей остается неизмененным.

Массив кодов цветовых стилей это внутренний 256-байтный  массив,
который хранит текущие коды цветовых стилей. Его элементы  нуме-
руются от 0 до  255. Каждый элемент инициализируется  значением,
равным его номеру  (элемент 0=0, элемент  1=1..элемент 255=255).
Каждый атрибут для SCREEN and PULLDOWN, который использует  коды
цветовых стилей, обращается к этому массиву и определяет настоя-
щие цвета дисплея, хранящиеся в элементе массива.

file это текстовый ASCII-файл.  Каждая строка содержит один  Код
Цветового Стиля  в четырех  полях, разделенных  запятыми. Первое
поле - номер элемента внутреннего массива. Второе - Код Цветово-
го Стиля для данного элемента (ТОЛЬКО десятичный а НЕ 16ричный!)
при наличии цветного дисплея. Третье поле это код цвета для  мо-
нохромного дисплея,и четвертое  поле - необязательное  описание.
Например, файл стилей может выглядеть так:

            0,0,0,Черный на Черном
            1,112,112,Окно на экране
            2,63,112,Заголовок экрана
            3,115,7,Рамка экрана
            4,113,7,Нормальный PROMPT
            5,116,7,Текущий PROMPT
            6,127,112,Горячая клавиша в PROMPT
            7,127,112,Горячая клавиша в текущем PROMPT
            8,126,7,Поле для ввода
            9,7,112,Текущее поле для ввода

В файле стилей  может быть от  1 до 256  строк и они  не обязаны
распполагаться по  порядку номеров  элементов. Изменяться  будут
только те элементы массива, которые указаны в файле.

Считая, что есть цветной дисплей и используя вышеприведенный
файл, атрибут экранного поля COLOR(1,2,3,4,5) будет задавать
следующие цвета:

      112 (Черный на Белом) для нормального текста
      63 (ЯркоБелый на Салатном) если это поле активно
      115 (Зеленый на Белом) когда поле затенено
      113 (Синий на Белом) для заданного амперсандом хоткея
      116 (Красный на Белом) для хоткея активного поля

Пример:

Файл STYLES.DEF содержит:
      0,31,7.ЯркоБелый на Синем/Белый на Черном
      1,48,112,Черный на Салатном/Черный на Белом
      2,23,8,Белый на Синeм/Серый на Черном

Текст программы содержит:
             PROGRAM
Screen SCREEN,COLOR(0)      !Цвет по умолчанию Черный на Черном
         ROW(2,3) ENTRY(@N4),USE(Field1),COLOR(0,1,2)
         ROW(3,3) ENTRY(@N4),USE(Field2).COLOR(0,1.2)
       .
    CODE
    GETSTYLES('styles.def')!Прочитать файл styles.def
    OPEN(Screen)    !Экран - ЯркоБелый на Синем
    	            !Field1 - Черный на Салатном (активное поле)
                    !Field2 - Белый на Синем (затененное поле)
    DISABLE(?Field2)

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

----------------------------------------------------------------
HELP                                   (доступ к окну подсказки)
================================================================
             HELP([helpfile][,window-id])
----------------------------------------------------------------

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

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

Оператор HELP открывает указанный файл подсказки и  активизирует
окно с именем WINDOW-ID. Во время работы операторов ASK или  AC-
CEPT, текущее окно подсказки можно вызвать нажатием клавиши  F1.
Файлы подсказки создаются утилитой Кларион HELPER.

Если пропущен WINDOW-ID, то файл открывается, но никакое окно не
активизируется. Если параметр HELPFILE не задан, то подразумева-
ется, что файл уже открыт и активизируемое окно определяется па-
раметром WINDOW-ID. Окна подсказки также активизируются  атрибу-
том HLP для SCREEN или для элемента экрана. Без параметров, HELP
показывает текущее окно подсказки.

(А.С.П. - Для тех, кто не знает. Если окна помощи связаны в  це-
почку, то можно бегать по ним клавишами PgUp/PgDn. Примером  та-
кой связи может служить справочная система CPD 2.1x)

Пример:

  HELP('C:\HLPDIR\LEDGER.HLP')    !Открыть файл подсказки LEDGER

  HELP(,'CustUpd')	!Подскзка по внесению изменений в список
  			!покупателей

  HELP                          !Показать текущее окно подсказки

См. также: ASK, ACCEPT, HLP

----------------------------------------------------------------
IDLE                         (периодически вызываемая процедура)
================================================================
             IDLE([procedure][,separation])
----------------------------------------------------------------

procedure           Метка оператора PROCEDURE. Процедура  должна
                    описываться в MAP программы, но НЕ в MAP для
                    модуля-члена.

separation          Целое число секунд, задающее минимальный
                    промежуток между обращениями к ПРОЦЕДУРЕ. 0
                    означает, что, по возможности, обращение к
                    ней должно идти непрерывно. Если SEPARATION
                    не задано, то по умолчанию - 1.

IDLE-процедура активна во время работы операторов ASK или ACCEPT
или функции ENTRY. В один момент времени может быть активна толь
ко одна IDLE-процедура.  Задание новой IDLE-процедуры,  отменяет
старую. Оператор IDLE без параметров отменяет обращения к  IDLE-
процедуре.

(А.С.П. - с  помощью этой функции,  например, можно выводить  на
экран ИДУЩИЕ часы, вообще, организовывать работу по  прерываниям
от таймера, хотя и достаточно примитивную)

Пример:
   IDLE(ShoTime,10)     !Вызывать shotime каждые 10 секунд

   IDLE(CheckNet)       !Проверять активность ЛВС каждую секунду

   IDLE                 !Отключить IDLE-процедуру

См. также: ASK, ACCEPT, ENTRY, PROCEDURE, MAP

----------------------------------------------------------------
LOADSYMBOLS                             (загрузка псевдографики)
================================================================
             LOADSYMBOLS([string])
----------------------------------------------------------------

string              Строковая константа или переменная  задающая
                    модифицируемые символы.  Если пропущено,  то
                    модифицируются символы по умолчанию.

Процедура LOADSYMBOLS загружет "графические" символы для курсора
мышки, RADIO-кнопок и  CHECK-боксов, изменяя знакогенератор  для
текстового режима 25*80. LOADSYMBOLS НЕ влияет на прочие тексто-
вые режимы, устанавливаемые процедурой SETTEXT.

Указанные в STRING символы заменяются на символы, представляющие
курсор мышки как стрелку, RADIO-кнопки как "бычьи глаза"  (когда
кнопка выбрана) и CHECK-боксы  как квадраты с буквой  "Х" внутри
(когда чекбокс активен). Желательно,  чтобы символы в STRING  не
использовались где-либо еще в программе.

Если STRING пропущена, то модифицируется определенный набор сим-
волов, которые, обычно, редко используются. "Графические" симво-
лы для RADIO-кнопок и чекбоксов используют только два  знакомес-
та, в то время, как обычное представление требует трех знакомест
(т.е. (+) и  [Х]). Коды символов  должны задаваться в  следующем
порядке:

Экранная "графика"    Коды по умолчанию         Вид на экране
------------------    -----------------         ----------------
Курсор мышки              1                      Стрелка
RADIO выкл              198,  2, 32              Кружок
RADIO вкл               207,  5, 32              Кружок с точкой
CHECK выкл              209, 11, 32              Квадрат
CHECK вкл               211, 19, 32              Квадрат с "Х"

(А.С.П. - "1" для мышки это не опечатка, в книге так и стоит...)

При завершении программы, знакогенератор восстанавливается в ис-
ходном виде.  Также, знакогенератор  восстанавливается на  время
выполнения процедур RUN и RUNSMALL.

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

Пример:

  LOADSYMBOLS                      !Использовать стандартный на-
  				   !бор символов

  LOADSYMBOLS('<1,198,2,33,207,5,32,209,11,32,211,19,32>')
				   !Использовать стандартный на-
  				   !бор символов

  LOADSYMBOLS('<170>')             !Код ASCII 170 для мышки,
                                   ! остальное - стандартно.

  LOADSYMBOLS('<228,229,230,231,232,233,234,235,236,237,238,239|
    ,240>')                     !Использовать коды от 228 до 240

См. также:  USESYMBOLS

----------------------------------------------------------------
OPEN                               (открыть экран для обработки)
================================================================
             OPEN(label[,value])
----------------------------------------------------------------

метка               Метка структуры SCREEN или PULLDOWN.

value               Числовая константа или переменная. Этот  па-
                    раметр используется только с PULLDOWN-струк-
                    турами.

OPEN открывает  SCREEN для  обработки. Только  ОДИН SCREEN может
быть активен.  Когда SCREEN-структура  открыта, отображаются  ее
инициализированные строки и первое поле структуры становится ак-
тивным. USE-переменные должны выводиться оператором DISPLAY.

OPEN открывает PULLDOWN-структуру для обработки, но не активизи-
рует ее. PULLDOWN-структура становится активной при щелчке  мыш-
кой на ее элементе или нажатии горячей Alt-клавиши, заданной для
MENU или ITEM. PULLDOWN может быть активизирована, когда при  ее
открытии нет экранных полей, которые можно активизировать.

Если есть параметр VALUE, и  он не равен нулю, то  оператор OPEN
немедленно показывает полосу меню. Полоса меню остается на экра-
не до закрытия меню, независимо  от того, активно меню или  нет,
(по крайней мере, до тех пор, пока ее не закроет другое  изобра-
жение). Если VALUE пропущено  или ноль, то полоса  меню появится
только при нажатии Alt-клавиши.

Пример:
    OPEN(MenuScr)               !Открыть экран меню

    OPEN(CustEntry)             !Открыть экран ввода сведений о
				!  покупателях

    OPEN(PullDown,1)            !Полоса меню всегда видна

----------------------------------------------------------------
SELECT                              (выбрать поле для обработки)
================================================================
             SELECT([field][,cursor position])
----------------------------------------------------------------

field               Номер поля или его  EQUATE-метка для   поля,
                    подлежащего обработке.

cursor position     Задает позицию в поле,  куда поместить  кур-
                    сор. Для полей ENTRY и TEXT, это номер  сим-
                    вола. Для OPTION  RADIO, OPTION STRING,  или
		    OPTION CHECK  это номер  выбора в  структуре
		    OPTION. Для LIST это номер элемента QUEUE.

SELECT изменяет нормальный порядок обработки полей экрана. Пара-
метр FIELD задает поле, подлежащее обработке. SELECT НЕ работает
с полями в PULLDOWN.

SELECT без параметров,  переводит экран в  "безостановочный" ре-
жим - завершение ВСЕХ полейц экрана без ввода в них  оператором.
Каждое поле завершается в обычном порядке. Цикл оператора SELECT
НЕ останавливается на последнем  поле. Он переходит к  первому и
так  далее  до  закрытия  экрана. "Безостановочный" режим SELECT
прекращается при одном из следующих обстоятельств:

      SELECT(?) прекращает цикл SELECT и позволяет оператору ре-
      дактировать текущее поле.

      Обнаружено пустое или нулевое поле с атрибутом REQ. Звучит
      сигнал, и возобновляется нормальный порядок обработки  по-
      лей с поля с атрибутом REQ.

Пример:

   LOOP                       !Обычный цикл обработки экрана
     ALERT(CtrlEnter)         !Взвести хоткей
     ACCEPT                   !Принять ввод данных
     IF KEYCODE() = CtrIEnter !При нажатии хоткея
       SELECT(?)              !  начат с того же самого поля
       SELECT                 !  и перейти в безостановочный
       CYCLE                  !  режим прямо сейчас
     .
     IF FIELD() = ?State    !Если редактируемое поле - ШТАТ,
       IF State <> 'FL' AND State <> 'GA'
                            !  и введен неправильный штат,
         BEEP               !  то предупредить звуковым сигналом
         SELECT(?)          !  остаться на этом поле (и отменить
                            !  безостановочный режим)
   . . .                    !Конец операторов LOOP и IF

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

----------------------------------------------------------------
SETAREA                  (установить размер виртуального экрана)
================================================================
             SETAREA(строк,столбцов)
----------------------------------------------------------------

строк               Числовая  константа,  которая  задает  число
                    строк на виртуальном экране. Максимум - 255.
                    Тем не менее, произведение СТРОК и  СТОЛБЦОВ
                    НЕ должно превышать 32767.

столбцов            Числовая константа,  которая  задает   число
                    столбцов на  виртуальном экране.  Максимум -
		    255.  Тем  не  менее,  произведение  СТРОК и
		    СТОЛБЦОВ НЕ должно превышать 32767.

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

SETAREA требуется, когда  открытый экран (без  параметров строк/
столбцов) имеет размер больше, чем ранее определенный  виртуаль-
ный экран, или больше  чем 25 x 80.  Если SCREEN(строк,столбцов)
больше, чем размер  виртуального экрана, то  виртуальная область
автоматически переопределяется, настраиваясь на больший  размер.
Однажды установленный размер  виртуальной области, остается  без
изменений, пока его не переопределит больший экран или процедура
SETAREA.

Если задать SETAREA с  размером меньшим, чем у  текущего экрана,
все, что не попадает в новую, меньшую, область, становится недо-
ступным оператору для ввода. Если затем задать SETAREA с нормаль
ными параметрами,  то поля,  отсеченные ранее,  вновь станут до-
ступны. Тем не менее, все рамки, цвета и надписи сотрутся.

Пример:

Screen   SCREEN,PRE(Scr),COLOR(1) !Экран 50строк на 160 столбцов
           описания полей для этого экрана
         .
         CODE
         SETAREA(50,160)  !Установить размер виртуального экрана
         OPEN(Screen)     !  и открыть его

----------------------------------------------------------------
SETMSG                          (задать строку сообщений экрана)
================================================================
             SETMSG(row,col,length)
----------------------------------------------------------------

row                 Целочисленная константа, переменная или  вы-
		    ражение, которое задает номер строки на вир-
                    туальном экране.

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

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

SETMSG описывает область экрана для вывода сообщений от  атрибу-
тов MSG. Если все три параметра равны нулю, то восстанавливается
строка сообщений по умолчанию.

По умолчанию, строка сообщений размещается внизу экрана, с  пер-
вого столбца 25-ой строки и имеет длину 80 символов.

Пример:

Screen SCREEN(25,80),EXPAND(5)
        ROW(3,5) ENTRY(@N4),USE(Fieldl),MSG('Первое поле ввода')
        ROW(4,5) ENTRY(@N4),USE(Field2),MSG('Следующее поле')
       .
       CODE
       OPEN(Screen)
       SETMSG(25,25,30)      !Строка сообщений на 25 строкеэкрана
			     !экрана имеет длину 30 символов.

       SETTEXT(43,80)        !Переходим в режим 43 строки
       SETMSG(0,0,0)         !Строка сообщений - по умолчанию
                             !строка 43, столбец 1, длина 80

См. также: MSG

----------------------------------------------------------------
SETSTYLES                      (установить Коды Цветовых Стилей)
================================================================
             SETSTYLES(program array)
----------------------------------------------------------------

program array	Массив из 256 элементов типа BYTE, или
		STRING(256).

SETSTYLES  присваивает  значения,  содержащиеся  в PROGRAM ARRAY
внутреннему массиву кодов цветовых стилей. Это дает  возможность
"на лету" изменять цветовую гамму программы.

Внутренний массив  кодов цветовых  стилей -  256-байтный массив,
хранящий текущие коды  цветовых стилей. Его  элементы нумеруются
от 0 до 255. Каждый элемент, изначально, имеет значение,  равное
его номеру (эл-т[0]=0, эл-т[1]=1..эл-т[255]=255). Каждый атрибут
и оператор, использующий коды цветовых стилей, обращается к это-
му массиву  и определяет  цвета для  конкретного кода  цветового
стиля.

Но, поскольку, массивы Кларион нумеруются с единицы, то  SETSTY-
LES присваивает первый  элемент PROGRAM ARRAY  нулевому элементу
внутреннего массива кодов цветовых стилей, второй - первому...

Пример:

StyleCodes  STRING(256)                 !Программный массив
StyleArray  BYTE,DIM(256),OVER(StyleCodes)

Screen    SCREEN,COLOR(0)  !По умолчанию - цвет черный на черном
            ROW(2,3) ENTRY(@N4),USE(Fieldl),COLOR(0,1,2)
            ROW(3,3) ENTRY(@N4),USE(Field2),COLOR(0,1,2)
          .
        CODE
        StyleCodes = STYLES()        !Получаем текущие стили
        StyleArray[1] = 31           !ЯркоБелый на Синем
        StyleArray[2] = 48           !Черный на Салатном
        StyleArray[3] = 23           !Белый на Синем
        SETSTYLES(StyleArray)        !Установить новые стили
        OPEN(Screen)    !Экран теперь ЯркоБелый на Синем
                        ! Field1 - Черный на Салатном (активное)
        DISABLE(?Field2)   !Field2 - Белый на Синем (затененное)

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

----------------------------------------------------------------
SHOWIMAGE                               (показать .PCX или .GIF)
================================================================
             SHOWIMAGE(row,col,[rows],[cols],file,usepal)
----------------------------------------------------------------

row                 Строка, в которой начать вывод PCX или GIF.

col                 Столбец, в котором начать вывод PCX или GIF.

rows                Высота рисунка в строках. Если пропущено, то
		    столько, сколько нужно для размещения рисун-
		    ка.

cols                Ширина рисунка  в столбцах.  Если пропущено,
                    то столько, сколько нужно для размещения ри-
                    сунка.

file                Строковая константа или переменная  содержа-
                    щая имя PCX или GIF файла.

usepal              Целочисленная константа или переменная. Если
                    0, то используется 256-цветная палитра  .PCX
		    или .GIF. Если НЕ-ноль, то используется 256-
                    цветная  палитра  ранее  выведенного рисунка
                    (или стандартные аппаратные установки).

SHOWIMAGE это низкоуровневая команда для вывода рисунка в форма-
те PCX или GIF без поля  типа IMAGE. Экран должен быть в  графи-
ческом режиме, так что  сначала надо открыть SCREEN  с атрибутом
GRAPHIC. Атрибуты ROWS  и COLS могут  быть опущены, но  запятые,
отмечающие пропущенные параметры, должны быть обязательно.  Если
атрибуты ROWS и  COLS пропущены, то  рисунок выводится в  полный
размер. При необходимости, рисунок масштабируется.

Поддерживаются графические режимы EGA, VGA и SVGA. CGA и  Hercu-
les НЕ поддерживаются. Поддерживаются все 16-цветные режимы.  На
16-цветных адаптерах, 256-цветные PCX и GIF выводятся в 16-цвет-
ном режиме.  Режим SVGA  256 цветов  поддерживается со следующим
оборудованием (минимальная конфигурация):

Марка видеокарты      Разрешение    Требуемая память
----------------      ----------    ----------------
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(25,80).COLOR(0),GRAPHIC.
         CODE
         OPEN(Screen)       !Открыть фиктивный графический экран
         SHOWIMAGE(1,1,25,80,'logo.pcx',0)
                            !Вывести эмблему в полный экран

----------------------------------------------------------------
UPDATE               (записать данные с экрана в USE-переменные)
================================================================
             UPDATE([first field][,last field])
----------------------------------------------------------------

first field         Номер поля или EQUATE-метка поля для первого
                    поля в диапазоне полей.

last field          Номер поля или EQUATE-метка поля для послед-
                    него поля в диапазоне полей.

UPDATE записывает содержимое полей экрана в их USE-переменные.

UPDATE              Обновляет USE-переменные всех полей экрана.

UPDATE(first field) Обновляет USE-переменную конкретного поля.

UPDATE(first field,last field)
                    Обновляет USE-переменные  полей в  диапазоне
                    от first field до last field.

USE-переменные автоматически  обновляются оператором  ACCEPT при
заполнении полей. Тем не менее, поля заполненный ALERT-клавишами
НЕ обновляют  USE-переменные автоматически.  Для этого  и служит
оператор UPDATE.

Пример:

  UPDATE(?)             !Обновить USE-переменную текущего поля

  UPDATE                !Обновить все USE-переменные

  UPDATE(?Address)      !Обновить USE-переменную для АДРЕСА

  UPDATE(3,7)           !Обновить USE-переменные полей с 3 по 7

  UPDATE(?Name,?Zip)    !Обновляем поля от ИМЕНИ по самый ИНДЕКС

  UPDATE(?City,?City+2) !Обновляем ГОРОД и два поля после него

См. также: Field Equate Labels

----------------------------------------------------------------
USESYMBOLS                 (графические мышка, кнопки и рамочки)
================================================================
             USESYMBOLS([string])
----------------------------------------------------------------

string              Строковая константа или переменная, задающая
                    используемые символы. Если не задана, то ис-
                    пользуется стандартный набор.

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

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

Желательно, чтобы символы с  кодами, указанными в STRING  НЕ ис-
пользовались где-либо еще в программе, так как это может привес-
ти к очень интересным но неприятным эффектам.

Если STRING не задана, то используется стандартный набор  симво-
лов для псевдографики.

Подробности смотри в описании LOADSYMBOLS.

При завершении программы,  знакогенератор приводится в  первона-
чальный вид. Также, он восстанавливается во время исполнения RUN
или RUNSMALL.

Пример:

  USESYMBOLS                       !Стандартный набор символов
  USESYMBOLS('<1,198,2,33,207,5,32,209,11,32,211,19,32>')
                                   !Тоже самое, что и выше
  USESYMBOLS('<170>') !Код ASCII 170 для мышки, остальное стан-
  		      ! дартно.
  USESYMBOLS('<228,229,230,231,232,233,234,235,236,237,238,239,|
    240>')                      !Используем символы от228 до 240
См. также: LOADSYMBOLS

		   ФУНКЦИИ РАБОТЫ С ЭКРАНОМ

----------------------------------------------------------------
CHOICE                          (относительная позиция элемента)
================================================================
             CHOICE([field])
----------------------------------------------------------------

field               EQUATE-метка поля типа LIST, OPTION, POINT.

Функция CHOICE возвращает порядковый номер выбранного элемента в
структуре OPTION, LISTбоксе или  поля POINT. Будучи вызвана  без
параметров, CHOICE возвращает  порядковый номер выбранного  эле-
мента в последнем LIST, OPTION или POINT, завершенном оператором
ACCEPT.

CHOICE возвращает  порядковый номер  выбранной RADIO-кнопки  или
поля типа STRING в структуре OPTION. Порядковый номер  элемента,
это его относительная позиция от начала описания структуры. Пер-
вый элемент имеет порядковый номер 1, второй - 2 и т.д.

CHOICE возвращает номер элемента очереди (QUEUE), выбранного  из
листбокса.

CHOICE возвращает позицию указателя (POINT) в  REPEAT-структуре,
при завершении POINT-поля. Это же значение возвращает  индексная
переменная (INDEX) REPEAT-структуры.

Возвращаемый тип данных: LONG

Пример:

Screen  SCREEN
          ROW(4,13) OPTION,USE(MenuField),REQ !Структура меню
          ROW(5,13) STRING('Добавить запись') !  элемент 1
          ROW(7,13) STRING('Изменить запись') !  элемент 2
          ROW(9,13) STRING('Удалить запись')  !  элемент 3
          ROW(11,18) STRING('Выход')          !  элемент 4
        .
        CODE
        LOOP
          ACCEPT
          EXECUTE CHOICE() !В зависимости от выбранного элемента
			   !  выполнить то или иное действие:
            AddRec         !  добавить запись
            PutRec         !  просмотреть/изменить запись
            DelRec         !  удалить запись
            RETURN         !  закончить работу
        . .

----------------------------------------------------------------
COL                                              (номер столбца)
================================================================
             COL([¦ screen ¦])
                  ¦  field ¦
                  ¦variable¦
----------------------------------------------------------------

screen              Метка SCREEN-структуры (экрана)

field               Номер или EQUATE-метка поля

variable            Метка поля типя STRING

COL без параметров, возвращает номер последнего столбца, к кото-
рому было обращение.

Если задан параметр SCREEN, COL возвращает позицию первого стол-
бца на  этом экране.  Для SCREEN  без параметров  ROWS и COLUMNS
всегда будет возвращаться единица. Для экрана, описанного с атри
бутом AT, то COL вернет значение параметра COL, заданного в AT.

С  параметрами  FIELD  и  VARIABLE, возвращается позиция первого
столбца поля. Если это поле типа POINT, то возвращаемое значение
определяется положением текущего столбца в REPEAT-структуре.

Возвращаемый тип данных: LONG

Пример:

  SaveCol = COL(Total)         !Запоминаем положение поля ИТОГО:

  SHOW(ROW(),COL()+6,Status)   !Показать состояние линии

  BLANK(ROW(?),COL(?),ROWS(?),COLS(?))
                               !Спрятать текущее поле

----------------------------------------------------------------
COLS                                            (число столбцов)
================================================================
             COLS([¦ screen ¦])
                   ¦  field ¦
                   ¦variable¦
----------------------------------------------------------------

screen              Метка SCREEN-структуры.

field               Номер или EQUATE-метка поля.

variable            Метка экранного поля типа STRING.

Функция COLS возвращает число столбцов, занятых элементом  экра-
на. COLS без параметров, возвращает число столбцов на физическом
экране (текущий текстовый режим). Если задан параметр SCREEN, то
возвращается ширина экрана в столбцах.

Еслм  заданы  параметры  FIELD  или VARIABLE, возвращается число
столбцов, занятых полем.

Возвращаемый тип данных: LONG

Пример:

  R# = ROWS()     !Сохраняем число строк на физическом экране
  C# = COLS()     !Сохраняем число столбцов на физическом экране
  GraphicScreenProc  !Вызываем процедуру, работающую в графике
  SETTEXT(R#,C#)     !Восстанавливаем предыдущий текстовый режим

  SaveCols = COLS(Total)     !Сохраняем ширину поля ИТОГО:

  SHOW(ROW(),COL()+COLS(?)+1,Status)   !Показать состояние линии

  BLANK(ROW(?),COL(?),ROWS(?),COLS(?))
                             !Спрятать текущее поле

См. также: SETTEXT, ROWS

----------------------------------------------------------------
CONTENTS                             (содержимое USE-переменной)
================================================================
             CONTANTS(field)
----------------------------------------------------------------

field               Номер или EQUATE-метка поля.

Функция CONTENTS возвращает строку, содержащую значение  USE-пе-
ременной для  полей типа  ENTRY, OPTION  (STRING или  RADIO) или
TEXT.

USE-переменная может быть длиннее, чем шаблон формата связанного
с ней поля. Поля типа TEXT могут иметь произведение СТРОК*СТОЛБ-
ЦОВ меньше, чем длина их USE-переменной. CONTENTS всегда возвра-
щает строку длиной, равной полной длине USE-переменной.

Возвращаемый тип данных: STRING

Пример:

  IF CONTENTS(?LastName) ='' AND CONTENTS(?FirstName)
                               !Если имя и фамилия пусты
     Scr:Message = 'Must Enter a First or Last Name'
                               !  вывести сообщение об ошибке
  .

----------------------------------------------------------------
FIELD                               (последнее завершенное поле)
================================================================
             FIELD()
----------------------------------------------------------------

Функция FIELD возвращает номер  поля, к которому было  обращение
последний раз. Компилятор присваивает положительные номера полям
экрана, использующим USE-переменные в том порядке, в котором они
описаны в  SCREEN-структуре. Отрицательные  номера присваиваются
всем элементам типа MENU и ITEM в PULLDOWN-структуре. В  текстах
програм номера полей,  обычно, заменяются на  EQUATE-метки полей
или EQUATE-метки элементов меню.

Возвращаемый тип данных: LONG
(А.С.П - Что говорит о возможном количестве полей на экране...)

Пример:

Screen SCREEN
         ROW(4,13) ENTRY(@N4),USE(Fieldl)
         ROW(5,13) ENTRY(@N4),USE(Field2)
         ROW(6,13) ENTRY(@N4),USE(Field3)
         ROW(7,13) ENTRY(@N4),USE(Field4)
      .
  CODE
  LOOP
    ACCEPT
    CASE FIELD()                  !Управление редактированием
    				  !  полей
      OF ?Field1                  !Поле номер 1
        IF Field1 = 0             ! если пусто,
          BEEP                    !   звуковой сигнал
          SELECT(?)               !   и повторить ввод
        .
      OF ?Field2                  !Поле номер 2
        IF Field2 > 4             !  если СУММА больше 4
          Scr:Message = 'Сумма должна быть меньше 4'
          ERASE(?)                !    очистить поле
          SELECT(?)               !    и вновь редактировать его
        ELSE                      !  значение допустимо?
           CLEAR(Scr:Message)     !    очистить строку сообщений
        .
       OF ?Field4                 !Поле номер 4
          BREAK                   !  закончить цикл обработки
     . .                          !Конец операторов CASE и LOOP

----------------------------------------------------------------
FIELDS                                   (число полей на экране)
================================================================
             FIELDS()
----------------------------------------------------------------

Функция FIELDS возвращает число полей, использующих USE-перемен-
ные, в текущей SCREEN-структуре. Если не открыто ни одного экра-
на, то FIELDS возвращает ноль.

Возвращаемый тип данных: LONG

Пример:

   SELECT(FIELDS())                !Выбрать последнее поле

   ERASE(?,FIELDS())               !Очистить остающиеся поля

----------------------------------------------------------------
REFER                            (было обращение к полю или нет)
================================================================
             REFER()
----------------------------------------------------------------

Функция REFER фозвращает 1 (истина) если было обращение к послед
нему завершенному полю, или 0 (ложь) если обращения не было. Об-
ращение происходит  при вводе  любого печатного  символа, выборе
поля OPTION  или POINT  или передвижении  указателя в листбоксе.
REFER возвращает истину, даже если в поле были введены те же сим
волы, что и были в нем раньше.

Возвращаемый тип данных: LONG

Пример:

Screen SCREEN
         ROW(4,13) ENTRY(@N4),USE(Fieldl)  !Поле для ввода
         ROW(5,13) ENTRY(@N4),USE(Field2)  !Поле для ввода
         ROW(6,13) ENTRY(@N4),USE(Field3)  !Поле для ввода
         ROW(7,13) ENTRY(@N4),USE(Field4)  !Поле для ввода
       .
  CODE
  LOOP
    ACCEPT
    CASE FIELD()                  !Управление редактированием
    				  !  полей
      OF ?Field1                  !Поле номер 1
        IF Field1 = 0             ! если пусто,
          BEEP                    !   звуковой сигнал
          SELECT(?)               !   и повторить ввод
        .
       OF ?Field4                 !Поле номер 4
          BREAK                   !  закончить цикл обработки
     . .                          !Конец операторов CASE и LOOP

----------------------------------------------------------------
ROW                                               (номер строки)
================================================================
             ROW([¦ screen ¦])
                  ¦  field ¦
                  ¦variable¦
----------------------------------------------------------------

screen              Метка SCREEN-структуры.

field               Номер или EQUATE-метка поля.

variable            Метка поля типа STRING.

ROW без параметров возвращает номер последней строки, к  которой
произошло обращение. Если задан параметр SCREEN< то ROW  возвра-
щает физический номер строки для первой строки экрана. Для  SCRE
EN без параметров  ROWS и COLUMNS,  всегда возвращается 1.  Если
экран описан с атрибутом AT, то ROW возвращает значение  парамет
ра ROW заданного в AT.

Для параметров FIELD и VARIABLE возвращается номер первой строки
поля (поля типа TEXT, BUTTON,  LIST и IMAGE могут занимать  нес-
колько строк).  Если поле  типа POINT,  то возвращаемое значение
определяется текущей строки в REPEAT-структуре.

Возвращаемый тип данных: LONG

Пример:

  SaveRow = ROW(Total)              !Save row of screen total

  SHOW(ROW(),COL()+6,Status)        !Display the line status

  BLANK(ROW(?),COL(?),ROWS(?).COLS(?))
                                    !Blank out the current field

----------------------------------------------------------------
ROWS                                               (число строк)
================================================================
             ROWS([¦ screen ¦])
                   ¦  field ¦
                   ¦variable¦
----------------------------------------------------------------

screen              Метка SCREEN-структуры.

field               Номер или EQUATE-метка поля.

variable            Метка поля типа STRING.

Функция ROWS  возвращает высоту  элемента экрана  в строках. Без
параметров возвращает высоту физического экрана (текущий тексто-
вый режим). Если задан  параметр SCREEN, то возвращается  высота
текущего экрана.

Если заданы параметры FIELD или VARIABLE, то возвращается высота
поля в строках. Поля типа TEXT, BUTTON, LIST, IMAGE и POINT  мо-
гут иметь высоту более чем в одну строку.

Возвращаемый тип данных: LONG

Пример:

  R# = ROWS()     !Сохраняем число строк на физическом экране
  C# = COLS()     !Сохраняем число столбцов на физическом экране
  GraphicScreenProc  !Вызываем процедуру, работающую в графике
  SETTEXT(R#,C#)     !Восстанавливаем предыдущий текстовый режим

  Y#=ROW(Screen1)+(ROWS(Screen1)/2)!Вычисляем центральную строку
  X#=COL(Screen1)+(COLS(Screen1)/2)!--//-- центральный столбец

  SHOW(Y#-1,X#-1,'')  !Обращение к видеопамяти из центра Screen1
  OPEN(Screen2)       !Открываем Screen2 в центре Screen1

  BLANK(ROW(?),COL(?),ROWS(?),COLS(?))
                       !Спрятать текущее поле

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

----------------------------------------------------------------
SELECTED                          (выбранное для обработки поле)
================================================================
             SELECTED()
----------------------------------------------------------------

Функция SELECTED возвращает номер выбранного в данный момент по-
ля. Это поле, которое оператор ACCEPT будет обрабатывать следую-
щим. Значение функции  SELECTED обычно определяется  "естествен-
ным" порядком выбора полей, который используется оператором  AC-
CEPT (порядок, в котором поля описаны в SCREEN-структуре).  Этот
порядок можно изменить, используя оператор SELECT.

Возвращаемый тип данных: LONG

Пример:

  SavField = SELECTED()      !Сохранить положение текущего поля

  IF SELECTED() = ?Cus:Company AND Cus:CustType - 'ЧАСТНИК'
    SELECT(?Name)            !Пропустить поле КОМПАНИЯ если счет
			     !принадлежит физическому лицу
  .

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

----------------------------------------------------------------
STYLES            (возвращает внутренний массив Цветовых Стилей)
================================================================
             STYLES()
----------------------------------------------------------------

Функция STYLES возвращает 256-байтную строку, содержащую текущие
значения внутреннего массива кодов цветовых стилей.

Внутренний массив  кодов цветовых  стилей -  256-байтный массив,
хранящий текущие коды  цветовых стилей. Его  элементы нумеруются
от 0 до 255. Каждый элемент, изначально, имеет значение,  равное
его номеру (эл-т[0]=0, эл-т[1]=1..эл-т[255]=255). Каждый атрибут
и оператор, использующий коды цветовых стилей, обращается к это-
му массиву  и определяет  цвета для  конкретного кода  цветового
стиля.

Массивы Кларион нумеруются начиная с единицы, а внутренний мас-
сив кодов цветовых стилей нумеруется с нуля. Поэтому, первый
элемент строки соответствует НУЛЕВОМУ элементу массива, второй
первому и т.п.

Возвращаемый тип данных: STRING(256)

Пример:

StyleCodes STRING(256)   !Программный массив стилей
StyleArray BYTE,DIM(256),OVER(Sty]eCodes)
			 !Рассматриваем строку как массив

Screen SCREEN,COLOR(0)   !Цвет по умолчанию черный на черном
         ROW(2,3) ENTRY(@N4),USE(Fieldl),COLOR(0,1,2)
         ROW(3,3) ENTRY(@N4),USE(Field2),COLOR(0,1,2)
       .

  CODE
  StyleCodes = STYLES()   !Получить текущие стили
  StyleArray[1] = 31      !ЯркоБелый на Синем - код стиля: 0
    !Элемент программного масива #1 соответствует элементу #0
    !внутреннего массива
  StyleArray[2] = 48      !Черный на Салатном - код стиля: 1
  StyleArray[3] = 23      !Белый на Синем - код стиля: 2
  SETSTYLES(StyleCodes)   !Перезаписать массив стилей
  OPEN(Screen)            !Экран будет ЯркоБелый на синем. Полей
                          !черное на салатном (активное)
  DISABLE(?Field2)        !Field2 белое на синем (затененное)

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

Перевод всей документации выполнил Сергей АгАрков. Если возникли
какие-либо вопросы или  предложения по качеству  перевода, обра-
щайтесь:

Jew Smile MO Station 2:5040/22.3 Serg Agarkoff +7-(421)-626-8486
время работы станции с 15:00  до 23:30 по московскому времени  в
будние дни и круглосуточно в  выходные и праздники. По этому  же
телефону меня можно застать с 3:00 до 12:00 по московскому  вре-
мени. Спросить капитана Агаркова.

Домашний телефон +7-(421)-626-8486 ўс 13:00 до 0:30 по москве.

к оглавлению

Знаете ли Вы, что абстрактный класс - это класс, содержащий хотя бы один виртуальный метод. Абстрактные классы не бывают изолированными, т.е. всегда абстрактный класс должен быть наследуемым. Поскольку у чисто виртуального метода нет тела, то создать объект абстрактного класса невозможно. Абстрактным классом можно назвать класс, специально определенный для обеспечения наследования характеристик порожденными классами.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution