к оглавлению

Встроенные процедуры Clarion

Перечень процедур по функциональности

Логическое управление

CHAIN (выполнить другую программу)

HALT (выйти из программы)

IDLE (включить периодически исполняемую процедуру)

RUN (выполнить команду)

SHUTDOWN (включить процедуру завершения)

STOP (приостановить выполнение программы)

Обработка событий

ACCEPT (обработчик событий)

ALERT (установка клавиши, порождающей событие)

EVENT (возвратить номер события)

POST (послать событие определенное пользователем)

REGISTER (регистрация обработчика событий)

UNREGISTER (разрегистрировать обработчик событий)

YIELD (разрешить обработку событий)

Прикладные программы с несколькими процессами

START (возвращает новый исполняемый процесс)

THREAD (выдать номер текущего процесса)

UNLOCKTHREAD (разблокировать обработку сообщений)

LOCKTHREAD (вновь заблокировать внешнюю обработку сообщений)

THREADLOCKED (текущее состояние внешней обработки событий)

SUSPEND (приостановить выполнение процесса)

RESUME (возобновить выполнение процесса)

Обработка окон

ACCEPTED (указать исполненное поле)

CHANGE (изменить значение поля)

CHOICE (указать относительное положение элемента)

CLONE (дублирует существующий объект)

CLOSE (закрыть окно)

CONTENTS (вернуть значение USE-переменной)

CREATE (создать новое поле)

DESTROY (удалить экранный объект)

DISABLE (блокирует поле)

DISPLAY (отобразить USE-переменные на экран)

ENABLE (разрешает доступ к полю)

ERASE (очистить поля и USE-переменные)

FIELD (указать поле, владеющее фокусом)

FIRSTFIELD (указать первое поле окна)

FOCUS (указать поле, владеющее фокусом)

GETFONT (получить информацию о шрифте)

GETPOSITION (получить информацию о расположении поля)

HELP (доступ к окну справки)

HIDE ((“спрятать” поле)

INCOMPLETE (указать пустое REQ-поле)

LASTFIELD (указать последнее поле окна)

MESSAGE (отобразить окно сообщений)

MOUSEX (получить положение мыши по горизонтали)

MOUSEY (получить положение мыши по вертикали)

OPEN (открыть окно)

POPUP (получить выбор пользователя в спускающемся меню)

SELECT (выбор поля для последующей обработки)

SELECTED (возвратить поле которое имеет фокус)

SET3DLOOK (установить объемное изображение окна)

SETCURSOR (временно изменить курсор мыши)

SETFONT (установить шрифт)

SETPOSITION (опеределить новое положение поля)

SETTARGET (установить окно или отчет текущим)

UNHIDE (отобразить скрытый объект)

UPDATE (запись с экрана в USE-переменную)

Работа с клавиатурой

ALIAS (переопределить код клавиши)

ASK (ждать нажатие клавиши)

FORWARDKEY (передать управляющему объекту нажатие клавиши)

KEYBOARD (возвратить код первый в буфере)

KEYCHAR (возвратить ASCII код)

KEYCODE (возвратить код последней клавиши)

KEYSTATE (возвратить состояние клавиатуры)

PRESS (поместить в буфер строку символов)

PRESSKEY (поместить в буфер код нажатия клавиши)

SETKEYCHAR (указание кода ASCII)

SETKEYCODE (назначить код клавиши)

Стандартные диалоговые окна

COLORDIALOG (выбор цвета)

FILEDIALOG (выбор файла)

FONTDIALOG (выбор шрифта)

FONTDIALOGA (возвращает выбранный шрифт и начертание)

PRINTERDIALOG (выбор принтера)

Обработка событий “потащить и отпустить”

CLIPBOARD (получить содержимое буфера обмена Windows)

DRAGID (возвратить совпавший “потащить-отпустить” ярлык)

DROPID (возвратить строку “потащить-отпустить”)

SETCLIPBOARD (установить содержимое буфера обмена)

SETDROPID (задать строку, возвращаемую DROPID)

Временное хранение

GETINI (возвратить элемент INI-файла)

PUTINI (поместить элемент в INI-файл)

GETREG (получить значение реестра Windows)

PUTREG (записать значение в реестр Windows)

DELETEREG(удалить значение или ключ с реестра Windows)

Обработка отчетов

CLOSE (закрыть активную структуру отчета)

ENDPAGE (форсировать переход на новую страницу)

OPEN открыть структуру отчета)

PRINT (напечатать структуру отчета)

Обработка графики

ARC (нарисовать дугу эллипса)

BLANK (стереть графические изображения)

BOX (нарисовать прямоугольник)

CHORD (нарисовать сектор эллипса)

ELLIPSE (нарисовать эллипс)

IMAGE (нарисовать графическое изображение)

LINE (изобразить прямую линию)

PENCOLOR (возвратить цвет линии)

PENSTYLE (возвратить тип линии)

PENWIDTH (возвратить толщину линии)

PIE (изобразить секторную диаграмму)

POLYGON (изобразить многозвенную фигуру)

ROUNDBOX (нарисовать прямоугольник с округлыми углами)

SETPENCOLOR (установить цвет линий)

SETPENSTYLE (установить стиль линий)

SETPENWIDTH (установить толщину линий)

SHOW (отобразить на экран)

TYPE (вывести строку на экран)

Обработка файлов

BUFFER (установить постраничную буферизацию записей)

BUILD (построить ключ или индекс)

CALLBACK (регистрировать или разрегистрировать FileCallBackInterface)

CLOSE (закрыть файл данных)

COPY (скопировать файл данных)

CREATE (создать пустой файл данных)

EMPTY (очистить файл данных)

FLUSH (записать буферы)

FREESTATE (освободить ресурсы)

GETSTATE (вернуть текущее состояние файла данных)

LOCK (исключительный доступ к файлу)

NAME (получить имя файла)

OPEN (открыть файл данных)

PACK (исключить удаленные записи)

RECORDS (получить число записей в файле)

REMOVE (удалить файл)

RENAME (изменить имя файла)

RESTORESTATE (восстановить состояние файла данных)

SEND (послать сообщение файловому драйверу)

SQLCALLBACK (зарегистрировать или разрегистрировать SQLCallBackInterface))

STATUS (получить состояние файла)

STREAM (включить буферизацию)

UNLOCK (разблокировать заблокированный файл данных)

Обработка записей

ADD (добавить новую запись)

APPEND (добавить новую запись)

BYTES (получить размер в байтах)

DELETE (удалить запись)

DUPLICATE (проверить на повторение значения ключа)

GET (прочитать запись с помощью прямого доступа)

HOLD (исключительный доступ к записи)

NEXT (прочитать следующую запись в последовательности)

NOMEMO (включить режим выборки без MEMO-полей)

POSITION (возвратить позицию записи в файле)

PREVIOUS (прочитать предыдущую запись в последовательности файла)

PUT (записать обратно в файл)

RELEASE (освободить захваченную запись файла)

REGET (вновь прочитать запись файла)

RESET (восстановить положение в последовательности записей)

SET (установить последовательность обработки записей)

SKIP (пропускать записи при последовательной обработке)

WATCH (автоматическая проверка совместного использования)

Транзакции

COMMIT (завершить успешную транзакцию)

LOGOUT (начать транзакцию)

ROLLBACK (завершить неуспешную транзакцию)

Обработка фиктивных данных

GETNULLS (получить состояние NULL таблицы)

NULL (проверить значение поля на фиктивное)

SETNULL (установить для поля фиктивное значение)

SETNULLS (установить фиктивное состояние колонок)

SETNONNULL (установить нефиктивное значение поля)

Международная поддержка

CONVERTANSITOOEM (преобразовать код ANSI в ASCII)

CONVERTOEMTOANSI (преобразовать код ASCII в ANSI)

ISALPHA (проверить символ на букву)

ISLOWER (проверить символ на строчную букву)

ISUPPER (проверить символ на прописную букву)

LOCALE (загрузить файл с переменными среды)

Обработка виртуальных файлов

BUFFER (установить постраничную буферизацию записей)

CALLBACK (регистрировать или разрегистрировать FileCallBackInterface)

CLOSE (закрыть виртуальный файл)

OPEN (открыть виртуальный файл)

DELETE (удалить запись из первичного файла)

FLUSH (записать буферы)

HOLD (исключительный доступ к записи виртуального файла)

NEXT (прочитать следующую запись)

POSITION (получить позицию последовательности записи в виртуальном файле)

PREVIOUS (прочитать предыдущую запись в последовательности структуры view)

PUT (записать обратно в первичный файл VIEW)

RECORDS (получить число строк в структуре данных)

REGET (повторно прочитать запись VIEW)

RELEASE (освободить захваченную запись)

RESET (восстановить положение в последовательности записей)

SET (установить положение в последовательности записей)

SKIP (пропустить запись при последовательной обработке)

SQL (использовать код SQL)

SQLCALLBACK (зарегистрировать или разрегистрировать SQLCallBackInterface)

WATCH (автоматическая проверка совместного использования)

Обработка очередей

ADD (добавить в очередь)

CHANGES (возвращает измененную очередь)

DELETE (удалить из очереди)

FREE (удалить все элементы)

GET (прочитать элемент)

POINTER (вернуть последнюю позицию элемента)

POSITION (получить позицию последовательности записи)

PUT (записать элемент)

RECORDS (получить количесво элементов в очереди)

SORT (упорядочить элементы)

Математические процедуры

ABS (получить абсолютную величину)

INRANGE (проверить попадание в диапазон)

INT (взять целую часть)

LOGE (вычислить натуральный логарифм)

LOG10 (вычислить десятичный логарифм)

RANDOM (получить случайное число)

ROUND (получить округленное число)

SQRT (вычислить квадратный корень)

Тригонометрические процедуры

SIN (вернуть синус)

COS (вернуть косинус)

TAN (вернуть тангенс)

ASIN (вернуть арксинус)

ACOS (вернуть арккосинус)

ATAN (вернуть арктангенс)

Строковые процедуры

ALL (повторение символов)

CENTER (центрировать строку)

CHR (получить символ АSСII)

CLIP (отсечь пробелы в конце строки)

DEFORMAT (исключить форматирование из числовой строки)

FORMAT (форматировать число по шаблону)

INLIST (искать элемент в списке)

INSTRING (искать вхождение строки)

LEFT (выровнять строку влево)

LEN (получить длину строки)

LOWER (преобразовать в строчные буквы)

MATCH (вернуть сопоставление строк)

NUMERIC (проверить числовую строку)

RIGHT (выровнять строку вправо)

SUB (получить подстроку строки)

TIE (соединить строковое значение с ASTRING)

TIED (получить значение соединенное с ASTRING)

UNTIE (развязать значение строки с ASTRING)

UPPER (получить верхний регистр)

VAL (возвратить значение ASCII)

Манипуляции с битами

BAND (вернуть поразрядное И)

BOR (вернуть поразрядное ИЛИ)

BXOR (вернуть поразрядное исключающее ИЛИ)

BSHIFT (вернуть поразрядный сдвиг)

Процедуры даты и времени

TODAY (получить системную дату)

SETTODAY (установить системную дату)

CLOCK (получить системное время)

SETCLOCK (установить системное время)

DATE (получить стандартную дату)

DAY (получить день месяца)

MONTH (получить месяц)

YEAR (получить год)

AGE (получить возраст в заданный день)

Доступ к полю

ISSTRING (сообщает, строковое поле или нет)

WHAT (выделяет поле из группы)

WHERE (возвращает позицию поля в группе)

Процедуры операционной системы

COMMAND (получить параметр командной строки)

DIRECTORY (получить список файлов в каталоге)

LONGPATH (получить длинное имя файла)

PATH (получить текущий каталог)

RUNCODE (получить код завершения)

SETCOMMAND (задать параметры командной строки)

SETPATH (изменить текущий диск и каталог)

SHORTPATH (получить короткое имя файла)

Ошибочные ситуации

ERROR (получить текст сообщения об ошибке)

ERRORCODE (получить код ошибки)

ERRORFILE (получить имя файла, вызвавшего ошибку)

FILEERROR (получить сообщение об ошибке от файлового драйвера)

FILEERRORCODE (получить код ошибки от файлового драйвера)

REJECTCODE (получить код причины события EVENT:Rejected)

Прочее

ADDRESS (получить адрес памяти)

BEEP (подать звуковой сигнал)

CALL (обратиться к процедуре из DLL)

CHOOSE (получить выбранное значение)

MAXIMUM (получить максимальное значение индекса)

OMITTED (проверить не опущены ли параметры)

PEEK (прочитать данные из памяти)

POKE (записать данные в память)

UNLOAD (выгрузить вызванную библиотеку из памяти)

 

ABS (получить абсолютную величину)

ABS(выражение)

ABS Возвращает абсолютную величину.

выражение Константа, переменная или выражение.

Процедура ABS возвращает абсолютную величину выражения. Абсолютная величина числа всегда положительная величина (или нуль).

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

Пример:

C = ABS(A - B) ! С представляет абсолютное значение разности

IF B < 0

B = ABS(B) ! Если B отрицательное число, сделать его положительным

END

Смотри также: BCD операторы и процедуры

ACCEPTED (указать исполненное поле)

ACCEPTED( )

Процедура ACCEPTED возвращает номер поля, для которого имело место событие EVENT:Accepted. Для всех других событий процедура возвращает 0.

Компилятор присваивает номерам полей структуры WINDOW положительные значения в порядке возрастания - как поля следуют при объявлении структуры WINDOW. Номерам полей структуры APPLICATION присваиваются отрицательные значения. В операторах программы номера полей представлены, как правило, метками соответствия - именем USE-переменной, перед которой стоит знак вопроса (?FieldName).

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

Пример:

CASE ACCEPTED() !Завершающие действия

OF ?Cus:Company

!Редактирование значения поля

OF ?Cus:CustType

!Редактирование значения поля

END

Смотри также: ACCEPT, EVENT

 

ACOS (вернуть арккосинус)

ACOS(выражение)

ACOS Возвращает арккосинус.

выражение Числовая константа, переменная или выражение, представляющая собой косинус угла.

Процедура ACOS возвращает арккосинус. Арккосинус значения косинуса угла – это сам угол, который дает это значение. Возвращаемое значение представляет собой угол, выраженный в радианах. Пи – это константа, которая представляет собой отношение длины окружности к радиусу круга. Здесь 2π радиана (или 360 градусов) в круге.

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

Пример:

PI EQUATE(3.1415926535898) !Значение PI

Rad2Deg EQUATE(57.295779513082) !Число градусов в радиане

Deg2Rad EQUATE(0.0174532925199) !Число радиан в градусе

CODE

InvCosine = ACOS(CosineAngle) ! Получить арккосинус

Смотри также: TAN, ATAN, SIN, ASIN, COS

 

ADD (добавить содержимое записи)

| файл |

| файл ,длина |

ADD( | очередь | )

| очередь, [+]ключ,...,[-]ключ] |

| очередь, имя |

| очередь, функция |

| очередь, указатель |

 

ADD Добавляет новую запись в файл или очередь.

файл Метка структуры FILE, описывающей файл.

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

очередь Метка структуры QUEUE или метка переданного параметра, представляющего собой структуру QUEUE.

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

ключ Метка поля, объявленного внутри структуры QUEUE. Если у очереди есть атрибут PRE, то параметр ключ должен включать в себя и префикс.

имя Строковая константа, переменная или выражение, содержащее разделенные запятыми, с необязательным знаком + или – спереди значения атрибутов NAME, относящихся к полям в структуре QUEUE. Регистр букв в значениях этого параметра является значимым.

функция Метка функции содержащая два параметра *GROUP или поименованной GROUP, передаваемой по адресу, и возвращающая значение типа SIGNED. Оба параметра должны иметь одинаковый тип параметров и не должны быть опущены. В прототипах не должно быть атрибутов RAW, C и PASCAL. Смотри Дополнительные сведения об очередях.

указатель Числовая константа, переменная или численное выражение. Указатель должен лежать в диапазоне между 1 и числом записей в очереди.

Оператор ADD записывает новую запись в файл или очередь.

Использование в файлах

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

Вы можете использовать процедуру DUPLICATE, чтобы проверить когда оператор ADD возвратит сообщение об ошибке "Creates Duplicate Key". Процедура DUPLICATE допускает, что содержимое данных буфера структуры RECORD дублирует указанное содержимое текущей записи. Поэтому, вы должны очистить указатель на запись GET(file,0) используя DUPLICATE перед добавлением записи.

ADD(файл)

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

ADD(файл,длина)

Добавить новую запись в файл, записывая число байт длины из буфера данных файла на диск. Значение длины параметра должно быть больше 0 и меньше или равно длине структуры RECORD. Это форма добавления записи поддерживается не всеми файловыми драйверами – проверяйте по документации к конкретному файловому драйверу.

Использование в очередях

Оператор ADD записывает новый элемент из буфера в очередь. Если для добавления не хватает памяти, то выдается сообщение “Insufficient Memory”.

ADD(очередь )

Добавляет новый элемент в конец очереди.

ADD(очередь, указатель )

Помещает новый элемент в позицию с относительным номером, заданным параметром указатель. Если уже существует элемент с таким номером, то он “проталкивается” вниз, для того, чтобы освободить номер для нового элемента. Указатели всех следующих элементов подстраиваются с учетом появления нового элемента. Например, элемент, добавленный в позицию с относительным номером 10 “проталкивает” 10-й элемент в 11-ю позицию, 11-й - в 12-ю и т.д. Если указатель равен 0 или больше, чем число элементов в очереди, то элемент добавляется в конец очереди.

ADD(очередь, ключ)

Включает новый элемент в упорядоченную очередь. Можно использовать несколько параметров ключ (до 16), разделенных запятыми, с необязательным знаком плюс или минус для обозначения возрастающей или убывающей последовательности. Данный элемент включается сразу после всех элементов, имеющих совпадающие с ним значения ключей. Используя только такую форму оператора ADD(очередь, ключ) можно использовать для построения упорядоченной очереди.

ADD(очередь, имя)

Включает новый элемент в упорядоченную очередь в памяти. Строка имя должна содержать значения атрибутов NAME, относящихся к полям структуры QUEUE, разделенные запятыми, с необязательным знаком + или - спереди. Элемент очереди вставляется сразу после всех элементов, имеющих совпадающие с ним значения полей. Если очередь пуста, то эта форма оператора ADD(очередь, имя) может использоваться для построения упорядоченной очереди.

ADD(очередь, функция)

Использование ADD с помощью ФУНКЦИИ запишет в позицию, номер которой возвратит функция. Если функция возвращает ноль (0), запись очереди первого параметра рассматривается как равная второму параметру. В этом случае, запись не добавляется, потому как значения параметров равны. Если функция возвращает отрицательную величину, ADD запись переданная как первый параметр рассматривается как имеющая меньшую величину, чем запись переданная как второй параметр и записывается соответственно. Если функция возвращает положительную величину, ADD запись переданная как первый параметр рассматривается как имеющая большую величину, чем запись переданная как второй параметр и записывается соответственно.

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

Выдаваемые сообщения об ошибках: 05 Access Denied (доступ запрещен)

08 Insufficient Memory (недостаточно памяти)

37 File Not Open (файл не открыт)

40 Creates Duplicate Key (создается дублирующий экземпляр ключа)

75 Invalid Field Type Descriptor (неправильный описатель типа поля)

Пример:

NameQue QUEUE

Name STRING(20),NAME('FirstField')

Zip DECIMAL(5,0),NAME('SecondField')

AnyField ANY

END

CODE

ADD(Customer) !Добавить запись о новом клиенте

IF ERRORCODE() THEN STOP(ERROR()). !и проверить безошибочность добавления

NameQue.Name = 'Jones' !Присвоить данные

NameQue.Zip = 12345

NameQue.AnyField &= NEW(STRING(10)) !Создать новое поле STRING(10) в очереди

ADD(NameQue) !Добавить элемент в конец очереди

CLEAR(NameQue) !Очистить для следующего поля

NameQue.Name = 'Taylor' !Присвоить данные

NameQue.Zip = 12345

NameQue.AnyField &= NEW(STRING(20)) !Создать новое поле STRING(20) в очереди

ADD(NameQue,+NameQue.Name,-NameQue.Zip) !Имена по возрастанию, zip по убыванию

CLEAR(NameQue) !Очистить для следующего поля

NameQue.Name = 'Adams' !Присвоить данные

NameQue.Zip = 12345

NameQue.AnyField &= NEW(STRING(30)) !Создать новое поле STRING(30) в очереди

ADD(NameQue,1) !Добавить поле в позицию 1

CLEAR(NameQue) !Очистить для следующего поля

Que:Name = 'Smith' !Присвоить данные

Que:Zip = 12345

NameQue.AnyField &= NEW(STRING(40)) !Создать новое поле STRING(40) в очереди

ADD(NameQue,+FirstField,-SecondField) !Имена по возрастанию, zip по убыванию

CLEAR(NameQue) !Очистить для следующего поля

 

Смотри также: SORT, CLEAR, Указатели-переменные, PUT, GET, DUPLICATE, APPEND

 

ADDRESS (получить адрес памяти)

ADDRESS(| переменная | )

ADDRESS Возвращает адрес памяти переменной.

переменная Метка элемента данных или процедуры.

Процедура ADDRESS возвращает адрес указанного элемента данных или процедуры.

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

 

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

Пример:

MAP

ClarionProc !Процедура на языке Clarion

MODULE('External.Obj') !Внешняя библиотека

ExternVarProc(LONG) !Функция на C, принимающая адрес переменной

ExternProc(LONG) !Функция на C, принимающая адрес процедуры

END

END

Var1 CSTRING(10) !Описать строку, оканчивающуюся нулевым символом

CODE

ExternVarProc(ADDRESS(Var1)) !Передать адрес Var1 во внешнюю процедуру

ExternProc(ADDRESS(ClarionProc)) !Передать адрес ClarionProc

ClarionProc PROCEDURE !Процедура на языке Clarion

CODE

RETURN

Смотри также: PEEK, POKE, Операторы присвоения указателей

 

AGE (получить возраст в заданный день)

AGE(дата рождения [,базовая дата])

AGE Возвращает длительность промежутка времени.

дата рождения Числовое выражение, представляющее собой стандартную дату.

базовая дата Числовое выражение, представляющее собой стандартную дату. Если этот параметр опущен, то используется системная дата.

Процедура AGE возвращает строку, содержащую время, прошедшее между двумя датами. Возраст возвращается в следующем формате:

 

от 1 до 60 дней - 'nn DAYS'

от 61 дня до 24 месяцев - 'nn MOS'

(от 2 лет + 1 месяц) до 999 лет - 'nnn YRS'

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

Пример:

Message = Emp:Name & 'is ' & AGE(Emp:DOB,TODAY()) & ' old today.'

Смотри также: Стандартная дата, DAY, MONTH, YEAR, TODAY, DATE

 

ALERT (установка клавиши, порождающей событие)

ALERT([начальный код] [,конечный код])

ALERT Определяет клавиши, которые порождают события.

начальный код Числовой код или символическое имя клавиши. Может выступать в роли нижней границы при указании группы кодов клавиш.

конечный код Код или символическое имя клавиши верхней границы группы кодов клавиш.

ALERT определяет клавишу или группу клавиш в качестве порождающих событие для текущего активного окна. Оператор ALERT без параметров очищает все ALERT коды. Текущий список кодов клавиш находится в исходном файле KEYCODES.CLW.

Когда пользователь нажимает одну из клавиш группы, то порождаются два события не связанные с полем: EVENT:PreAlertKey и EVENT:AlertKey (именно в таком порядке). Если код исполняет CYCLE во время работы EVENT:PreAlertKey, библиотека выполняет действие по умолчанию для “тревожного” (alerted) нажатия клавиши. В противном случае действие библиотечной процедуры приостанавливается для такой клавиши. В обоих случаях следом за событием EVENT:PreAlertKey генерируется событие EVENT:AlertKey.

Любой посылаемый клавиатурой код может быть использован в качестве параметра оператора ALERT. Из-за отсутствия связи с каким-либо управляющим полем, ALERT- оператор порождает события не связанные с полем. При возникновении события, связанного с нажатием ALERT-клавиши, не происходит автоматического изменения USE-переменной поля, владеющего фокусом ввода (если требуется, нужно использовать UPDATE).

Оператор ALERT “тревожит” (alerted) эти клавиши отдельно от атрибута ALRT окна или объекта. Это означает, что очистка всех ALERT-клавиш не имеет влияния на клавиши, объявленные с атрибутом ALRT.

Пример:

Screen WINDOW,ALRT(F10Key),ALRT(F9Key) !F10 и F9 - ALERT-клавиши

LIST,AT(109,48,50,50),USE(?List),FROM(Que),IMM

BUTTON('&Ok'),AT(111,108,,),USE(?Ok)

BUTTON('&Cancel'),AT(111,130,,),USE(?Cancel)

END

CODE

OPEN(Screen)

ALERT !Отмена всех ALERT- клавиш

ALERT(F1Key,F12Key) !Все функциональные - ALERT-клавиши

ALERT(279) !Ctrl-Esc - ALERT-клавиша

ACCEPT

CASE EVENT()

OF EVENT:PreAlertKey !Предпроверка ALERT-событий

IF KEYCODE() <> F4Key !“Вырезать” F4 из ALERT-группы

CYCLE !все другие F клавиши обрабатываются их стандартными функциями

END

OF EVENT:AlertKey !Обработка ALERT-событий

CASE KEYCODE()

OF 279 !Проверка на Ctrl+Esc

BREAK

OF F9Key !Проверка на F9

F9HotKeyProc !Вызов процедурыгорячейклавиши

OF F10Key !Проверка на F10

F10HotKeyProc !Вызов процедуры “горячей” клавиши

END

END

END

Смотри также: UPDATE, ALRT

 

ALIAS (переопределить код клавиши)

ALIAS( [код клавиши,[новый код] ] )

ALIAS Заменяет код, сгенерированный при нажатии клавиши.

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

новый код Целочисленная константа или символическое имя кода клавиши. Если параметр опущен, то код клавиши возвращается к своему первоначальному значению.

ALIAS заменяет сгенерированный при нажатии клавиши код клавиши на новый код. ALIAS не воздействует на “нажатие” клавиши, осуществляемое посредством PRESSKEY. Процедура ALIAS действует глобально - для всех процессов - независимо от того, где она исполняется. Поэтому, если нужно ограничить действие замены кода клавиши, то необходимо возвратить все ALIAS-клавиши в исходное состояние когда фокус ввода переходит к другому окну.

В качестве значения нового кода может быть использовано значение из диапазона от 0800h до 0FFFFh. Практическое применение этому – заменить первоначальный код клавиши на новый код, если программа не проходит тест с этим кодом клавиши.

Пример:

ALIAS(EnterKey,TabKey) !Вместо Tab можно нажимать Enter

ALIAS(F3Key,F1Key) !Теперь Help будет на F3

ALIAS !Отменит все переназначения

Смотри также: KEYCODE

 

ALL (повторение символов)

ALL(строка [,длина])

ALL Возвращает строку, повторенную несколько раз.

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

длина Длина возвращаемой строки. Если этот параметр опущен, то возвращается строка в 255 символов.

Процедура ALL возвращает строку, содержащую повторения некоторой последовательности символов.

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

Пример:

Starline = ALL('*',25) !Взять 25 звездочек

Dotline = ALL('.') !Взять 255 точек

 

APPEND (добавить новую запись)

APPEND(файл [,длина])

APPEND Добавляет новую запись к концу файла.

файл Метка структуры FILE, описывающей файл.

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

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

Обычно оператор APPEND используется для “пакетного” добавления за один раз большого числа записей. Для большинства файловых систем значительно быстрее будет добавить 5000 записей в фaйл, используя APPEND (и затем в конце процесса запустить BUILD для единовременного перестроения ключей), чем использовать для добавления 5000 записей ADD (который автоматически перестраивает ключ с каждой добавленной записью).

Если сгенерировано какое-либо сообщение об ошибке, то запись в файл не добавляется. В случае отсутствия свободного пространства на диске генерируется сообщение об ошибке "Access Denied".

Генерируемые сообщения об ошибках:

05 Access Denied (Доступ запрещен)

37 File Not Open (Файл не открыт)

Пример:

LOOP !Цикл по обработке входного файла

NEXT(InFile) !чтение каждой записи

IF ERRORCODE() !и проверка ошибок

BREAK

END

Cus:Record = Inf:Record !Копировать данные в запись о клиенте

APPEND(Customer) !и добавить запись

IF ERRORCODE() !проверка ошибок

STOP(ERROR())

END

END

BUILD(Customer) !Построить ключи

Смотри также: BUILD, ADD

 

ARC (нарисовать дугу эллипса)

ARC( x ,y ,ширина ,высота,начальный угол ,конечный угол [,список атрибутов] )

ARC Рисует дугу эллипса в текущем окне или документе.

x Целочисленное выражение для указания горизонтального положения начальной точки.

y Целочисленное выражение для указания вертикального положения начальной точки.

ширина Целочисленное выражение для указания ширины.

высота Целочисленное выражение для указания высоты.

угол_нач Целочисленное выражение, определяющее начальную точку дуги. Указывается в десятых долях градуса (10=1 градус). Отсчет угла производится против часовой стрелки, начиная с трех часов.

угол_кон Целочисленное выражение, определяющее конечную точку дуги. Указывается в десятых долях градуса (10=1 градус). Отсчет угла производится против часовой стрелки, начиная с трех часов.

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

Процедура ARC рисует дугу эллипса в текущем объекте. Эллипс прорисовывается внутри “ограничивающего прямоугольника”, размеры которого определяются параметрами x, y, ширина и высота. Параметры x и y определяют начальную точку, а параметры ширина и высота определяют горизонтальный и вертикальный размеры “ограничивающего прямоугольника”.

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

Цвет линии эллипса - цвет, установленный оператором SETPENCOLOR для текущего пера. Цвет по умолчанию - цвет, установленный Windows для текста окна. Толщина линии - текущая толщина, установленная SETPENWIDTH, толщина по умолчанию – один пиксел. Тип линии - тип линии, установленный SETPENSTYLE для текущего пера, тип линии по умолчанию - сплошная линия.

Пример:

MDIChild WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!управляющие поля окна

END

CODE

OPEN(MDIChild)

ARC(100,50,100,50,0,900) !Изобразить дугу в 90 градусов от3 до 12 часов как

!дугу верхнего правого квадранта эллипса

Смотри также: Текущий объект, SETPENCOLOR, SETPENWIDTH, SETPENSTYLE

 

ASK (ждать нажатие клавиши)

ASK

ASK считывает из буфера клавиатуры код нажатой клавиши. Исполнение программы приостанавливается в ожидании нажатия клавиши. Если код нажатия уже помещен в буфер клавиатуры, то ASK считывает его без ожидания. Оператор ASK дает возможность произойти событиям, обусловленным атрибутом TIMER, при этом для обработки каждого события активизируется “свой” ACCEPT-цикл. Это обстоятельство позволяет другим процессам “обслуживать” TIMER-события во время выполнения данным процессом процедуры пакетной обработки данных.

Пример:

ASK !Ждать нажатия клавиши

LOOP WHILE KEYBOARD() !Очистить буфер клавиатуры

ASK !без обработки нажатых клавиш

END

Смотри также: KEYCODE, KEYBOARD

 

ASIN (арксинус)

ASIN(выражение)

ASIN Возвращает арксинус.

выражение Числовая константа, переменная или выражение, представляющая собой синус угла.

Процедура ASIN возвращает арксинус. Арксинус значения синуса угла - это сам угол, который дает это значение. Возвращаемое значение представляет собой угол, выраженный в радианах. Пи – это константа, которая представляет собой отношение длины окружности к радиусу круга. Здесь 2π радиана (или 360 градусов) в круге.

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

Пример:

PI EQUATE(3.1415926535898) !Значение PI

Rad2Deg EQUATE(57.295779513082) !Число градусов в радиане

Deg2Rad EQUATE(0.0174532925199) !Число радиан в градусе

CODE

InvSine = ASIN(SineAngle) !Получить арксинус

Смотри также: TAN, ATAN, SIN, COS, ACOS

 

ATAN (арктангенс)

ATAN(выражение)

ATAN Возвращает арктангенс.

выражение Числовая константа, переменная или выражение, представляющая собой тангенс угла.


Процедура
ATAN возвращает арктангенс. Арктангенс значения тангенса угла - это сам угол, который дает это значение. Возвращаемое значение представляет собой угол, выраженный в радианах. Пи – это константа, которая представляет собой отношение длины окружности к радиусу круга. Здесь 2π радиана (или 360 градусов) в круге.

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

Пример:

PI EQUATE(3.1415926535898) !Значение PI

Rad2Deg EQUATE(57.295779513082) !Число градусов в радиане

Deg2Rad EQUATE(0.0174532925199) !Число радиан в градусе

CODE

InvTangent = ATAN(TangentAngle) !Получить арктангенс

Смотри также: TAN, SIN, ASIN, COS, ACOS

 

BAND (поразрядное И)

BAND(значение,маска)

BAND Выполняет поразрядную операцию логическое И.

значение Числовая константа, переменная или выражение, битовое значение которого сопоставляется с маской. Если это необходимо, то перед выполнением операции значение преобразуется к типу LОNG.

маска Числовая константа, переменная или выражение, представляющее битовую маску. Если это необходимо, то перед выполнением операции маска преобразуется к типу LОNG.

Процедура BAND сопоставляет значение с маской, выполняя операцию поразрядного И между битом значения и битом маски. Возвращаемое значение представляет собой длинное целое (LONG), содержащее единицу (1) в тех позициях битов, где и значение и маска содержат единицу (1), и содержащее ноль в других позициях битов.

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

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

Пример:

!BAND(0110b,0010b) возвращает 0010b !0110b = 6, 0010b = 2

RateType BYTE !Тип расценки

Female EQUATE(0001b) !Маска для женщин

Male EQUATE(0010b) !Маска для мужчин

Over25 EQUATE(0100b) !Маска возраста старше 25

CODE

IF BAND(RateType,Female)| !Если женщина

AND BAND(RateType,Over25) !и старше 25-ти

DO BaseRate !использовать основную премию

ELSIF BAND(RateType,Male) !Если мужчина

DO AdjBase !скорректировать основную премию

Смотри также: BOR, BXOR, BSHIFT

 

BEEP (подать звуковой сигнал)

BEEP( [звук] )

BEEP Генерирует подачу звукового сигнала через динамик.

звук Числовая константа, переменная, выражение или мнемоническое имя для подачи звукового сигнала в Windows.

Оператор BEEP устанавливает подачу звукового сигнала через динамик системного блока компьютера. Это стандартные звуковые сигналы описанные в разделе [sound] файла WIN.INI . Операторы EQUATE для стандартных значений содержатся в файле EQUATES.CLW .

BEEP:SystemDefault

BEEP:SystemHand

BEEP:SystemQuestion

BEEP:SystemExclamation

BEEP:SystemAsterisk

Пример:

IF ERRORCODE() !Если непредвиденная ошибка

BEEP(BEEP:SystemDefault) !подать стандартный сигнал

STOP(ERROR()) !остановиться по ошибке

END

 

BLANK (стереть графические изображения)

BLANK( [x] [,y] [,ширина] [,высота] )

BLANK Стирает все графические изображения, попадающие в указанную область окна или документа.

x Целочисленное выражение для указания горизонтального положения начальной точки. Если параметр не указан, то по умолчанию равен нулю.

y Целочисленное выражение для указания вертикального положения начальной точки. Если параметр не указан, то по умолчанию равен нулю.

ширина Целочисленное выражение для указания ширины. Если параметр не указан, то по умолчанию равен ширине окна.

высота Целочисленное выражение для указания высоты. Если параметр не указан, то по умолчанию равен высоте окна.

Процедура BLANK стирает все графические изображения, попадающие в указанную область окна или документа. Управляющие поля не стираются. BLANK без параметров стирает во всем окне или документе.

Пример:

MDIChild WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!Управляющие поля окна

END

CODE

OPEN(MDIChild)

ARC(100,50,100,50,0,900) !Нарисовать дугу

BLANK !затем стереть ее

Смотри также: Текущий объект

 

BOR (поразрядное ИЛИ)

BOR(значение,маска)

BOR Выполняет поразрядную операцию логическое ИЛИ.

значение Числовая константа, переменная или выражение, битовое значение которого сопоставляется с маской. Если это необходимо, то перед выполнением операции значение преобразуется к типу LОNG.

маска Числовая константа, переменная или выражение, представляющее битовую маску. Если это необходимо, то перед выполнением операции маска преобразуется к типу LОNG.

Процедура BOR сопоставляет значение с маской, выполняя операцию поразрядного ИЛИ над битом значения и битом маски. Возвращаемое значение представляет собой длинное целое (LONG), содержащее единицу (1) в тех позициях битов, где значение, или маска, или оба эти параметра содержат единицу (1), и содержащее ноль в других позициях битов.

Обычно процедура BOR используется для безусловного включения (установки в 1) отдельного бита (или нескольких битов) в переменной.

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

Пример:

!BOR(0110b,0010b) возвращает 0110b !0110b = 6, 0010b = 2

RateType BYTE !Тип расценки

Female EQUATE(0001b) !Маска для женщин

Male EQUATE(0010b) !Маска для мужчин

Over25 EQUATE(0100b) !Маска возраста старше 25

CODE

RateType = BOR(RateType,Over25) !Включить бит возраста старше 25

RateType = BOR(RateType,Male) !Установить расценку для мужчин

Смотри также: BAND, BXOR, BSHIFT

 

BOX (нарисовать прямоугольник)

BOX( x ,y ,ширина ,высота [,заполнение] [,список атрибутов])

BOX Рисует прямоугольник в текущем окне или документе.

x Целочисленное выражение для указания горизонтального положения начальной точки.

y Целочисленное выражение для указания вертикального положения начальной точки.

ширина Целочисленное выражение для указания ширины.

высота Целочисленное выражение для указания высоты.

заполнение Целочисленная константа типа LONG, символическое имя, переменная, в трех младших байтах (байты 0, 1 и 2) которых находятся красная зеленая и синяя компоненты цвета или символическое имя для значения стандартного цвета Windows.

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

Процедура BOX рисует прямоугольник в текущем окне или документе. Положение и размеры прямоугольника определяются параметрами x, y, ширина и высота.

Параметры x и y определяют начальную точку, а параметры ширина и высота определяют горизонтальный и вертикальный размеры прямоугольника. Прямоугольник распространяется вправо и вниз от начальной точки.

Цвет линии прямоугольника - цвет, установленный оператором SETPENCOLOR для текущего пера. Цвет по умолчанию - цвет, установленный Windows для текста окна. Толщина линии - текущая толщина, установленная SETPENWIDTH, толщина по умолчанию - один пиксел. Тип линии - тип линии, установленный SETPENSTYLE для текущего пера, тип линии по умолчанию - сплошная линия.

Пример:

MDIChild WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!экранные объекты

END

CODE

OPEN(MDIChild)

BOX(100,50,100,50,00FF0000h) !Красный прямоугольник

Смотри также: Текущий объект, SETPENCOLOR, SETPENWIDTH, SETPENSTYLE

 

BSHIFT (поразрядный сдвиг)

BSHIFT(значение,счетчик)

BSHIFT Выполняет операцию сдвига битов.

значение Числовая константа, переменная или выражение. Если это необходимо, то перед выполнением операции значение преобразуется к типу LОNG.

счетчик Числовая константа, переменная или выражение представляющее число битов, на которое значение должно сдвигаться. Если счетчик положителен, то значение сдвигается влево. Если счетчик отрицательный, то значение сдвигается вправо.

Процедура BSHIFT сдвигает битовое значение на величину, указанную счетчиком битов. Битовое значение может быть сдвинуто влево (в сторону старших разрядов) или вправо (в сторону младших разрядов). Возникающие свободные позиции заполняют нулевые биты.

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

Пример:

!BSHIFT(0110b,1) возвращает 1100b

!BSHIFT(0110b,-1) возвращает 0011b

Varswitch = BSHIFT(20,3) !Умножить на восемь

Varswitch = BSHIFT(Varswitch,-2) !Разделить на четыре

Смотри также: BAND, BOR, BXOR

 

BUFFER (установить постраничную буферизацию записей)

BUFFER( структура [, размер страницы ] [, позади ] [, впереди ] [, перерыв ] )

BUFFER Определяет постраничную буферизацию FILE- или VIEW-структуры.

структура Метка соответствия FILE- или VIEW-структуры.

размер страницы Целочисленная константа или переменная, которая определяет количество записей в одной “странице” записей (PROP:FetchSize). Если параметр пропущен, то значением по умолчанию является единица (1).

позади Целочисленная константа или переменная, которая определяет количество “страниц” записей, которые следует хранить после того, как они были прочитаны. Если параметр пропущен, то значением по умолчанию является ноль (0).

впереди Целочисленная константа или переменная, определяющая количество дополнительных “страниц” записей, которые должны быть считаны вперед отображаемой. Если параметр пропущен, то значением по умолчанию является ноль (0).

перерыв Целочисленная константа или переменная, определяющая количество секунд, в течение которых буферизованные записи не считаются устаревшими при работе в сетевом окружении. Если параметр пропущен, то значением по умолчанию является ноль (0), что означает отсутствие ограничений по времени.

 

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

Количество записей в одной “странице” записей определяется параметром размер страницы. Это также является количеством записей выбранных одним вызовом с базы данных. Параметр впереди определяет асинхронное упреждающее чтение соответствующего количества страниц, в то время как параметр позади сохраняет страницы уже прочитанных записей.

Записи в буфере должны быть соседними. Поэтому установка SET на ту область структуры, которая в настоящее время не находится в буфере, а также при изменении порядка сортировки или условия фильтрации записей во VIEW приведет к очистке буфера. Буферы остаются активными до тех пор, пока структура не будет закрыта, или пока не сработает оператор FLUSH. Результаты работы операторов ADD, PUT или DELETE отражаются на содержании буферов, однако это может привести к неявному сбрасыванию, если PUT изменит компоненты ключа или ADD добавит запись, не находящуюся в пределах текущего смежного набора буферизованных записей.

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

Оператор BUFFER поддерживается не всеми файловыми драйверами. Для дополнительной информации обратитесь к документации соответствующего файлового драйвера.

 

Пример:

CODE

OPEN(MyView)

BUFFER(MyView,10,5,2,300) !по 10 записей на страницу, 5 страниц хранить и

!2 считывать вперед, с 5-минутным перерывом

CODE

OPEN(MyFile)

BUFFER(MyFile,10,5,2,300) !по 10 записей на страницу, 5 страниц хранить и

!2 считывать вперед, с 5-минутным перерывом

Смотри также: FLUSH

 

BUILD (построить ключ или индекс)

| файл |

BUILD( |индекс | [, составляющие [, фильтр ] ] )

| ключ |

BUILD Построить ключи или индексы.

файл Метка объявления файла.

индекс Метка объявления индекса.

ключ Метка объявления ключа.

составляющие Строковая константа или переменная, содержащая список полей, по которым строится динамический индекс. Имена полей должны разделяться запятыми. Перед именем поля ставится символ плюс (+) или минус (-) для того, чтобы обозначить возрастающую или убывающую последовательность сортировки (если это поддерживается файловым драйвером).

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

 

Оператор BUILD строит ключи и индексы в файле.

BUILD(файл)

Строятся все ключи объявленные в файле. Файл должен быть закрыт, заблокирован оператором LOCK или открываться с режимом доступа 12h (чтение/запись, полный запрет) или 22h (чтение/запись, запрет записи). Смотри также: FULLBUILD.

BUILD(ключ) или BUILD(индекс)

Строятся только указанные ключи или индексы. Файл должен быть закрыт, заблокирован оператором LOCK или открываться с режимом доступа 12h (чтение/запись, полный запрет) или 22h (чтение/запись, запрет записи).

BUILD(индекс,составляющие,фильтр)

Строятся динамические индексы. Эта форма не требует исключительного доступа к файлу, однако файл должен быть открыт (с любым допустимым режимом доступа). Динамический индекс создается в виде временного файла и исключительно для того пользователя, который выдал команду BUILD. Во время закрытия файла временный файл индекса автоматически удаляется. Если указан фильтр, то динамический индекс, будет содержать только записи, которые удовлетворяют критерию фильтра. Фильтр должен иметь форму, поддерживаемую файловым драйвером.

BUILD будет генерировать события для текущего открытого окна, если перед запуском процесса BUILD для файла, вы присвоите значение (целое от 1 до 100) свойству PROP:ProgressEvents. Чем большее значение вы присвоите этому свойству, тем больше событий будет генерироваться и тем медленнее будет происходить процесс BUILD. Эти события позволяют показывать пользователю процесс выполнения BUILD. Этим самым конечный пользователь информируется о выполнении построения ключей в больших файлах (чтобы он не считал, что компьютер завис и не перегрузил его).

Не нужно делать никаких запросов к файлу во время его перестроения, кроме запросов его свойств, вызов NAME(файл), или CLOSE(файл) (который прекратит процесс, что не рекомендуется). Выполнение оператора CYCLE в ответ на любое сгенерированное событие (кроме EVENT:BuildDone) отменяет операцию. Во время процесса BUILD свойство файл{PROP:Completed} вернет процент завершения перестроения. Вы также можете использовать свойство файл{PROP:CurrentKey} чтобы получить указатель на ключ, чтобы затем с помощью свойства ключ{PROP:Name} или ключ{PROP:Label} получить имя ключа, который в текущий момент обрабатывается.

Выдаваемые сообщения об ошибках:

37 File Not Open (Файл не открыт)

40 Creates Duplicate Key (Создается дублирующий ключ)

63 Exclusive Access Required (Требуется исключительный доступ)

76 Invalid Index String (Ошибка в строке составляющих индекса)

93 BUILD Cancelled (Перестройка отменена)

Генерируемые события:

EVENT:BuildFile BUILD(file) перестраивающаяся порция данных файла.

EVENT:BuildKey BUILD(key) или BUILD(index) – перестраивающийся ключ, или BUILD(file) – перестраивающиеся ключи в файле.

EVENT:BuildDone Процесс BUILD завершен. Если пользователь отменил BUILD, устанавливается ERRORCODE 93.

Пример:

Names FILE,DRIVER('TopSpeed'),PRE(Nam) !Объявить структуру FILE

NameKey KEY(Nam:Name),OPT !Объявить ключ по полю name

NbrNdx INDEX(Nam:Number),OPT !Объявить индекс по полю number

DynNdx INDEX() !Объявить динамический индекс

Rec RECORD

Name STRING(20),NAME('Nam:Name')

Number SHORT,NAME('Nam:Number')

END

END

CODE

OPEN(Names,12h) !Открыть файл в режиме исключительного доступа

BUILD(Names) !Построить все ключи для файла

BUILD(Nam:NbrNdx) ! Построить индекс по полю number

! Построить динамический индекс по возрастанию номеров и возрастанию имен:

BUILD(Nam:DynNdx,'+Nam:Number,+Nam:Name')

BIND('Nam:Name',Nam:Name) !Связать переменную фильтра

!Построить динамический индекс имен, начинающ. с А:

BUILD(Nam:DynNdx,'+Nam:Name','UPPER(Nam:Name[1]) = A')

UNBIND('Nam:Name') !Освободить переменную фильтра

Смотри также: OPEN, SHARE, BIND, PROP:ProgressEvents, PROP:Completed

 

BXOR (поразрядное исключающее ИЛИ)

BXOR(значение,маска)

BXOR Выполняет поразрядную операцию исключающее ИЛИ.

значение Числовая константа, переменная или выражение, битовое значение которого сопоставляется с маской. Если это необходимо, то перед выполнением операции значение преобразуется к типу LОNG.

маска Числовая константа, переменная или выражение, представляющее битовую маску. Если это необходимо, то перед выполнением операции маска преобразуется к типу LОNG.

Процедура BXOR сопоставляет значение с маской, выполняя операцию поразрядного исключающего ИЛИ над битом значения и битом маски. Возвращаемое значение представляет собой длинное целое (LONG), содержащее единицу (1) в тех позициях битов, где значение, или маска, но не оба эти параметры содержат единицу (1). Нули возвращаются в тех позициях, где биты значения и маски одинаковы.

Обычно процедура BOR используется для переключения (установки в 0 или 1) отдельного бита (или нескольких битов) в переменной.

 

 

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

Пример:

!BXOR(0110b,0010b) возвращает 0100b !0110b = 6, 0100b = 4, 0010b = 2

RateType BYTE !Тип расценки

Female EQUATE(0001b) !Маска для женщин

Male EQUATE(0010b) !Маска для мужчин

Over25 EQUATE(0100b) !Маска возраста старше 25

Over65 EQUATE(1100b) !Маска возраста старше 65

CODE

RateType = BXOR(RateType,Over65) !Переключить биты возраста старше 65

Смотри также: BAND, BOR, BSHIFT

 

BYTES (получить размер файла в байтах)

BYTES(файл)

BYTES Возвращает размер файла или последней прочитанной записи в байтах.

файл Метка объявления структуры FILE.

Процедура BYTES возвращает размер файла в байтах или число байт в записи, к которой было последнее обращение. Сразу после выполнения оператора OPEN эта процедура возвращает размер файла. Свойство файл{PROP:FileSize} эквивалентно процедуре BYTES после открытия файла и также возвращает число байт в файле. После того, как к этому файлу были обращения с помощью операторов GET, REGET, NEXT, PREVIOUS, ADD и PUT, процедура BYTES возвращает число байт в записи, к которой осуществлялся доступ. Эту процедуру можно использовать для того, чтобы получать число байт, прочитанных в записи переменной длины.

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

 

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

Пример:

DosFileName STRING(260),STATIC

LastRec LONG

SavPtr LONG(1) !Начинается с 1

FileSize LONG

DosFile FILE,DRIVER('DOS'),PRE(DOS),NAME(DosFileName)

Record RECORD

F1 STRING(2000)

END

END

BlobStorage FILE,DRIVER('TopSpeed'),PRE(STO)

File BLOB,BINARY

Record RECORD

FileName STRING(64)

END

END

CODE

IF NOT FILEDIALOG('Choose File to Store',DosFileName,,0010b)

RETURN

END

OPEN(BlobStorage) !Открыть файл BLOB

STO:FileName = DosFileName !и сохранить имя файла

OPEN(DosFile) !Открыть файл

FileSize = BYTES(DosFile) !Получить размер файла

STO:File{PROP:Size} = FileSize !и установить BLOB для хранения файла

LastRec = FileSize % SIZE(DOS:Record) !Проверить неполную запись в конце файла

LOOP INT(FileSize/SIZE(DOS:Record)) TIMES

GET(DosFile,SavPtr) !Получить запись

ASSERT(NOT ERRORCODE())

!String slice data into BLOB:

STO:File[SavPtr - 1 : SavPtr + SIZE(DOS:Record) - 2] = DOS:Record

SavPtr += SIZE(DOS:Record) !Вычислить следующий указатель на запись

END

IF LastRec !Если в конце файла неполная запись

GET(DosFile,SavPtr) !Получить последнюю запись

ASSERT(BYTES(DosFile) = LastRec) !размер чтения должен соответствовать

!вычисленному размеру

STO:File[SavPtr - 1 : SavPtr + LastRec - 2] = DOS:Record

END

ADD(BlobStorage)

ASSERT(NOT ERRORCODE())

CLOSE(DosFile);CLOSE(BlobStorage)

Смотри также: OPEN, PROP:FileSize

 

CALL (обратиться к процедуре из DLL)

CALL( файл, процедура [, флаги ] )

CALL Обращается к процедуре, которая представлена прототипом в структуре MAP программы, и которая располагается в стандартном DLL Windows.

файл Строковая константа, переменная или выражение, содержащее имя (с расширением) файла DLL, который следует открыть. Она может содержать полный путь к библиотеке.

процедура Строковая константа, переменная или выражение, содержащее имя процедуры, которую следует вызвать (которая не может принимать параметров и возвращать значение). Она может содержать порядковый номер процедуры в .DLL.

флаги Целочисленная константа типа UNSIGNED, переменная или выражение содержащая установки битов флага.

Процедура CALL позволяет обратиться к процедуре, которая располагается в стандартном DLL Windows. Эту процедуру не нужно описывать прототипом в структуре MAP программы. Файл DLL загружается в память (если он еще не был загружен). Файл .DLL автоматически выгружается из памяти при завершении процедуры, если младший бит флагов не установлен в единицу (1). Загруженный файл .DLL может быть явно выгружен из памяти процедурой UNLOAD.

Процедура CALL возвращает ноль (0) в случае успешного обращения к процедуре, и один из следующих кодов ошибки в противном случае или любой другой возможный код уровня ошибки Windows:

-1 Имя процедуры не может располагаться в указанном .DLL

2 Файл не найден

3 Путь не найден

5 Попытка загрузить программу, а не библиотеку

6 Библиотека требует отдельных сегментов данных для каждой задачи

10 Неверная версия Windows

11 Неверная структура файла .EXE (программа для DOS или ошибка в заголовке программы)

12 Прикладная программа для OS/2

13 Прикладная программа для DOS 4.0

14 Неизвестный тип .EXE модуля

15 Попытка загрузить .EXE модуль для более ранней версии Windows. Эта ошибка не возникает, если Windows работает в реальном режиме

16 Попытка загрузить вторую копию .EXE модуля, содержащий несколько сегментов данных допускающих запись в них

17 Ошибка EMS памяти при второй загрузке .DLL

18 Попытка загрузить прикладную программу для защищенного режима, в то время как Windows работает в реальном.

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

Пример:

X# = CALL('CUSTOM.DLL','1') !Вызвать первую процедуру в библиотеке CUSTOM.DLL

IF X# THEN STOP(X#). !Проверить успешность выполнения

Смотри также: UNLOAD

 

CALLBACK (регистрировать или разрегистрировать FileCallBackInterface)

CALLBACK(объект, интерфейс обратного вызова, [флаг])

CALLBACK Регистрирует или разрегистрирует FileCallBackInterface.

объект Метка структуры файла или VIEW.

интерфейс обратного вызова

Метка интерфейса, который реализует интерфейс обратного вызова. Методы FileCallbackInterface вызываются автоматически перед (метод FunctionCalled) и после (FunctionDone) каждой операции с файлом.

флаг Целочисленная константа, переменная, метка соответствия или выражение указывающая не зарегистрирован ли интерфейс с файлом или виртуальным файлом. Значение единицы (1 или TRUE) разрегистрирует интерфейс. Если опущен, интерфейс зарегистрирован объектом.

Методы обратного вызова регистрируют интерфейс обратного вызова с указанным объектом. Методы обратного интерфейса вызываются всякий раз, когда выполняется операция с файлом. С объектом может быть зарегистрировано несколько интерфейсов.

Чтобы разрегистрировать интерфейс, установите флаг в истину (true). Все зарегистрированные интерфейсы должны быть разрегистрированы до того, как объект, реализующий интерфейс, будет удален.

Пример:

PROGRAM

MAP

END

INCLUDE ('FILECB.INC'),ONCE

!Data file

People FILE,DRIVER('TOPSPEED'),PRE(PEO),CREATE,BINDABLE,THREAD

KeyId KEY(PEO:Id),NOCASE,OPT

KeyLastName KEY(PEO:LastName),DUP,NOCASE

Record RECORD,PRE()

Id LONG

FirstName STRING(30)

LastName STRING(30)

Gender LONG

END

END

!Log File

LogFile FILE,DRIVER('BASIC','/ALWAYSQUOTE=OFF /COMMA=1,1'),CREATE,NAME('logfile.txt')

Record RECORD

Operation STRING(200)

END

END

!FileCallBack Class

FCB CLASS,IMPLEMENTS(FileCallBackInterface)

END

CODE

CALLBACK(People, FCB.FileCallBackInterface) !Зарегистрировать интерфейс FCB

CREATE(Logfile) !Создать лог-файл

OPEN(Logfile) !Открыть лог-файл

OPEN(People) !Открыть файл с данными

SET(PEO:KeyId, PEO:KeyID) !Установить указатель и

LOOP !идти по файлу

NEXT(People) !до тех пор пока

IF ERRORCODE()

BREAK !не дойдем до конца файла

END

END

CLOSE(People) !Закрыть файл с данными

!Разрегистрировать интерфейс FCB:

CALLBACK(People, FCB.FileCallBackInterface, TRUE)

!Этот метод вызывается перед каждой операцией с файлом данных.

!Лог-файл модифицируется операциями с файлом.

FCB.FileCallBackInterface.FunctionCalled |

PROCEDURE(SIGNED opCode, *Params Parameters, *CSTRING ErrCode, *CSTRING ErrMsg)

p LIKE(Params)

CODE

p = Parameters

IF p.View &= NULL !used to detect VIEW or FILE callback

f = 'FILE'

ELSE

f = 'VIEW'

END

CASE opCode

OF DriverOp:ADD

logFile.Operation = 'ADD(f)'

OF DriverOp:APPEND

logFile.Operation = 'APPEND(f)'

OF DriverOp:CLOSE

logFile.Operation = 'CLOSE(f)'

OF DriverOp:COPY

logFile.Operation = 'COPY(f,'''&CLIP(Parameters.Text)&''')'

OF DriverOp:CREATE

logFile.Operation = 'CREATE(f)'

OF DriverOp:DELETE

logFile.Operation = 'DELETE(f)'

OF DriverOp:NEXT

logFile.Operation = 'NEXT(f)'

OF DriverOp:OPEN

logFile.Operation = 'OPEN(f,'&Parameters.openMode&')'

OF DriverOp:PUT

logFile.Operation = 'PUT(f)'

OF DriverOp:SETkeykey

logFile.Operation = 'SET(k,k)'

END

ADD(logFile)

RETURN TRUE

!Этот метод вызывается после каждой операции с файлом данных.

!Он просто возвращает истину в соответствиями с правилами FileCallBackInterface.

FCB.FileCallBackInterface.FunctionDone |

PROCEDURE(SIGNED opCode, Params Parameters, *CSTRING ErrCode, *CSTRING ErrMsg)

CODE

RETURN TRUE

 

Дополнительный пример:

PROGRAM

INCLUDE('FILECB.INC')

MAP

viewTest(VIEW v)

check(STRING msg)

Test(STRING Name, FILE log, FILE f, VIEW v1, VIEW v2)

END

Dept FILE,DRIVER('Memory'),NAME('DEPT'),PRE(DEP),CREATE

PK_DEPT KEY(DEP:DEPTNO),PRIMARY

Record RECORD

DEPTNO BYTE

DNAME CSTRING(15)

LOC CSTRING(14)

END

END

LogFile FILE,DRIVER('ASCII'),CREATE,NAME('CB.LOG')

Record RECORD

Line STRING(100)

END

END

MyClass CLASS,IMPLEMENTS(FileCallBackInterface),TYPE

Name CSTRING(30),PRIVATE

logf &FILE,PRIVATE

baseF &FILE,PRIVATE

line ANY,PRIVATE

inView BOOL,PRIVATE

Init PROCEDURE(STRING n, FILE f, FILE log)

Kill PROCEDURE()

END

MemoryFile MyClass

ISAMView MyClass

iView1 VIEW(Dept).

iView2 VIEW(Dept).

CODE

CREATE(LogFile)

Check('Create LogFile')

OPEN(LogFile)

Check('OPEN LogFile')

MemoryFile.Init('Memory', Dept, LogFile)

ISAMView.Init('ISAMView', iView1, LogFile)

CREATE(Dept)

Check('Create Dept')

Test('Memory', LogFile, Dept, iView1, iView2)

MemoryFile.Kill()

ISAMView.Kill()

MESSAGE('Done')

viewTest PROCEDURE(VIEW v)

CODE

OPEN(v)

SET(v)

NEXT(v)

CLOSE(v)

Check PROCEDURE(STRING msg)

CODE

IF ERRORCODE()

IF ERRORCODE() = 90

HALT(1, msg & ' caused system error ' & FILEERRORCODE() & ' : ' |

& FILEERROR())

END

HALT(1, msg & ' caused error ' & ERRORCODE() & ' : ' & ERROR())

END

Test PROCEDURE(STRING msg, FILE log, FILE f, VIEW v1, VIEW v2)

g &GROUP

l ANY

CODE

g &= log{PROP:Record}

l &= WHAT(g, 1)

l = '!File Operations'

ADD(log)

OPEN(f)

Check(msg & ' OPEN')

SET(f)

NEXT(f)

l = '!View 1 Operations'

ADD(log)

viewTest(v1)

l = '!View 2 Operations'

ADD(log)

viewTest(v2)

l = '!Done'

ADD(log)

CLOSE(f)

MyClass.Init PROCEDURE(STRING n, FILE f, FILE log)

g &GROUP

CODE

CALLBACK(f, SELF.FileCallBackInterface)

SELF.logf &= log

SELF.basef &= f

SELF.Name = CLIP(n)

g &= SELF.logf{PROP:Record}

SELF.line &= WHAT(g, 1)

MyClass.Kill PROCEDURE()

CODE

CALLBACK(SELF.baseF, SELF.FileCallBackInterface, TRUE)

Check('Uncallback ' & SELF.Name)

SELF.line &= NULL

MyClass.FileCallBackInterface.FunctionCalled PROCEDURE(SIGNED opCode, |

*Params Parameters, *CSTRING ErrCode, *CSTRING ErrMsg)

p LIKE(Params)

f CSTRING(5),AUTO

logit BOOL(true)

CODE

p = Parameters

IF p.View &= NULL

f = 'FILE'

ELSE

f = 'VIEW'

END

CASE opCode

OF DriverOp:Create

SELF.line = 'CREATE(' & f & ' ' & SELF.Name & ')'

OF DriverOp:NEXT

SELF.line = 'NEXT(' & f & ' ' & SELF.Name & ')'

OF DriverOp:OPEN

SELF.line = 'OPEN(' & f & ' ' & SELF.Name & ','&Parameters.openMode&')'

OF DriverOp:PUT

SELF.line = 'PUT(' & f & ' ' & SELF.Name & ')'

OF DriverOp:VIEWSTART

SELF.InView = TRUE

logit = FALSE

OF DriverOp:VIEWSTOP

SELF.InView = FALSE

logit = FALSE

ELSE

logit = FALSE

END

IF logit AND ~SELF.InView

ADD(SELF.logF)

END

RETURN TRUE

MyClass.FileCallBackInterface.FunctionDone |

PROCEDURE(SIGNED opCode, Params Parameters, *CSTRING ErrCode, |

*CSTRING ErrMsg)

CODE

RETURN TRUE

Программа выше создаст лог-файл подобно этому:

CREATE(FILE Memory)

!File Operations

OPEN(FILE Memory,34)

NEXT(FILE Memory)

!View 1 Operations

OPEN(FILE ISAMView,34)

OPEN(VIEW Memory,34)

NEXT(FILE ISAMView)

NEXT(VIEW Memory)

!View 2 Operations

OPEN(VIEW Memory,34)

NEXT(VIEW Memory)

!Done

 

CENTER (центрировать строку)

CENTER(строка [,длина])

CENTER Возвращает центрированную строку.

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

длина Длина возвращаемой строки. Если этот параметр опущен, то в этом качестве используется длина строки.

Процедура CENTER сначала удаляет пробелы в начале и в конце строки, затем, чтобы центрировать оставшуюся часть в рамках заданной длины дополняет слева и справа пробелами и возвращает отцентрированную строку.

 

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

Пример:

!CENTER('ABC',5) возвращает ' ABC '

!CENTER('ABC ') возвращает ' ABC '

!CENTER(' ABC') возвращает ' ABC '

Message = CENTER(Message) !Центрировать сообщение

Rpt:Title = CENTER(Name,60) !Центрировать имя

Смотри также: LEFT, RIGHT

 

CHAIN (выполнить другую программу)

CHAIN(программа)

CHAIN Заканчивает выполнение текущей программы и выполняет другую программу.

программа Строковая константа или переменная, содержащая имя программы (и необязательные параметры), которая должна быть выполнена. Это может быть любая программа (.EXE или .COM).

Оператор СНАIN прерывает выполнение текущей программы, закрывает все файлы, возвращает занимаемую память операционной системе и сообщает ей о необходимости выполнить другую программу.

Пример:

PROGRAM !Программа главного меню

CODE

EXECUTE CHOICE()

CHAIN('Ledger') !Выполнить LEDGER.EXE

CHAIN('Payroll /Test=1 /N=2') !Выполнить PAYROLL.EXE с параметрами

RETURN !Вернуться в O/S

END

PROGRAM !Фрагмент программы Ledger

CODE

EXECUTE CHOICE()

CHAIN('MainMenu') !Вернуться в главное меню

RETURN !Вернуться в O/S

END

PROGRAM !Код программы Payroll

CODE

EXECUTE CHOICE()

CHAIN('MainMenu') !Вернуться в главное меню

RETURN !Вернуться в O/S

END

Смотри также: RUN

 

CHANGE (изменить значение поля)

CHANGE(поле,значение)

CHANGE Изменяет значение отображаемого поля в структуре APPLICATION или WINDOW .

поле Номер или метка соответствия управляющего поля окна.

значение Константа или переменная, содержащая новое значение для поля.

Оператор CHANGE изменяет значение, отображаемое в поле структур APPLICATION или WINDOW. Содержимое USE-переменной поля заменяется новым значением, и это новое значение отображается в окне.

Пример:

Screen WINDOW,PRE(Scr)

ENTRY(@N3),USE(Ctl:Code)

ENTRY(@S30),USE(Ctl:Name)

BUTTON('OK'),USE(?OkButton),KEY(EnterKey)

BUTTON('Cancel'),USE(?CanxButton),KEY(EscKey)

END

CODE

OPEN(Screen)

ACCEPT

CASE EVENT()

OF EVENT:Selected

CASE SELECTED()

OF ?Ctl:Code

CHANGE(?Ctl:Code,4) !Заменить Ctl:Code на 4 и отобразить

OF ?Ctl:Name

CHANGE(?Ctl:Name,'ABC Company') !Заменить Ctl:Code на ABC Company и отобразить

END

OF EVENT:Accepted

CASE ACCEPTED()

OF ?OkButton

BREAK

OF ?CanxButton

CLEAR(Ctl:Record)

BREAK

END

END

Смотри также: DISPLAY, UPDATE, ERASE, CONTENTS, PROP:ScreenText

 

CHANGES (возвращает измененную очередь)

CHANGES( очередь )

CHANGES Возвращает случайные значения очереди.

queue Метка структуры QUEUE или метка передаваемого параметра QUEUE.

Процедура CHANGES возвращает переменную типа LONG, содержащую случайные значения, которые содержатся в текущей очереди. Последующее сравнение этих сохраненных значений с текущими позволят вам легко определить, что содержимое очередь изменилось (в некотором смысле).

 

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

Пример:

SaveHash LONG

Que QUEUE

Name STRING(10)

END

CODE

Que.Name = 'Jones'

ADD(Que) !Добавить запись

ASSERT(~ERRORCODE())

SaveHash = CHANGES(Que) !Сохранение случайных значений

Que.Name = 'Jones II'

ADD(Que) !Добавить другую запись

ASSERT(~ERRORCODE())

IF SaveHash <> CHANGES(Que) !Здесьможет быть верное выражение

MESSAGE('CHANGES procedure worked correctly')

END

Смотри также: QUEUE

 

CHOICE (указать относительное положение элемента)

CHOICE( [поле] )

CHOICE Возвращает номер осуществленного пользователем выбора.

поле Метка соответствия полей LIST, COMBO, SHEET или OPTION.

Процедура CHOICE возвращает порядковый номер выбранного элемента (выбора) структуры OPTION, структуры SHEET, окна списка LIST или поля COMBO. Если параметр отсутствует, то процедура возвращает порядковый номер выбранного элемента того управляющего поля (LIST, SHEET, OPTION или COMBO), которое породило последнее по времени связанное с полем событие, обработанное ACCEPT-циклом.

CHOICE(поле) возвращает номер текущего выбора в любом из полей LIST, SHEET, OPTION или COMBO активного на данный момент окна.

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

Для окон LIST и COMBO функция CHOICE возвращает номер поля очереди, которое “занимает” выбранный элемент в структуре QUEUE.

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

Пример:

CODE

ACCEPT

EXECUTE CHOICE() !Отработка меню

AddRec !добавить запись

PutRec !изменить запись

DelRec !удалить запись

RETURN !выход

END

END

Смотри также: LIST, SHEET, COMBO, OPTION, QUEUE, RADIO, PROP:Selected, PROP:ChoiceFEQ

 

CHOOSE (получить выбранное значение)

CHOOSE(| выражение ,значение, значение [,значение...]| )

| условие [,истинное значение, ложное значение ]|

CHOOSE Возвращает выбранное из списка возможных значений.

выражение Арифметическое выражение которое определяет какой параметр значения должен быть возвращен. Это выражение должно возвращать положительное целочисленное значение.

значение Константа, переменная или выражение значение которого процедура должна возвратить.

условие Логическое выражение которое определяет, какое из двух значений должно быть возвращено. Если не указаны параметры истинное значение и ложное значение, то возвращается единица (1) когда выражение истинно и ноль (0) – если выражение ложное.

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

Если условие дает в результате истину, то CHOOSE возвращает параметр истинное значение. Когда условие дает в результате ложь, CHOOSE возвращает второй параметр ложное значение. Если параметр значение отсутствует, CHOOSE возвращает единицу (1) если результат дает истину и ноль (0) – если ложь.

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

Все параметры значения Возвращаемый тип данных

LONG LONG

DECIMAL или LONG DECIMAL

STRING STRING

DECIMAL, LONG или STRING DECIMAL

все остальные REAL

Возвращаемый тип данных: LONG, DECIMAL, STRING или REAL

Пример:

!CHOOSE(4,'A','B','C','D','E') возвращает 'D'

!CHOOSE(1 > 2,'A','B') возвращает 'B'

!CHOOSE(1 > 2) возвращает ноль (0)

!На основе значения некого поля решить скрыть или раскрыть поле SomeField:

?MyControl{PROP:Hide} = CHOOSE(SomeField = 0,TRUE,FALSE)

!Фильтр для структуры VIEW выбирающий мужчин и женщин с избыточным весом

MyView{PROP:Filter} = 'Weight > CHOOSE(Sex = ''M'',250,200)'

Смотри также: INLIST

 

CHORD (нарисовать сектор эллипса)

CHORD( x ,y ,ширина ,высота ,начальный угол ,конечный угол [,раскраска] [,список атрибутов])

CHORD Рисует замкнутый сектор эллипса в текущем окне или документе.

x Целочисленное выражение для указания горизонтального положения начальной точки.

y Целочисленное выражение для указания вертикального положения начальной точки.

ширина Целочисленное выражение для указания ширины.

высота Целочисленное выражение для указания высоты.

начальный угол Целочисленное выражение, определяющее начальную точку дуги. Указывается в десятых долях градуса (10=1 градус). Отсчет угла производится против часовой стрелки, начиная с трех часов.

конечный угол Целочисленное выражение, определяющее конечную точку дуги. Указывается в десятых долях градуса (10=1 градус). Отсчет угла производится против часовой стрелки, начиная с трех часов.

раскраска Целочисленная константа типа LONG, символическое имя или переменная, в трех младших байтах которых находятся красная, зеленая и синяя компоненты цвета (байты 0, 1, 2) или символическое имя для значения стандартного цвета Windows.

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

Процедура CHORD рисует замкнутый сектор эллипса в текущем окне или документе. Эллипс прорисовывается внутри “ограничивающего прямоугольника”, размеры которого определяются параметрами x, y, ширина и высота. Параметры x и y определяют начальную точку, а параметры ширина и высота определяют горизонтальный и вертикальный размеры “ограничивающего прямоугольника”. Параметры начальный угол и конечный угол определяют ту часть линии эллипса (дугу), сектор которой требуется изобразить. Конечные точки дуги соединяются отрезком прямой линии (хордой).

Цвет линии границы - цвет, установленный оператором SETPENCOLOR для текущего пера. Цвет по умолчанию - цвет, установленный Windows для текста окна. Толщина линии - текущая толщина, установленная SETPENWIDTH, толщина по умолчанию – один пиксел. Тип линии - тип линии, установленный SETPENSTYLE для текущего пера, тип линии по умолчанию - сплошная линия.

Пример:

MDIChild WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!управляющие поля окна

END

CODE

OPEN(MDIChild)

CHORD(100,50,100,50,0,900,00FF0000h) !Красный “полумесяц”, с дугой в 90 градусов

Смотри также: Текущий объект, SETPENCOLOR, SETPENWIDTH, SETPENSTYLE

 

CHR (получить символ АSСII)

CHR(код)

CHR Возвращает отображаемый символ.

код Числовое выражение, содержащее код символа АSСII.

Процедура CHR возвращает ASCII символ, соответствующий символу ASCII заданному параметром код.

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

Пример:

Stringvar = CHR(122) !Получить символ z в нижнем регистре

Stringvar = CHR(65) !Получить символ A в верхнем регистре

Смотри также: VAL

 

CLIP (отсечь пробелы в конце строки)

CLIP(строка)

CLIP Удаляет пробелы в конце строки.

строка Строковое выражение.

Процедура CLIP удаляет из строки оконечные пробелы. Возвращаемая строка представляет собой подстроку без пробелов в конце. CLIP часто используется в строковых выражениях с операцией конкатенации, используя типы данных STRING.

Процедура CLIP не нужна для строки типа CSTRING, поскольку она заканчивается нулем. Также не нужна процедура CLIP для строки PSTRING, поскольку она имеет байт длины.

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

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

Пример:

Name = CLIP(Last) & ', ' & CLIP(First) & Init & '.' !Полное имя в военном приказе

Name = CLIP(First) & CLIP(' ' & Middle) & ' ' & Last !Полное имя со средним именем

AllTrimVar = CLIP(LEFT(MyVar)) !Одновременно убрать пробелы спереди и сзади

Смотри также: LEFT

 

CLIPBOARD (получить содержимое буфера обмена Windows)

CLIPBOARD( [формат] )

CLIPBOARD Возвращает содержимое буфера обмена Windows.

формат Целочисленная константа или переменная, которая определяет формат содержимого буфера. Если этот параметр опущен, то подразумевается CF_TEXT.

Процедура CLIPBOARD возвращает содержимое буфера обмена Windows. Параметр формат по умолчанию имеет значение CF_TEXT (как определено в интерфейсе прикладных программ - Windows API), однако можно указать любое отличное от этого значение (см. справочное руководство по API). Если данные буфера обмена имеют неопределенный формат, процедура CLIPBOARD возвращает пустую строку (‘’). В API определены следующие значения форматов буфера обмена:

CF_TEXT 1

CF_BITMAP 2

CF_METAFILEPICT 3

CF_SYLK 4

CF_DIF 5

CF_TIFF 6

CF_OEMTEXT 7

CF_DIB 8

CF_PALETTE 9

CF_PENDATA 10

CF_RIFF 11

CF_WAVE 12

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

Пример:

Que1 QUEUE

STRING(30)

END

Que2 QUEUE

STRING(30)

END

WinOne WINDOW,AT(0,0,160,400)

LIST,AT(120,0,20,20),USE(?List1),FROM(Que1),DRAGID('List1')

LIST,AT(120,120,20,20),USE(?List2),FROM(Que2),DROPID('List1','~FILE')

END

CODE

OPEN(WinOne)

ACCEPT

CASE EVENT()

OF EVENT:Drag !При попытке перетаскивания

IF DRAGID() !проверить удачно ли

SETCLIPBOARD(Que1) !и установить данные для передачи

END

OF EVENT:Drop !При успешном перетаскивании

Que2 = CLIPBOARD() !взять передаваемую информацию

ADD(Que2) !и добавить ее в очередь

END

END

Смотри также: SETCLIPBOARD

 

CLOCK (получить системное время)

CLOCK( )

Процедура CLOCK возвращает время суток из системного времени DОS в виде стандартного времени Clarion (выраженное в сотых долях секунды, прошедших с полуночи плюс единица). Хотя время выражается с точностью 0.01 сек. системные часы обновляются с частотой 18.2 раз в секунду (приблизительно каждые 5,5 сотых секунды). Максимальная точность в отметках времени для операционных систем Windows NT ограничена 10 или 15 милисекундами.

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

Пример:

Time = CLOCK() !Сохранить системное время

Смотри также: Стандартное время, SETCLOCK

 

CLONE (дублирует существующий объект)

CLONE(поле назначения, поле источника [,родитель] [,позиция] [,окно])

CLONE Создает дубликат существующего поля.

поле назначения Номер поля или метка соответствия поля для поля, которое нужно создать.

поле источника Номер поля или метка соответствия поля для поля, которое нужно дублировать.

родитель Номер поля или метка соответствия поля, которое указывает OPTION, GROUP, SHEET, TAB, MENU, HEADER, FOOTER, DETAIL, BREAK или FORM в которых разместится новое поле. Если опущен, поле не будет иметь родителя.

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

окно Метка структуры APPLICATION, WINDOW или REPORT или указатель на одну из этих структур в которой находится дублируемое поле.

Процедура CLONE динамически дублирует существующее поле в текущее активное окно. Она возвращает метку соответствия нового поля. Поле назначения наследует все свойства поля источника. Позиция поля назначения должна редактироваться SETPOSITION() или PROP:AT, если оно не будет расположено вверху поля источника.

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

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

Пример:

PROGRAM

INCLUDE('EQUATES.CLW')

INCLUDE('KEYCODES.CLW')

MAP

END

WINDOW WINDOW('Clone - example'),AT(,,260,100),GRAY

BUTTON('Ok'),AT(198,30,31,15),USE(?OkButton)

BUTTON('Clone It'),AT(199,54,31,15),USE(?CloneButton)

END

WINDOW2 WINDOW('Window2'),AT(,,260,100),GRAY

BUTTON('Clone Me'),AT(98,30,31,15),USE(?CloneMe)

END

?Cloned EQUATE(100)

CODE

OPEN(WINDOW)

ACCEPT

CASE ACCEPTED()

OF ?CloneButton

OPEN(WINDOW2)

SETTARGET(WINDOW)

CLONE(?Cloned, ?CloneMe,,,WINDOW2)

CLOSE(WINDOW2)

?Cloned{PROP:YPOS} = ?Cloned{PROP:Ypos} + ?Cloned{PROP:Height} +10

?Cloned{PROP:Width} = ?Cloned{PROP:Width} + 20

?Cloned{PROP:Text} = 'Cloned Button'

OF ?OkButton

BREAK

END

END

Смотри также: CREATE, SETPOSITION, SETTARGET, UNHIDE

CLOSE (закрыть структуру данных)

CLOSE( структура )

CLOSE Закрывает структуру данных

файл Метка структуры FILE, VIEW, APPLICATION, WINDOW или REPORT.

Оператор CLOSE завершает работу текущей структуры. Память используемая активной структурой освобождается при закрытии.

Использование в файлах

Оператор CLOSE(файл) закрывает открытый файл. Обычно при этом буферы DOS для этого файла записываются на диск и освобождается вся использованная при работе с файлом память (за исключением буфера данных в структуре RECORD). Если файл является частью установленной транзакции, выдается сообщение об ошибке 56 (LOGOUT активен).

Использование в виртуальных файлах

Оператор CLOSE(view) закрывает виртуальный файл. Виртуальный файл, объявленный в процедуре, неявно закрывается при завершении процедуры, если он не был закрыт явным образом. Если непосредственно оператору CLOSE(view) не предшествует оператор REGET, то состояние связанных во VIEW-структуре первичного и вторичного файлов является неопределенным. Вследствие этого неопределенно и содержание их буферов записи, поэтому может потребоваться применение операторов SET или RESET до начала последовательной обработки записей из этих файлов.

Использование в структурах APPLICATION и WINDOW

Оператор CLOSE(окно) завершает обработку текущей APPLICATION или WINDOW структуры. При закрытии окна освобождается отведенная под него память и автоматически восстанавливается область экрана, находившаяся “за” окном. Если закрывается окно, которое не является верхним окном процесса, то сначала закрываются все окна открытые вслед за ним, причем порядок их закрытия обратен порядку открытия. Если структура APPLICATION или WINDOW объявлена внутри процедуры (локальная), то она автоматически закрывается при возврате из процедуры.

Использование в отчетах

Оператор CLOSE(отчет) печатает нижний колонтитул последней страницы (если только печатавшаяся последней структура не имела атрибут ALONE) и закрывает структуру REPORT. Если REPORT была описана с атрибутом PREVIEW, то удаляются все временные метафайлы. Если в процедуре, открывшей структуру REPORT, выполняется оператор RETURN, то REPORT автоматически закрывается.

Выдаваемые сообщения об ошибках: 56 LOGOUT active (Открыта транзакция)

Пример:

Customer FILE,DRIVER('Clarion'),PRE(Cus) !Объявить файл покупателей

AcctKey KEY(Cus:AcctNumber)

Record RECORD

AcctNumber LONG

OrderNumber LONG

Name STRING(20)

Addr STRING(20)

City STRING(20)

State STRING(20)

Zip STRING(20)

END

END

ViewCust VIEW(Customer) !Объявить структуру VIEW

PROJECT(Cus:AcctNumber,Cus:Name)

END

CODE

OPEN(Customer,22h)

SET(Cus:AcctKey)

OPEN(ViewCust) !Открыть виртуальный файл покупателей

!исполняемые операторы

CLOSE(ViewCust) !и закрыть

CLOSE(Customer) !Закрыть файл покупателей

CLOSE(MenuScr) !Закрыть экран меню

CLOSE(CustEntry) !Закрыть окно ввода данных покупателей

CLOSE(CustRpt) !Закрыть отчет

Смотри также: OPEN, LOGOUT, ACCEPT

 

COLORDIALOG (выбор цвета)

COLORDIALOG( [заголовок] ,цвет [, подавление] )

COLORDIALOG Выводит на экран стандартное Windows-окно выбора цвета, в котором пользователь осуществляет свой выбор.

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

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

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

Процедура COLORDIALOG выводит на экран стандартное Windows-окно выбора цвета и возвращает значение выбранного пользователем цвета в переменной, указанной параметром цвет. При вызове функции значение параметра цвет устанавливает выбор цвета по умолчанию, предоставляемый пользователю в окне выбора. Цвет, выбранный пользователем, может либо принадлежать палитре RGB (положительное значение), либо быть одним из стандартных элементарных цветов Windows (отрицательное значение).

COLORDIALOG возвращает 0, если в окне выбора пользователем была нажата кнопка Cancel, и 1, если была нажата кнопка Ok.

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

Пример:

MDIChild1 WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!экранные объекты

END

ColorNow LONG

CODE

IF NOT COLORDIALOG('Choose Box Color',ColorNow)

ColorNow = 000000FFh !Для Cancel - по умолчанию - красный

END

OPEN(MDIChild1)

BOX(100,50,100,50,ColorNow) !Заданный пользователем цвет прямоугольника

Смотри также: COLOR, FONT

 

COMMAND (получить параметр командной строки)

COMMAND( [ параметр ] )

COMMAND Возвращает параметры командной строки.

параметр Строковая константа или переменная, содержащая параметр, значение которого должно быть найдено, или номер параметра командной строки, значение которого должно быть получено. Если поле пропущено, или строка пустая (‘’), то параметры команды возвращаются как введенная командная строка с присоединенными лидирующими пробелами.

Процедура COMMAND возвращает значение заданного параметра из командной строки. Если заданный параметр не найден, то процедура COMMAND возвращает пустую строку. Если же параметр указан в нескольких местах, то возвращается только первое найденное значение.

Процедура COMMAND ищет контекст параметр=значение и возвращает значение. Между ключевым словом, задающим параметр, знаком “равно”, и значением не должно быть пробелов. Значение, возвращаемое для параметра в командной строке, заканчивается на первой запятой или первом пробеле. Если в параметре командной строки требуется пробел или запятая, то все значение справа от знака равно должно быть заключено в двойные кавычки (параметр = “значение”).

Эта процедура ищет также параметры командной строки, начинающиеся со знака слэш (/). Если такой параметр найден, то COMMAND возвращает значение этого параметра без слэша. Если параметр содержит только число, то она возвращает значение параметра командной строки, имеющего заданный параметром порядковый номер. Если параметр процедуры содержит “0”, то процедура возвращает минимальный путь в файловой системе, использованный для поиска команды. Этот минимальный путь всегда включает и саму команду (без параметров командной строки), но может и не содержать пути ( если команда найдена в текущем каталоге). Если параметр равен “1”, то процедура возвращает первый параметр командной строки. Поиск в процедуре COMMAND не чувствителен к регистру символов.

 

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

Пример:

IF COMMAND('/N') !В командной строке был ключ /N ?

DO SomeProcess

END

IF COMMAND('Option') = '1' !Был Option=1 в командной строке?

DO OneProcess

END

CommandString = COMMAND('') !Получить все параметры командной строки

CommandItself = COMMAND('0') !Получить саму командную строку

SecondParm = COMMAND('2') !Получить второй параметр из командной строки

Смотри также: SETCOMMAND

 

COMMIT (завершить успешную транзакцию)

COMMIT

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

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

Выдаваемые сообщения об ошибках:

48 Unable to Log Transaction (Невозможно записать файл транзакции)

91 No Logout Active (Нет активной транзакции)

Пример:

LOGOUT(1,OrderHeader,OrderDetail) !Начать транзакцию

DO ErrHandler !всегда проверяя ошибки

ADD(OrderHeader) !Добавить порождающую запись

DO ErrHandler !всегда проверяя ошибки

LOOP X# = 1 TO RECORDS(DetailQue) !Процесс занесения порожденных записей

GET(DetailQue,X#) !Взять одну из очереди

DO ErrHandler !всегда проверяя ошибки

Det:Record = DetailQue !поместить в буфер записи

ADD(OrderDetail) !и добавить в файл

DO ErrHandler !всегда проверяя ошибки

END

COMMIT !Завершить успешную транзакцию

ASSERT(~ERRORCODE())

ErrHandler ROUTINE !Подпрограмма проверки ошибок

IF NOT ERRORCODE() THEN EXIT. !Выйти, если нет ошибок

Err" = ERROR() !Сохранить сообщение об ошибке

ROLLBACK !Откатить неуспешную транзакцию

ASSERT(~ERRORCODE())

BEEP !Оповестить пользователя

MESSAGE('Transaction Error - ' & Err")

RETURN !затем выйти

Смотри также: LOGOUT, ROLLBACK

 

CONTENTS (вернуть значение USE-переменной)

CONTENTS(поле)

CONTENTS Возвращает строку со значением USE-переменной поля.

поле Номер или метка соответствия поля.

Процедура CONTENTS возвращает строку со значением USE-переменной полей ENTRY, OPTION, RADIO или TEXT.

USE-переменная может быть как длиннее, так и короче, чем указано в шаблоне соответствующего ей поля. В любом случае процедура CONTENTS возвращает строку с действительным значением USE-переменной.

 

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

Пример:

IF CONTENTS(?LastName) = '' AND CONTENTS(?FirstName) = '' !Если поля пустые, то,

MessageField = 'Must Enter a First or Last Name' !вывести сообщение об ошибке

END

 

CONVERTANSITOOEM (преобразовать код ANSI в ASCII)

CONVERTANSITOOEM( строка )

CONVERTANSITOOEM Преобразует строку в кодировке ANSI в кодировку OEM ASCII.

строка Имя строки, которую надо преобразовать. Это может быть отдельная переменная или любая структура, которая рассматривается как группа (RECORD, QUEUE и т.д.).

Оператор CONVERTANSITOOEM преобразует отдельную строку или строки внутри группы из кодировки ANSI (отображаемой в Windows) в кодировку OEM (набор символов ASCII, расширенный символами, определенными активной кодовой страницей).

Эта процедура не требуется для файлов, для которых установлен атрибут OEM.

 

Пример:

Customer FILE,DRIVER('Clarion'),PRE(Cus) !Объявить файл без атрибута OEM

AcctKey KEY(Cus:AcctNumber)

Record RECORD

AcctNumber LONG

OrderNumber LONG

Name STRING(20)

Addr STRING(20)

END

END

Win WINDOW,SYSTEM

STRING(@s20),USE(Cus:Name)

END

CODE

OPEN(Customer)

SET(Customer)

NEXT(Customer)

CONVERTOEMTOANSI(Cus:Record) !Преобразовать все строки из ASCII в ANSI

OPEN(Win)

ACCEPT

!Process window controls

END

CONVERTANSITOOEM(Cus:Record) !Преобразовать обратно из ANSI в ASCII

PUT(Customer)

Смотри также: CONVERTOEMTOANSI, OEM

 

CONVERTOEMTOANSI (преобразовать код ASCII в ANSI)

CONVERTOEMTOANSI( строка )

CONVERTOEMTOANSI Преобразует строки из кодировки OEM ASCII в ANSI.

строка Имя строки, которую надо преобразовать. Это может быть отдельная переменная или любая структура, которая рассматривается как группа (RECORD, QUEUE и т.д.).

Оператор CONVERTOEMTOANSI преобразует отдельную строку или строки внутри группы из кодировки OEM (набор символов ASCII, расширенный символами, определенными активной кодовой страницей) в кодировку ANSI (отображаемую в Windows).

Эта процедура не требуется для файлов, для которых установлен атрибут OEM.

 

Пример:

Customer FILE,DRIVER('Clarion'),PRE(Cus) !Объявить файл без атрибута OEM

AcctKey KEY(Cus:AcctNumber)

Record RECORD

AcctNumber LONG

OrderNumber LONG

Name STRING(20)

Addr STRING(20)

END

END

Win WINDOW,SYSTEM

STRING(@s20),USE(Cus:Name)

END

CODE

OPEN(Customer)

SET(Customer)

NEXT(Customer)

CONVERTOEMTOANSI(Cus:Record) !Преобразовать все строки из ASCII в ANSI

OPEN(Win)

ACCEPT

!Process window controls

END

CONVERTANSITOOEM(Cus:Record) !Преобразовать обратно из ANSI в ASCII

PUT(Customer)

Смотри также: CONVERTANSITOOEM, OEM

 

COPY (скопировать файл данных)

COPY(файл,новый файл)

COPY Копирует файл данных

файл Метка оператора FILE, строковая константа или переменная, которые содержат спецификацию файла, который надлежит скопировать.

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

Оператор COPY копирует файл и добавляет спецификацию нового файла в файловую систему операционной системы. Файл, который подлежит копированию должен быть закрыт, иначе выдается сообщение об ошибке “File Already Open” (файл уже открыт). Если спецификация нового файла совпадает со спецификацией исходного файла, то оператор COPY игнорируется.

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

Выдаваемые сообщения об ошибках:

02 File Not Found (Файл не найден)

03 Path Not Found (Путь не найден)

05 Access Denied (Доступ запрещен)

52 File Already Open (Файл уже открыт)

Пример:

FromFolder CSTRING(250)

ToFolder CSTRING(250)

TheFile STRING(256),STATIC

SomeFile FILE,DRIVER('DOS'),NAME(TheFile)

Record RECORD

F1 STRING(1)

END

END

CODE

TheFile = 'Names.DAT'

COPY(TheFile,'A:\') !Скопировать файл на дискету

COPY('C:\AUTOEXEC.BAT','A:\AUTOEXEC.BAT') !Скопировать файл на дискету

FromFolder = 'z:\my folder\file1.tps'

ToFolder = 'z:\backup area' !Используйте двойные кавычки,

!чтобы оперировать каталогами с пробелами

COPY(FromFolder,ToFolder)

Смотри также: CLOSE

 

COS (косинус)

COS(радианы)

COS Возвращает косинус.

радианы Числовая константа, переменная или выражение представляющая угол в радианах. Пи – это константа, которая представляет собой отношение длины окружности к радиусу круга. Здесь 2π радиана (или 360 градусов) в круге.

Процедура COS возвращает значение тригонометрического косинуса угла, измеренного в радианах. Косинус угла представляет собой отношение длины прилежащего катета к длине гипотенузы.

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

Пример:

PI EQUATE(3.1415926535898) !приблизит. значение PI

Rad2Deg EQUATE(57.295779513082) !Число градусов в радианах

Deg2Rad EQUATE(0.0174532925199) !Число радиан в градусе

CODE

Angle = 45 * Deg2Rad !Преобразовать 45 градусов в радианы

CosineAngle = COS(Angle) !Получить косинус угла в 45 градусов

Смотри также: TAN, ATAN, SIN, ASIN, ACOS

 

CREATE (создать пустой файл данных)

CREATE(файл)

CREATE Создает пустой файл данных.

файл Метка структуры FILE, описывающей файл, который должен быть создан.

Оператор CREATE добавляет пустой файл в файловую структуру операционной системы. Если файл уже существует, то он удаляется и создается пустой файл. В этом случае существующий файл должен быть закрыт, иначе выдается сообщение об ошибке “File Already Open” (файл уже открыт). Оператор CREATE не открывает файл после создания.

Выдаваемые сообщения об ошибках:

03 Path Not Found (Путь не найден)

04 Too Many Open Files (Открыто слишком много файлов)

05 Access Denied (Доступ запрещен)

52 File Already Open (Файл уже открыт)

54 No Create Attribute (Файл не имеет атрибута CREATE)

Пример:

CREATE(Master) !Создать новый файл master

CREATE(Detail) !Создать новый файл detail

Смотри также: CLOSE

 

CREATE (создать новое поле)

CREATE( поле , тип [, предок ] [, положение ] )

CREATE Создает новое поле.

поле Номер или метка соответствия создаваемого поля. Допустимый диапазон номеров полей от -4000h до 4000h. Если равно 0, процедура CREATE возвращает следующий доступный номер поля и присваивает его создаваемому управляющему полю.

тип Целочисленная константа, выражение, символическое имя или переменная, которые определяют тип создаваемого поля.

предок Номер или метка соответствия поля. Указывает OPTION GROUP, SHEET, TAB, HEADER, FOOTER, DETAIL, BREAK, FORM или MENU, в которых будет располагаться новое поле. Если параметр опущен, поле не имеет предка.

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

Оператор CREATE динамически создает новое поле в текущей структуре APPLICATION или WINDOW, возвращает значение параметра поля. В случае ошибки создания поля, возвращается 0.

Будучи созданным, поле остается скрытым; его свойства можно установить используя либо синтаксис доступа времени исполнения, либо операторы SETPOSITION и SETFONT. Поле появляется на экране только при выполнении оператора UNHIDE.

Можно также использовать оператор CREATE для создания полей в отчете. В этом случае нужно сначала выполнить оператор SETTARGET и установить отчет в качестве активной в данный момент цели оператора CREATE, а также нужно задать параметр предок для поля.

Операторы EQUATE для параметра тип расположены в файле EQUATES.CLW. Представленный ниже список - фрагмент этого файла (полный перечень смотрите в файле EQUATES.CLW):

CREATE:sstring STRING(шаблон),USE(переменная)

CREATE:string STRING(константа)

CREATE:image IMAGE()

CREATE:region REGION()

CREATE:line LINE()

CREATE:box BOX()

CREATE:ellipse ELLIPSE()

CREATE:entry ENTRY()

CREATE:button BUTTON()

CREATE:prompt PROMPT()

CREATE:option OPTION()

CREATE:radio RADIO()

CREATE:check CHECK()

CREATE:group GROUP()

CREATE:list LIST()

CREATE:combo COMBO()

CREATE:spin SPIN()

CREATE:text TEXT()

CREATE:custom CUSTOM()

CREATE:droplist LIST(),DROP()

CREATE:dropcombo COMBO(),DROP()

CREATE:menu MENU()

CREATE:item ITEM()

CREATE:toolbar TOOLBAR()

Замечание: Константа CREATE:Toolbar является модификатором, чтобы сообщить библиотечной процедуре, что поле должно быть создано внутри панели инструментов, а не в клиентской области окна:

CREATE (0, CREATE:Button + CREATE:Toolbar)

!создает кнопку на панели инструментов если таковая существует

CREATE (0, CREATE:Button)

!создает кнопку в клиентской области окна

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

Пример:

PROGRAM

INCLUDE('keycodes.clw')

MAP

END

TestGroup GROUP,PRE(CTL)

CODE LONG

Name STRING(30)

END

X SHORT

Y SHORT

Width SHORT

Height SHORT

Code4Entry STRING(10)

?Code4Entry EQUATE(100) !Создать для использования в операторе CREATE

!произвольную метку соответствия

FEQ EQUATE(101)

UseVarText1 &STRING

 

Window WINDOW,VSCROLL,GRAY,MAXIMIZE

ENTRY(@N3),AT(3,32),USE(Ctl:Code)

ENTRY(@S30),AT(98,8),USE(Ctl:Name)

BUTTON('OK'),AT(5,7),USE(?OkButton)

BUTTON('Cancel'),AT(45,7),USE(?CanxButton)

END

CODE

OPEN(Window)

ACCEPT

CASE ACCEPTED()

OF ?Ctl:Code

IF Ctl:Code = 4

CREATE(?Code4Entry,CREATE:entry) !Создать поле

?Code4Entry{PROP:use} = Code4Entry !Установить USE-переменную

?Code4Entry{PROP:text} = '@s10' !Установить шаблон ввода

GETPOSITION(?Ctl:Code,X,Y,Width,Height)

?Code4Entry{PROP:Xpos} = X + Width + 40 !Задать координату x

?Code4Entry{PROP:Ypos} = Y !Задать координату y

UNHIDE(?Code4Entry) !Отобразить новое поле

ELSIF Ctl:Code = 5

CREATE(FEQ, CREATE:text)

UseVarText1 &= NEW(STRING(10000))

FEQ{PROP:use} = UseVarText1

GETPOSITION(?Ctl:Code,X,Y,Width,Height)

FEQ{PROP:Xpos} = X + Width + 40 !Задать координату x

FEQ{PROP:Ypos} = Y + 5 !Задать координату y

FEQ{PROP:width} = 300

FEQ{PROP:height} = 100

FEQ{PROP:Vscroll} = TRUE

UNHIDE(FEQ) !Отобразить новое поле

END

OF ?OkButton

BREAK

OF ?CanxButton

CLEAR(TestGroup)

BREAK

END

END

DISPOSE(UseVarText1)

CLOSE(Window)

RETURN

Смотри также: CLONE, DESTROY, SETPOSITION, SETTARGET, UNHIDE

 

DATE (получить стандартную дату)

DATE(месяц,день,год)

DАТЕ Возвращает стандартное время.

месяц Положительная числовая константа, переменная или выражение, задающее месяц.

день Положительная числовая константа, переменная или выражение, задающее день месяца.

год Числовая константа, переменная или выражение, задающее год. Для параметра год являются допустимыми диапазоны значений от 0 до 99 (используя “интеллектуальную” логику) или диапазон стандартной даты Clarion.

Процедура DАТЕ возвращает стандартную дату для заданного года, месяца и дня. Допустимы параметры месяц и день, которые выходят вперед за обычные пределы (нулевые и отрицательные значение недопустимы). 13-ый месяц означает январь следующего года, а 32 января означает 1 февраля. Собственно, процедуры DАТЕ(12,32,97), DАТЕ(13,1,97) и DАТЕ(1,1,98) все дадут один и тот же результат.

Сотня для двухцифрового параметра года предполагает использование по умолчанию интеллектуальной логики, предполагающей, что дата находится в диапазоне между 20 следующими и 80 предыдущими годами от текущей системной даты операционной системы. Например, полагая, что текущий год 1998, а параметр года -"15", дата возвращается как 2015; если параметр года "60" - возвращаемая дата -1960.

 

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

Пример:

HireDate = DATE(Hir:Month,Hir:Day,Hir:Year) !Вычислить дату сдачи в прокат

FirstOfMonth = DATE(MONTH(TODAY()),1,YEAR(TODAY())) !Вычислить первый день месяца

Смотри также: Стандартная дата, DAY, MONTH, YEAR, TODAY

 

DАY (получить день месяца)

DAY(дата)

DАY Возвращает день месяца.

дата Числовая константа, переменная или выражение, или метка переменной типа SТRING, CSТRING или PSТRING, объявленной с шаблоном даты. Параметр дата должен представлять стандартную дату. Переменные, объявленные с шаблоном даты, автоматически преобразуются в промежуточное значение в стандартном формате даты.

Процедура DАY вычисляет для заданной стандартной даты день месяца (от 1 до 31).

 

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

Пример:

OutDay = DAY(TODAY()) !Получить сегодняшний день

DueDay = DAY(TODAY()+2) !Вычислить день возвращения

 

DEBUGHOOK (включить данные в список отладчика)

DEBUGHOOK( элемент )

DEBUGHOOK Включить элемент данных в отладочную информацию отладчика.

элемент Любой допустимый адресуемый элемент данных объявленный в вашей программе, который находится в том же пространстве памяти, в котором используется DEBUGHOOK. Здесь допустим синтаксис уточнения имени переменной и префиксы.

С точки зрения языка, оптимизирующий компилятор Clarion производит необходимую отладочную информацию, чтобы позволить отладчику находить объект данных и показывать его величину.

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

Целью оператора DEBUGHOOK является использование запрашиваемых переменных в процедуре и после этого заставлять компилятор получать эти экземпляры, которые могут затем показаны отладчиком.

Чтобы гарантировать, что данные захвачены в пределах целевой процедуры, а не в одном из методов локальных классов, оператор DEBUGHOOK должно быть включен сразу после оператора CODE целевой процедуры. Любые вызовы в Библиотеку ABC должны быть сделаны перед точкой вставки %BeforeWindowManagerRun, так как это единственнае доступная точка вставки в секции CODE оконных процедур, основанных на ABC.

Пример:

CODE

? DEBUGHOOK (File1.Record) !FIL:Record также допустима

? DEBUGHOOK (File2.Record)

? DEBUGHOOK (File2.Memo)

 

DEFORMAT (исключить форматирование из числовой строки)

DEFORMAT(строка [,шаблон])

DEFORMAT Исключает символы форматирования из числовой строки.

строка Строковое выражение, содержащее числовую строку.

шаблон Шаблон форматирования или метка переменной типа CSТRING , содержащей шаблон. Если этот параметр опущен, то будет использоваться шаблон параметра строка. Если же эта строка объявлена без шаблона, то возвращаемое значение будет содержать только допустимые для числовой константы символы.

Процедура DЕFОRМАТ удаляет из числовой строки символы форматирования, возвращая только цифры, содержащиеся в строке. При использовании с шаблоном даты или времени (за исключением тех, которые подразумевают в себе буквы) эта процедура возвращает строку, содержащую стандартную для Clarion дату или время.

 

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

Пример:

!DEFORMAT('$1,234.56') возвращает 1234.56

!DEFORMAT('309-53-9954') возвращает 309539954

!DEFORMAT('40A1-7',@P##A1-#P) возвращает 407

!Получить строку для набора номера модемом:

DialString = 'ATDT1' & DEFORMAT(Phone,@P(###)###-####P) & '<13,10>'

ClarionDate = DEFORMAT(dBaseDate,@D1) !Получить стандартную в Clarion дату из мм/дд/гг

Data = '45,123' !Присвоить форматированный номер строке

Number = DEFORMAT(Data) !затем удалить нечисловые символы

Смотри также: FORMAT, Стандартная дата, Стандартное время, Шаблоны

 

DELETE (удалить запись)

DELETE( структура )

DELETE Удаляет запись из структур FILE, VIEW или QUEUE.

файл Метка структуры FILE, VIEW или QUEUE.

Оператор DELETE удаляет запись.

Использование в файлах

Оператор DELETE(файл) удаляет последнюю запись, к которой было последнее успешное обращение оператором NEXT, PREVIOUS, GET, REGET, ADD или PUT. Также удаляются ключи для этой записи. Оператор DELETE не очищает буфер структуры RECORD. Поэтому данные из только что удаленной записи продолжают существовать и доступны до тех пор, пока в буфер записи не будут записаны новые данные. Если предварительной выборки записи не было, или она заблокирована другой рабочей станцией, то выдается сообщение “Record Not Available”, а запись не удаляется.

Использование в виртуальных файлах

Оператор DELETE(view) удаляет последнюю запись первичного файла для структуры VIEW, к которой было последнее успешное обращение оператором NEXT или PREVIOUS. Значение ключа для этой записи тоже удаляется из файла ключей. Из какого-либо вторичного, связанного в структуре

JOIN файла оператор DELETE записи не удаляет. Если предварительной выборки записи не было, или она заблокирована другой рабочей станцией, то выдается сообщение “Record Not Available”, а запись не удаляется. Конкретные действия, выполняемые на диске оператором DELETE, зависят от файлового драйвера.

Оператор DELETE удаляет запись только первичного файла потому, что структура VIEW выполняет одновременно и проекцию и соединение. И в этом случае возможно создать такую структуру VIEW, что обновление всех ее компонент нарушило бы правила внутренней непротиворечивости базы данных. Общее решение этой проблемы в SQL-ориентированных продуктах - это обновление только первичного файла. Поэтому в Clarion реализуется такое же стандартное решение.

Использование в очередях

Оператор DELETE(очередь) удаляет элемент очереди, к которому было последнее успешное обращение оператором GET или ADD, и высвобождает занимаемую им память. Если предварительно не выполнялся оператор GET или ADD, то выдается сообщение об ошибке “Entry Not Found” (элемент не найден). Оператор DELETE не влияет на значение, возвращаемое в данный момент POINTER, тем не менее, как только запись будет удалена, значение для всех последующих записей в очереди уменьшится на единицу (1).

Если QUEUE содержит некоторые ссылочные переменные или поля типа данных ANY, вы обязаны сначала присвоить NULL всем указателям-переменным полям ANY в структуре очереди перед удалением. Это позволит избежать утечек памяти используемой ANY или указателями-переменными перед удалением.

Выдаваемые сообщения об ошибках:

05 Access Denied (Доступ запрещен)

08 Insufficient Memory (Недостаточно памяти)

30 Entry Not Found (Элемент не найден)

33 Record Not Available (Запись не доступна)

Пример:

Customer FILE,DRIVER('Clarion'),PRE(Cus) !объявить файл покупателей

AcctKey KEY(Cus:AcctNumber)

Record RECORD

AcctNumber LONG

Name STRING(20)

Addr STRING(20)

City STRING(20)

State STRING(20)

Zip STRING(20)

END

END

CustView VIEW(Customer) !Объявить структуру VIEW

PROJECT(Cus:AcctNumber,Cus:Name)

END

NameQue QUEUE,PRE(Que)

Name STRING(20),NAME('FirstField')

Zip DECIMAL(5,0),NAME('SecondField')

END

CODE

DO BuildQue !Вызов процедуры для построения очереди

LOOP X# = RECORDS(NameQue) TO 1 BY -1 !Цикл по очереди

GET(NameQue,X#) !Получать каждую запись

ASSERT(NOT ERRORCODE())

IF NameQue.Name[1] = 'J' !Обработать условие

DELETE(NameQue) !и удалить только указанные записи

ASSERT(NOT ERRORCODE())

END

END

OPEN(Customer)

Cus:AcctNumber = 12345 !Инициализировать поле ключа

SET(Cus:AcctKey,Cus:AcctKey)

OPEN(CustView)

NEXT(CustView) !Получить эту запись

IF ERRORCODE()

STOP(ERROR())

END

DELETE(CustView) !Удалить запись о покупателе

CLOSE(CustView) !Закрыть VIEW

Cus:AcctNumber = 12345 !Инициализировать поле ключа

GET(Customer,Cus:AcctKey) !Получить эту запись

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

DELETE(Customer) !Удалить запись о покупателе

Смотри также: HOLD, NEXT, PREVIOUS, PUT, GET, ADD, ANY, CLEAR, Указатели-переменные

 

DELETEREG (удалить значение или ключ из реестра Windows)

DELETEREG(LONG корень, STRING имя ключа [.STRING имя значения])

DELETEREG Удаляет названный элемент из системного реестра.

корень Корневая секция реестра из которого удаляется значение. Допустимые значения для него определены в equates.clw и перечислены ниже:

REG_CLASSES_ROOT

REG_CURRENT_USER

REG_LOCAL_MACHINE

REG_USERS

REG_PERFORMANCE_DATA

REG_CURRENT_CONFIG

REG_DYN_DATA

имя ключа Имя ключа, который следует удалить, или ключ.

имя значения Имя значения которое следует удалить. Если опущен, удаляется ключ целиком.

Пример:

PROGRAM

MAP.

INCLUDE('EQUATES')

CurrentPath CSTRING(100)

ColorScheme CSTRING(100)

CODE

DELETEREG(REG_LOCAL_MACHINE,'SOFTWARE\SoftVelocity\Clarion6','root')

!удалить элемент корневой директории инсталяции Clarion 6

DELETEREG(REG_CURRENT_USER,'Control Panel\Current')

!поскольку указанная величина не определена,

!ключ "Current" будет удален

Смотри также: GETREG, PUTREG

DESTROY (удалить экранный объект)

DESTROY([ первый объект ] [, последний объект ] )

DESTROY Удаляет экранные объекты.

первый объект Номер поля или мнемоническая метка соответствия удаляемого объекта или первого в диапазоне удаляемых объектов. Если опущен,по умолчанию равно 0.

последний объект Номер поля или мнемоническая метка соответствия последнего объекта в диапазоне удаляемых объектов.

Оператор DESTROY удаляет экранный объект или диапазон объектов в структуре APPLICATION или WINDOW. Ресурсы удаленного объекта возвращаются операционной системе.

Удаление объектов типа GROUP, OPTION, MENU, TAB или SHEET удаляет также и все находящиеся внутри них объекты.

Пример:

Screen WINDOW,PRE(Scr)

ENTRY(@N3),USE(Ctl:Code)

ENTRY(@S30),USE(Ctl:Name)

BUTTON('OK'),USE(?OkButton),KEY(EnterKey)

BUTTON('Cancel'),USE(?CanxButton),KEY(EscKey)

END

CODE

OPEN(Screen)

DESTROY(?Ctl:Code) !Удалить объект

DESTROY(?Ctl:Code,?Ctl:Name) !Удалить диапазон объектов

DESTROY(2) !Удалить объект номер 2

Смотри также: CREATE

 

DIRECTORY (получить список файлов в каталоге)

DIRECTORY( очередь, путь, атрибуты )

DIRECTORY Выдает список файлов в каталоге (аналогично команде DIR в DOS).

очередь Метка структуры QUEUE, в которую будет занесен список файлов.

путь Строковая константа, переменная или выражение, которое задает путь и маску имен файлов, список которых необходимо получить. Маска может включать символы шаблона (* и ? ).

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

Процедура DIRECTORY возвращает список всех файлов в каталоге, указанном параметром путь, и имеющих соответствующие параметру атрибуты в указанной очереди.

Параметр очередь должен представлять собой очередь, начало структуры которой совпадает со следующей структурой, находящейся в файле EQUATES.CLW:.

ff_:queue QUEUE,PRE(ff_),TYPE

name STRING(13)

date LONG

time LONG

size LONG

attrib BYTE !Битовая карта, такая же как атрибуты EQUATE

END

или следующей структурой (для поддержки длинных имен файлов):

FILE:queue QUEUE,PRE(File),TYPE

name STRING(FILE:MAXFILENAME) !FILE:MAXFILENAME в EQUATE

shortname STRING(13)

date LONG

time LONG

size LONG

attrib BYTE !Битовая карта, такая же как атрибуты EQUATE

END

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

В параметре атрибуты имеет самостоятельное значение каждый бит, и они указывают, имена каких файлов отбираются в очередь. В файле EQUATES.CLW содержатся следующие мнемонические соответствия:

ff_:NORMAL EQUATE(0) !Всегда активен

ff_:READONLY EQUATE(1) !Не для использования как параметр атрибута

ff_:HIDDEN EQUATE(2)

ff_:SYSTEM EQUATE(4)

ff_:DIRECTORY EQUATE(10H)

ff_:ARCHIVE EQUATE(20H) ! не совместим с Windows 95

Битовый массив атрибутов используется как фильтр с независимыми компонентами: если складывать числа, представленные мнемоническимми именами соответствия, то вы будете получать список файлов с любыми, заданными атрибутами. Это означает, что когда устанавливается просто атрибут ff_:NORMAL, то в результате выбираются только файлы (подкаталоги не выбираются), не имеющие атрибутов “скрытый файл”, “системный файл” или атрибута “архивный”. Если к ff_:NORMAL прибавить атрибут ff_:DIRECTORY, то будут выбраны все файлы И подкаталоги данного каталога (параметр путь). Пока ff_:NORMAL равен нулю (0), вы всегда получите файлы.

Короткие имена файлов, используемые в приложении

В приложении нужно избегать использование коротких имен, возвращаемые DIRECTORY. Имеется ввиду использование синтаксиса DIRECTORY(ff_:Queue...), когда возвращаются только короткие имена. Вместо этого, используйте синтаксис DIRECTORY(FILE:QUEUE...) и избегайте использования полей с коротким именем.

Короткие имена файлов не существуют во всех файловых системах. Возвращаемые короткие имена в очереди это длинные имена усеченные до 13 байт. Ключ в реестре NtfsDisable8dot3NameCreation в операционных системах Windows NT/2000/XP позволяет выключить короткие имена. Файлы созданные после активирования этого ключа не имеет сгенерированного короткого имени.

 

Установка NtfsDisable8dot3NameCreation=1 в реестре Windows повышает производительность. Это может стать популярным явлением и может быть установлено по умолчанию. Разработчики использующие в своих приложениях короткие имена могут иметь с этим проблемы в будущем.

Иногда вы можете встретить пользователя, выполняющего ваши приложения на сервере Novell без загруженного NLM для длинных файловых имен, поэтому вы не можете доверять всем файловым системам, поддерживающим длинные файловые имена. Следовательно, безопасной стратегией является именование ваших файлов настоящими короткими именами типа 8.3 и, как упомянуто выше, используйте только длинные поля в очереди, возвращаемой DIRECTORY.

Пример:

DirectoryList PROCEDURE

AllFiles QUEUE(File:queue),PRE(FIL) !Наследование точного объявления File:queue

END

LP LONG

Recs LONG

CODE

DIRECTORY(AllFiles,'*.*',ff_:DIRECTORY) !Получить список файлов в каталоге

Recs = RECORDS(AllFiles)

LOOP LP = Recs TO 1 BY -1

GET(AllFiles,LP)

IF BAND(FIL:Attrib,ff_:DIRECTORY) AND FIL:ShortName <> '..' AND FIL:ShortName <> '.'

CYCLE !пусть остаются подкаталоги

ELSE

DELETE(AllFiles) !избавимся от остальных элементов

END

END

Смотри также: SHORTPATH, LONGPATH, PATH

 

DISABLE (блокирует поле)

DISABLE( [ первое поле ] [, последнее поле ] )

DISABLE Блокирует доступ к полям в окне.

первое поле Номер или метка соответствия поля или первого поля в группе полей. По умолчанию равно 0.

последнее поле Номер или метка соответствия последнего поля в группе полей.

Оператор DISABLE запрещает доступ к полю или группе полей структур APPLICATION или WINDOW. Поле с заблокированным доступом изображается на экране с уменьшенной интенсивностью.

Пример:

Screen WINDOW,PRE(Scr)

ENTRY(@N3),USE(Ctl:Code)

ENTRY(@S30),USE(Ctl:Name)

BUTTON('OK'),USE(?OkButton),KEY(EnterKey)

BUTTON('Cancel'),USE(?CanxButton),KEY(EscKey)

END

CODE

OPEN(Screen)

DISABLE(?Ctl:Code) !Сделать поле недоступным

DISABLE(?Ctl:Code,?Ctl:Name) !Сделать недоступными ряд полей

DISABLE(2) !Сделать недоступным второе поле

Смотри также: ENABLE, HIDE, UNHIDE

 

DISPLAY (отобразить USE-переменные на экран)

DISPLAY( [первое поле] [,последнее поле] )

DISPLAY Отображает содержимое USE-переменных в соответствующие им поля в окне.

первое поле Номер или метка соответствия поля или первого поля в группе полей. По умолчанию равно 0.

последнее поле Номер или метка соответствия последнего поля в группе полей.

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

Текущие значения USE-переменных всех полей автоматически отображаются на экран в каждой итерации ACCEPT-цикла. При этом отпадает необходимость использовать для обновления экрана оператор DISPLAY. Однако, может случиться так, что программа в течение длительного времени занята выполнением некоторых действий. Тогда желательно уведомить пользователя о том, что в данный момент происходит, и делать это приходится без возврата к началу ACCEPT-цикла, явно используя оператор DISPLAY, для отображения обновленного значения некоторой переменной.

 

Пример:

DISPLAY !Отобразить все поля

DISPLAY(2) !Отобразить второе поле

DISPLAY(3,7) !Отобразить поля с 3-го по 7-е

DISPLAY(?MenuControl) !Отобразить поле меню

DISPLAY(?TextBlock,?Ok) !Отобразить ряд полей

Смотри также: Метки соответствия полей, UPDATE, ERASE, CHANGE, AUTO

 

DRAGID (возвратить совпавший “потащить-отпустить” ярлык)

DRAGID( [процесс] [, поле] )

DRAGID При успешном процессе “потащил-отпустил” возвращает совпадающие ярлыки источника и приемника.

процесс Метка целочисленной переменной, в которой возвращается номер процесса, где расположено поле-источник. Если поле-источник принадлежит внешней программе, то параметр процесс возвращается нулевым (0).

поле Метка целочисленной переменной, в которой возвращается метка соответствия поля-источника.

При успешном выполнении процедуры “потащил-отпустил” DRAGID возвращает совпадающие ярлыки источника и приемника. Если пользователь прервал исполнение процедуры, то DRAGID возвращает пустую строку (‘’), в противном случае, возвращается первый совпавший для двух полей ярлык.

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

Пример:

Que1 QUEUE

STRING(30)

END

Que2 QUEUE(Que1) !Que2 объявлена той же, что Que1

END

Que3 QUEUE(Que1) !Que3 объявлена той же, что Que1

END

WinOne WINDOW,AT(0,0,360,400)

!Allows drags, but not drops:

LIST,AT(120,0,20,20),USE(?List1),FROM(Que1),DRAGID('List1')

!Allows drops from List1 or List3, but no drags:

LIST,AT(120,120,20,20),USE(?List2),FROM(Que2),DROPID('List1','List3')

!Allows drags, but not drops:

LIST,AT(120,240,20,20),USE(?List3),FROM(Que3),DRAGID('List3')

END

CODE

OPEN(WinOne)

ACCEPT

CASE EVENT()

OF EVENT:Drop !В случае удачного сброса-

CASE DRAGID() !проверка, какой хост ее произвел

OF 'List1'

Que2 = Que1 !получение сброшенной информации из Que1

OF 'List3'

Que2 = Que3 !получение сброшенной информации из Que3

END

ADD(Que2) !Добавление единицы в очередь сброса

END

END

Смотри также: DROPID, SETDROPID

 

DROPID (возвратить строку “потащить-отпустить”)

DROPID( [процесс] [, поле] )

DROPID При успешном процессе “потащил-отпустил” возвращает совпадающие ярлыки источника и приемника.

процесс Метка целочисленной переменной, в которой возвращается номер процесса, где расположено поле-источник. Если поле-источник принадлежит внешней программе, то параметр процесс возвращается нулевым (0).

поле Метка целочисленной переменной, в которой возвращается метка соответствия поля-источника.

При успешном выполнении процедуры “потащил-отпустил” DROPID возвращает либо совпадающие ярлыки источника и приемника (как это делает DRAGID), либо установленную процедурой SETDROPID строку. Если строка “FILE” включена в список параметров DROPID-атрибута, то процедура DROPID возвращает список имен файлов, который был “взят” из проводника системы Windows. Имена списка отделены друг от друга запятыми.

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

Пример:

DragDrop PROCEDURE

Que1 QUEUE

STRING(90)

END

Que2 QUEUE

STRING(90)

END

WinOne WINDOW('Test Drag Drop'),AT(10,10,240,320),SYSTEM,MDI

!Можно “потащить”, но нельзя “отпустить”:

LIST,AT(12,0,200,80),USE(?List1),FROM(Que1),DRAGID('List1')

!Можно “положить” из List1 или проводника системы Window, но нельзя “потащить”:

LIST,AT(12,120,200,80),USE(?List2),FROM(Que2),DROPID('List1','~FILE')

END

CODE

OPEN(WinOne)

ACCEPT

CASE EVENT()

OF EVENT:Drag !Если событие - попытка “взять”, то

IF DRAGID() !оценить успех попытки

GET(Que1,CHOICE())

SETDROPID(Que1) !и подготовить данные для передачи

END

OF EVENT:Drop !Если событие “положить” - успешно, то

IF INSTRING(',',DROPID(),1,1) !проверить, что это несколько файлов в проводнике

Que2 = | !и только встать на начало

SUB(DROPID(),1,INSTRING(',',DROPID(),1,1)-1)

ADD(Que2) !и добавить его в список

ELSE

Que2 = DROPID() !вернуть из List1 или проводника и

ADD(Que2) !добавить его в список

END

END

END

Смотри также: DRAGID, SETDROPID

 

DUPLICATE (проверить на повторение значения ключа)

DUPLICATE(| ключ| )

| файл|

DUPLICATE Проверяет значения ключа на повторение.

ключ Метка объявления ключа

файл Метка объявления структуры FILE.

Процедура DUPLICATE возвращает отличное от нуля значение (“истина”), если занесение текущей записи в файл данных приведет к возникновению ошибочной ситуации “Creates Duplicate Key” (создается повторяющееся значение ключа). Если указан параметр ключ, то заданный ключ и проверяется на возможность повторения. Если задан параметр файл, то проверяются все ключи, не имеющие атрибута DUP. DUPLICATE часто используется для определения ошибок дублирования ключей перед записью на диск.

Процедура DUPLICATE подразумевает, что содержимое структуры RECORD дублируется на место в файле, определяемое текущим указателем. Поэтому, при использовании функции DUPLICATE перед оператором ADD указатель должен быть обнулен с помощью оператора GET(файл,0)

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

Пример:

IF Action = 'ADD' THEN GET(Vendor,0). !Если добавление, очистим указатель

IF DUPLICATE(Vendor) !Если этот продавец уже существует

SCR:MESSAGE = 'Vendor Number already assigned' !высветить сообщение

SELECT(?) !и оставаться в этом поле

END

Смотри также: GET, ADD, DUP

 

ELLIPSE (нарисовать эллипс)

ELLIPSE( x ,y ,ширина ,высота [,закраска] [,список атрибутов])

ELLIPSE Рисует эллипс в текущем окне или документе.

x Целочисленное выражение для указания горизонтального положения начальной точки.

y Целочисленное выражение для указания вертикального положения начальной точки.

ширина Целочисленное выражение для указания ширины.

высота Целочисленное выражение для указания высоты.

раскраска Целочисленная константа типа LONG , символическое имя, переменная, в трех младших байтах которых (байты 0, 1 и 2) находятся красная зеленая и синяя компоненты цвета или символическое имя для значения стандартного цвета Windows.

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

Процедура ELLIPSE рисует эллипс в текущем окне или документе. Эллипс прорисовывается внутри “ограничивающего прямоугольника”, размеры которого определяются параметрами x, y, ширина и высота. Параметры x и y определяют начальную точку, а параметры ширина и высота определяют горизонтальный и вертикальный размеры “ограничивающего прямоугольника”.

Цвет линии границы - цвет, установленный оператором SETPENCOLOR для текущего пера. Цвет по умолчанию - цвет, установленный Windows для текста окна. Толщина линии - текущая толщина, установленная SETPENWIDTH, толщина по умолчанию – один пиксел. Тип линии - тип линии, установленный SETPENSTYLE для текущего пера, тип линии по умолчанию - сплошная линия.

Пример:

MDIChild WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!экранные объекты

END

CODE

OPEN(MDIChild)

ELLIPSE(100,50,100,50,00FF0000h) !Красный эллипс

Смотри также: Текущий объект, SETPENCOLOR, SETPENWIDTH, SETPENSTYLE

 

EMPTY (очистить файл данных)

EMPTY(файл)

EMPTY Удаляет все записи из файла данных.

файл Метка структуры FILE.

Оператор EMPTY удаляет из заданного файла все записи. Этот оператор требует исключительного доступа к файлу. Поэтому файл должен быть открыт в режиме доступа 12h (Чтение/Запись, Полный запрет) или 22h (Чтение/Запись, Запрет записи).

 

Выдаваемые сообщения об ошибках:

63 Exclusive Access Required (Требуется исключительный доступ)

37 File Not Open (Файл не открыт)

Пример:

OPEN(Master,18) !Открыть главный файл

EMPTY(Master) !и очистить его

Смотри также: OPEN, SHARE

 

ENABLE (разрешает доступ к полю)

ENABLE( [ первое поле ] [, последнее поле ] )

ENABLE Делает заблокированное поле вновь доступным.

первое поле Номер или метка соответствия поля или первого поля в группе полей. По умолчанию равно 0.

последнее поле Номер или метка соответствия последнего поля в группе полей.

Оператор ENABLE снимает блокировку поля или группы полей уменьшенной интенсивности, либо заблокированных оператором DISABLE, либо объявленных с атрибутом DISABLE. В результате - поле вновь доступно пользователь для выбора.

Пример:

CODE

OPEN(Screen)

DISABLE(?Control2) !Поле Control2 - недоступно

IF Ctl:Password = 'Supervisor'

ENABLE(?Control2) !Поле вновь доступно

END

Смотри также: DISABLE, HIDE, UNHIDE

 

ENDPAGE (форсировать переход на новую страницу)

ENDPAGE( отчет [, итоги ] )

ENDPAGE Форсирует переход на новую страницу.

отчет Метка структуры REPORT.

итоги Целочисленная константа или переменная. Если параметр опущен или равен 0, то это вызывает печать групповых итогов по групповому прерыванию (обычно используется для остановить выдачу отчета для просмотра), Если этот параметр равен 1, то по концу страницы групповые итоги не печатаются (обычно используется при непрерывной выдаче отчета).

Оператор ENDPAGE инициирует переход на новую страницу и сбрасывает (flush) буфер печатаемой структуры ядра программы печати. Если структура REPORT описана с атрибутом PREVIEW, то последнее исключает потерю информации при подготовке всего документа для просмотра.

Пример:

SomeReport PROCEDURE

WMFQue QUEUE !Список имен .WMF файлов

STRING(64)

END

NextEntry BYTE(1) !Счетчик элементов списка

Report REPORT,PREVIEW(WMFQue) !Документ с атрибутом PREVIEW

DetailOne DETAIL

!Report controls

END

END

ViewReport WINDOW('View Report'),AT(0,0,320,200),MDI,MAX,HVSCROLL

IMAGE(''),AT(0,0,320,180),USE(?ImageField)

BUTTON('View Next Page'),AT(0,180,60,20),USE(?NextPage),DEFAULT

BUTTON('Print Report'),AT(80,180,60,20),USE(?PrintReport)

BUTTON('Exit Without Printing'),AT(160,180,60,20),USE(?ExitReport)

END

CODE

OPEN(Report)

SET(SomeFile) !Данные для создания документа

LOOP

NEXT(SomeFile)

PRINT(DetailOne)

END

ENDPAGE(Report) !Сброс буфера

OPEN(ViewReport) !Открыть окно предварит. просмотра документа

GET(WMFQue,NextEntry) !Взять первый элемент списка

?ImageField{PROP:text} = WMFQue !Подготовить первую страницу документа

ACCEPT

CASE ACCEPTED()

OF ?NextPage

NextEntry += 1 !Увеличить счетчик элементов

IF NextEntry > RECORDS(WMFQue) THEN CYCLE. !Конец документа?

GET(WMFQue,NextEntry) !Взять следующий элемент списка

?ImageField{PROP:text} = WMFQue !Подготовить след. страницу документа

DISPLAY !и показать на экране

OF ?PrintReport

Report{PROP:flushpreview} = ON !Сбросить файлы на принтер

BREAK !и завершить процедуру

OF ?ExitReport

BREAK !Завершить процедуру

. .

CLOSE(ViewReport) !Закрыть окно

FREE(WMFQue) !Освободить память, занимаемую списком

CLOSE(Report) !Закрыть документ (удаляя все .WMF файлы)

RETURN !и возвратиться в программу

Смотри также: Переход на новую страницу, PREVIEW

 

ERASE (очистить поля и USE-переменные)

ERASE( [первое поле] [,последнее поле] )

ERASE Очищает поля и “обнуляет” их USE-переменные.

первое поле Номер или метка соответствия поля или первого поля в группе полей. По умолчанию равно 0.

последнее поле Номер или метка соответствия последнего поля в группе полей.

Оператор ERASE “стирает” данные в полях в окне и очищает соответствующие им USE-переменные. ERASE без параметров очищает все поля в окне. Если указан только один параметр первое поле, то очищается означенное поле и связанная с ним USE-переменная. Оба параметра первое поле и последнее поле используются для очищения группы полей и их USE-переменных.

Пример:

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

ERASE !Очистить все поля

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

ERASE(?Name,?Zip) !Очистить поле с Name по Zip

ERASE(?City,?City+2) !Очистить City и два последующих поля

Смотри также: Метки соответствия полей, CHANGE

 

ERROR (получить текст сообщения об ошибке)

ERROR( )

Процедура ERROR возвращает строку, содержащую описание ошибочной ситуации, которая возникла. Если ошибочной ситуации не было, то процедура возвращает пустую строку. Нужно использовать ERROR сразу же за тем оператором, который может выдавать ошибку, потому как обработка другим оператором, которые может выдавать сообщение об ошибке, очистит код внутренней ошибки.

 

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

Example:

PUT(NameQueue) !Поместить запись в очередь

IF ERROR() = 'Queue Entry Not Found' !Если такой записи в очереди нет

ADD(NameQueue) !добавить новую запись

IF ERRORCODE() !Проверить безошибочность добавления

STOP(ERROR())

END

END

Смотри также: ERRORCODE, ERRORFILE, FILEERROR, FILEERRORCODE, POPERRORS, PUSHERRORS, Перехватываемые ошибки времени выполнения

 

ERRORCODE (получить код ошибки)

ERRORCODE( )

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

 

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

Пример:

ADD(Location) !Добавить новый элемент

IF ERRORCODE() = 8 !Если не хватает памяти

MESSAGE('Out of Memory') !высветить сообщение

END

Смотри также: ERROR, ERRORFILE, FILEERROR, FILEERRORCODE, POPERRORS, PUSHERRORS,

Перехватываемые ошибки времени выполнения

 

ERRORFILE (получить имя файла, вызвавшего ошибку)

ERRORFILE( )

Процедура ERRORFILE возвращает имя файла, при работе с которым возникла ошибка. Если файл открыт, то возвращается его полная спецификация. Если файл закрыт, то возвращается значение атрибута NAME оператора FILE. Если файл закрыт и в его описании нет атрибута NAME, то возвращается метка оператора FILE. Если ошибочной ситуации не было или она не связана с файлом, то возвращается пустая строка.

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

Пример:

ADD(Location) !Добавить элемент

IF ERRORCODE()

MESSAGE('Error with ' & ERRORFILE()) !Вывести сообщение об ошибке

END

Смотри также: ERRORCODE, ERROR, FILEERRORCODE, FILEERROR, POPERRORS, PUSHERRORS

Перехватываемые ошибки времени выполнения

 

EVENT (возвратить номер события)

EVENT( )

Процедура EVENT возвращает число, которое определяет причину, побудившую оператор ACCEPT предупредить программу о том, что что-то произошло и требуется ее вмешательство. В файле EQUATES.CLW определены символические имена для всех событий, какие могут быть обработаны программой.

Оператор ACCEPT порождает события двух типов: события связанные с полем и события не связанные с полем. События связанные с полем воздействуют на отдельное управляющее поле, в то время как события не связанные с полем воздействуют на окно или программу. Тип события можно определить исходя из значений, возвращаемых процедурами ACCEPTED, SELECTED и FIELD. Если требуется знать какое поле владеет фокусом ввода в момент возникновения события не связанного с полем, то нужно использовать функцию FOCUS.

Для событий связанных с полем:

Процедура FIELD возвращает номер управляющего поля в котором произошло событие. Процедура ACCEPTED возвращает номер поля, если событие - EVENT:Accepted. Процедура SELECTED возвращает номер поля, если событие - EVENT:Selected.

Для событий не связанных с полем:

Процедуры FIELD, ACCEPTED, SELECTED все возвращают нулевое значение (0).

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

Пример:

ACCEPT

CASE EVENT()

OF EVENT:Selected

CASE SELECTED()

OF ?Control1

!Подготовительные действия

OF ?Control2

!Подготовительные действия

END

OF EVENT:Accepted

CASE ACCEPTED()

OF ?Control1

!Завершающие действия

OF ?Control2

!Завершающие действия

END

OF EVENT:Suspend

!Что-то сохранить

OF EVENT:Resume

!Восстановить сохраненное

END

END

Смотри также: ACCEPT, FIELD, FOCUS, ACCEPTED, SELECTED, Модальные события

 

EXISTS (возвращает существует ли файл)

EXISTS( файл )

EXISTS Возвращает истину, если файл существует на диске.

файл Выражение, содержащее имя файла в DOS.

Процедура EXISTS возвращает истину (1), если файл существует на диске, в противном случае возвращает ноль (0).

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

Пример:

SomeFile CSTRING(FILE:MaxFilePath),STATIC

Customer FILE,DRIVER('ASCII','/CLIP = on'),CREATE,NAME(SomeFile)

Record RECORD

_Line STRING(1024)

END

END

CODE

SomeFile = 'customer.tps'

IF EXISTS(SomeFile) !или EXISTS(NAME(Customer)) также допустимо

OPEN(Customer)

ELSE

CREATE(Customer)

END

Смотри также: OPEN, STATUS, CREATE, NAME

 

FIELD (указать поле, владеющее фокусом)

FIELD( )

Процедура FIELD возвращает номер поля, владеющего фокусом в момент возникновения событий связанных с полем. В их число попадают события EVENT:Selected и EVENT:Accepted. Процедура возвращает 0 для событий не связанных с полем.

Компилятор присваивает номерам полей структуры WINDOW положительные значения в порядке возрастания - как поля следуют при объявлении структуры WINDOW. Номерам полей структуры APPLICATION присваиваются отрицательные значения. В операторах программы номера полей представлены, как правило, метками соответствия - именем USE-переменной, перед которой стоит знак вопроса (?FieldName).

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

Пример:

Screen WINDOW

ENTRY(@N4),USE(Control1)

ENTRY(@N4),USE(Control2)

ENTRY(@N4),USE(Control3)

ENTRY(@N4),USE(Control4)

END

CODE

ACCEPT

IF NOT ACCEPTED()

CYCLE

END

CASE FIELD() !Редактирование полей

OF ?Control1 !первое поле

IF Control1 = 0 !если не было ввода

BEEP !сигнал предупреждения

SELECT(?) !остаться в этом же поле

END

OF ?Control2 !второе поле

IF Control2 > 4 !если статус больше 4

Scr:Message = 'Control must be less than 4'

ERASE(?) !очистить поле

SELECT(?) !и вновь отредактировать

ELSE !значение - допустимо

CLEAR(Scr:Message) !убрать сообщение

END

OF ?Control4 !четвертое поле

BREAK !завершить цикл обработки

END

END !конец CASE и цикла

Смотри также: ACCEPT, ACCEPTED, SELECTED, FOCUS, EVENT

 

FILEDIALOG (выбор файла)

FILEDIALOG( [заголовок] ,файл [,расширения] [,флаг] )

FILEDIALOG Выводит на экран стандартное Windows-окно выбора файла, в котором пользователь осуществляет свой выбор.

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

файл Метка строковой переменной, которая получит выбранное имя (имена) файла (файлов).

расширения Строковая константа или переменная, в которой для “List Files of Type” выпадающего окна списка - указываются желаемые расширения файлов. Если параметр опущен, то расширение по умолчанию - все файлы (*.*).

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

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

FILEDIALOG выводит или стандартное для Windows окно Open... или стандартное окно Save... . По умолчанию открывается окно Open... , если такой файл не существует, пользователю выдается предупреждение и файл не открывается. В случае открытия окна Save... пользователь предупреждается о том, что такой файл уже есть и файл не сохраняется.

В строке параметра расширения должно присутствовать описание файла, за которым следует его маска. Элементы строки отделяются друг от друга символом вертикальной черты (|). Например, строка расширения:

'All Files | *.* | Clarion Source | *.CLW;*.INC;*.EQU;*.INT | Clarion Templates|*.TPL;*.TPW'

указывает три варианта выбора для окна списка List Files of Type. Первое указанное в строке расширения расширение файла будет расширением по умолчанию. Несколько расширений разделяются точкой с запятой (;).

Параметр флаг представляет собой битовый массив, в котором обозначаются действия, которые следует выполнить с файлом (см. мнемонические имена соответствия дли них в файле EQUATES.CLW. Для бита номер:

0 Если ноль (0000b),открывается диалог Open... .

1 Если единица (0001b), открывается диалог Save... .

2 Если два (0010b), сохраняется и восстанавливается путь к текущей директории.

4 Если 4 (0100b), сообщение об ошибке не появляется, если файл присутствует в Save... или не присутствует Open....

8 Если 8 (1000b), возвращение множественных выбранных значений, если пользователь выбирает несколько файлов. Когда используется диалог с длинными имена файлов, возвращается строка с разделенными вертикальной чертой (|) именами файлов (с полным путем в начале строки, если выбран не один файл, тогда как при выборе только одного файла возвращается имя файла с полным путем). При использовании диалога с короткими именами, имена файлов в строке разделяются пробелами. Не допустимо при использовании File:Save или File:Directory.

16 Если 16 (10000b), использование диалогов с длинными именами файлов в 32-битных программах.

32 Если 32 (100000b), вывод диалога выбора директории для выбора пути.

64 Если 64 (1000000b), и указанное или набранное имя файла не существует, диалог отображает подсказку для создания нового имени файла с данным именем. Если пользователь выбирает создание файла, FILEDIALOG завершает работу и возвращает набранное имя файла, в противном случае окно диалога остается открытым. Этот флаг не может быть указан совместно с флагом FILE:Directory.

128 Если 128 (10000000b), и указанное имя файла набрано без расширения, добавляется расширение по умолчанию. Расширение по умолчанию берется из первой маски для первой пары фильтра. При использовании мета-символов (* или ?) в расширении по умолчанию, флаг игнорируется. Флаг также игнорируется, если используются флаги FILE:Multi и FILE:Directory или оба вместе. Чтобы к имени файла не добавлялось расширение, при указании FILE:AddExtension, имя файла должно быть заключено в двойные кавычки (т.е. "myfile"). Из-за ограничения Windows, если расширение по умолчанию указано длиной более 3-х символов, то к имени файла добавляется только 3 первых символа.

Ниже представлен исчерпывающий пример этих флагов упрощенных до меток соответствия ( полный список смотри в EQUATES.CLW):

FILE:Save EQUATE(1)

FILE:KeepDir EQUATE(2)

FILE:NoError EQUATE(4)

FILE:Multi EQUATE(8)

FILE:LongName EQUATE(10H)

FILE:Directory EQUATE(20H)

FILE:CreatePrompt EQUATE(40H)

FILE:AddExtension EQUATE(80H)

FILEDIALOG возвращает 0, если в окне выбора пользователем была нажата кнопка Cancel, и 1, если была нажата кнопка Ok. Если пользователь изменил путь к файлу, использованный в диалоговом окне, то текущий для ваше прикладной программы каталог тоже изменится (если только не установлен флаг FILE:KeepDir). Это свойство операционной системы Windows. Если нужно, чтобы пользователь мог просматривать другие каталоги и при этом текущий каталог прикладной программы не изменялся, сохраните перед выполнением процедуры FILEDIALOG путь к текущему каталогу с помощью функции PATH(), а после выполнения FILEDIALOG снова восстановите его оператором SETPATH() или установите флаг FILE:KeepDir.

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

Пример:

ViewTextFile PROCEDURE

ViewQue QUEUE !Список изображаемых в поле LIST элементов

STRING(255)

END

FileName STRING(64),STATIC !Переменная имени файла

ViewFile FILE,DRIVER('ASCII'),NAME(FileName),PRE(Vew)

Record RECORD

STRING(255)

END

END

MDIChild1 WINDOW('View Text File'),AT(0,0,320,200),MDI,SYSTEM,HVSCROLL

LIST,AT(0,0,320,200),USE(?L1),FROM(ViewQue),HVSCROLL

END

CODE

IF NOT FILEDIALOG('Choose File to View',FileName,'Text|*.TXT|Source|*.CLW',FILE:LongName)

RETURN !Возврат, если файл не выбран

END

OPEN(ViewFile) !Открыть файл

IF ERRORCODE() THEN RETURN END!возврат по ошибке

SET(ViewFile) !Начать с начала файла

LOOP

NEXT(ViewFile) !Читать каждую строку

IF ERRORCODE() THEN BREAK END !Закончить цикл по концу файла

ViewQue = Vew:Record !Подготовить текст для queue

ADD(ViewQue) !и добавить элемент в queue

END

CLOSE(ViewFile) !Закрыть файл

OPEN(MDIChild1) !и открыть окно

ACCEPT !Разрешить пользователю читать текст, а

END !выход из ACCEPT-цикла - только при выборе

!элемента Close системного меню

FREE(ViewQue) !Освободить queue-память

RETURN !и вернуться в точку вызова

!************************************************************

!Этот пример демонстрирует использование FILEDIALOG для множественного выбора файлов:

SelectFiles PROCEDURE(SelectFileQueue DFQ)

Found CSTRING(10000),AUTO

Path CSTRING(File:MaxFilePath),AUTO

Separator STRING(1),AUTO

Pos UNSIGNED,AUTO

NameStart UNSIGNED,AUTO

CODE

Found=SELF.DefaultFile

IF FILEDIALOG('Pick 1 or more files',Found, |

'All Files | *.* | Clarion Source | *.CLW;*.INC;*.EQU;*.INT|Clarion Templates|*.TPL;*.TPW',|

FILE:KeepDir+FILE:Multi+FILE:LongName)

Separator='|'

Pos=INSTRING(Separator,Found,1,1)

IF Pos !Мульти-выбор файлов

ASSERT(Pos > 1)

Path = CHOOSE(Found[Pos-1] <> '\', Found[1 : Pos-1]&'\', Found[1 : Pos-1])

LOOP

NameStart = Pos+1

Pos = INSTRING(Separator,Found,1,NameStart)

IF ~Pos THEN Pos=LEN(Found)+1.

DFQ.Name = Path&Found[NameStart : Pos-1]

ADD(DFQ)

WHILE Pos<=LEN(Found)

ELSE

DFQ.Name=Found !Только один файл выбран

ADD(DFQ)

END

END

!************************************************************

!Этот пример демонстрирует использование FILEDIALOG для множественного выбора файлов:

FILEDIALOG('Test', FileName, 'Text files|*.txt|All files|*.*', |

FILE:LongName + FILE:NoError + FILE:AddExtension)

!Если пользователь набирает AAA и нажмет кнопку Open, возвращаемое имя файла

!будет '<current directory>\AAA.txt'; если пользователь набрал "AAA",

!результатом будет '<current directory>\AAA'

Смотри также: SETPATH, SHORTPATH, LONGPATH, DIRECTORY

 

FILEDIALOGA (расширенный выбор файлов)

FILEDIALOGA( [заголовок] ,файл [,расширения] [,флаг] [,индекс] )

FILEDIALOGA Выводит на экран стандартное Windows-окно выбора файла, в котором пользователь осуществляет свой выбор.

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

файл Метка строковой переменной, которая получит выбранное имя (имена) файла (файлов).

расширения Строковая константа или переменная, в которой для “List Files of Type” выпадающего окна списка - указываются желаемые расширения файлов. Если параметр опущен, то расширение по умолчанию - все файлы (*.*).

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

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

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

FILEDIALOGA выводит или стандартное для Windows окно Open... или стандартное окно Save... . По умолчанию открывается окно Open... , если такой файл не существует, пользователю выдается предупреждение и файл не открывается. В случае открытия окна Save... пользователь предупреждается о том, что такой файл уже есть и файл не сохраняется.

В строке параметра расширения должно присутствовать описание файла, за которым следует его маска. Элементы строки отделяются друг от друга символом вертикальной черты (|). Например, строка расширения:

'All Files | *.* | Clarion Source | *.CLW;*.INC;*.EQU;*.INT | Clarion Templates|*.TPL;*.TPW'

указывает три варианта выбора для окна списка List Files of Type. Первое указанное в строке расширения расширение файла будет расширением по умолчанию. Несколько расширений разделяются точкой с запятой (;).

Параметр флаг представляет собой битовый массив, в котором обозначаются действия, которые следует выполнить с файлом (см. мнемонические имена соответствия дли них в файле EQUATES.CLW. Для бита номер:

0 Если ноль (0000b),открывается диалог Open... .

1 Если единица (0001b), открывается диалог Save... .

2 Если два (0010b), сохраняется и восстанавливается путь к текущей директории.

4 Если 4 (0100b), сообщение об ошибке не появляется, если файл присутствует в Save... или не присутствует Open....

8 Если 8 (1000b), возвращение множественных выбранных значений, если пользователь выбирает несколько файлов. Когда используется диалог с длинными имена файлов, возвращается строка с разделенными вертикальной чертой (|) именами файлов (с полным путем в начале строки, если выбран не один файл, тогда как при выборе только одного файла возвращается имя файла с полным путем). При использовании диалога с короткими именами, имена файлов в строке разделяются пробелами. Не допустимо при использовании File:Save или File:Directory.

16 Если 16 (10000b), использование диалогов с длинными именами файлов в 32-битных программах.

32 Если 32 (100000b), вывод диалога выбора директории для выбора пути.

64 Если 64 (1000000b), и указанное или набранное имя файла не существует, диалог отображает подсказку для создания нового имени файла с данным именем. Если пользователь выбирает создание файла, FILEDIALOGA завершает работу и возвращает набранное имя файла, в противном случае окно диалога остается открытым. Этот флаг не может быть указан совместно с флагом FILE:Directory.

128 Если 128 (10000000b), и указанное имя файла набрано без расширения, добавляется расширение по умолчанию. Расширение по умолчанию берется из первой маски для первой пары фильтра (если последний параметр FILEDIALOGA пропущен) или для той пары фильтра, номер которой содержит целочисленная переменная переданная как последний параметр FILEDIALOGA(индекс). При использовании мета-символов (* или ?) в расширении по умолчанию, флаг игнорируется. Флаг также игнорируется, если используются флаги FILE:Multi и FILE:Directory или оба вместе. Чтобы к имени файла не добавлялось расширение, при указании FILE:AddExtension, имя файла должно быть заключено в двойные кавычки (т.е. "myfile"). Из-за ограничения Windows, если расширение по умолчанию указано длиной более 3-х символов, то к имени файла добавляется только 3 первых символа.

Ниже представлен исчерпывающий пример этих флагов упрощенных до меток соответствия ( полный список смотри в EQUATES.CLW):

FILE:Save EQUATE(1)

FILE:KeepDir EQUATE(2)

FILE:NoError EQUATE(4)

FILE:Multi EQUATE(8)

FILE:LongName EQUATE(10H)

FILE:Directory EQUATE(20H)

FILE:CreatePrompt EQUATE(40H)

FILE:AddExtension EQUATE(80H)

Наконец, параметр индекс – знаковое целое используется для указания отличного от значения по умолчанию расширения в списке расширений. Например:

'All Files | *.* | Clarion Source | *.CLW;*.INC;*.EQU;*.INT | Clarion Templates|*.TPL;*.TPW'

Строка расширений содержит пары: <описание>|<маска> и параметр индекса указывающий такие пары. Поэтому, в примере выше, значение 2 индекса отобразит описание 'Clarion Source' и соответствующее расширение, значение 3 индекса отобразит 'Clarion Templates' и т.д.

Если FILEDIALOGA возвращает ненулевое значение (т.е. диалог завершен нажатием кнопки Open или Save), параметр индекс установлен в индекс пары расширения, которое использовано для выбора файла.

FILEDIALOGA возвращает 0, если в окне выбора пользователем была нажата кнопка Cancel, и 1, если была нажата кнопка Ok. Если пользователь изменил путь к файлу, использованный в диалоговом окне, то текущий для ваше прикладной программы каталог тоже изменится (если только не установлен флаг FILE:KeepDir). Это свойство операционной системы Windows. Если нужно, чтобы пользователь мог просматривать другие каталоги и при этом текущий каталог прикладной программы не изменялся, сохраните перед выполнением процедуры FILEDIALOGA путь к текущему каталогу с помощью функции PATH(), а после выполнения FILEDIALOGA снова восстановите его оператором SETPATH() или установите флаг FILE:KeepDir.

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

Пример:

ViewTextFile PROCEDURE

ViewQue QUEUE !Список изображаемых в поле LIST элементов

STRING(255)

END

FileName STRING(64),STATIC !Переменная имени файла

ViewFile FILE,DRIVER('ASCII'),NAME(FileName),PRE(Vew)

Record RECORD

STRING(255)

END

END

MDIChild1 WINDOW('View Text File'),AT(0,0,320,200),MDI,SYSTEM,HVSCROLL

LIST,AT(0,0,320,200),USE(?L1),FROM(ViewQue),HVSCROLL

END

Fxt SIGNED(2) !Расширение файла

CODE

IF NOT FILEDIALOGA('Choose File to View',FileName,'Text|*.TXT|Source|*.CLW',FILE:LongName,Fxt)

RETURN !Возврат, если файл не выбран

END

OPEN(ViewFile) !Открыть файл

IF ERRORCODE() THEN RETURN END!возврат по ошибке

SET(ViewFile) !Начать с начала файла

LOOP

NEXT(ViewFile) !Читать каждую строку

IF ERRORCODE() THEN BREAK END !Закончить цикл по концу файла

ViewQue = Vew:Record !Подготовить текст для queue

ADD(ViewQue) !и добавить элемент в queue

END

CLOSE(ViewFile) !Закрыть файл

OPEN(MDIChild1) !и открыть окно

ACCEPT !Разрешить пользователю читать текст, а

END !выход из ACCEPT-цикла - только при выборе

!элемента Close системного меню

FREE(ViewQue) !Освободить queue-память

RETURN !и вернуться в точку вызова

!************************************************************

!Этот пример демонстрирует использование FILEDIALOG для множественного выбора файлов:

PROGRAM

MAP

END

FN STRING(260)

ExtPickInOut SIGNED,AUTO

ExtFound SIGNED,AUTO

CODE

ExtPickInOut = 2 !default to CSV

IF ~FILEDIALOGA('Pick file to save',fn,'Text|*.TXT|Comma Delimited |

(*.CSV)|*.CSV|Tab Delimited (*.TSV)|*.TSV', FILE:Save+ FILE:LongName, |

ExtPickInOut)

RETURN

END

ExtFound = INLIST(UPPER(SUB(CLIP(FN),-4,4)),'.TXT','.CSV','.TSV')

IF ~ExtFound !Нет расширения, поэтому добавляется

!одно из основанных на выбранном типе файла

ExtFound=ExtPick

fn=clip(fn) & CHOOSE(ExtPickInOut,'.TXT','.CSV','.TSV','')

END

 

!Этот код предполагает 3-х байтовое расширение.

!Существуют другие возможные пути для проверки расширения.

Смотри также: SETPATH, SHORTPATH, LONGPATH, DIRECTORY

 

FILEERROR (получить сообщение об ошибке от файлового драйвера)

FILEERROR( )

Процедура FILEERROR возвращает строку, содержащую оригинальное сообщение об ошибке файловой системы (файлового драйвера), используемого для доступа к файлу. Справедливо только когда ERRORCODE() = 90 или ERRORCODE() = 47.

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

Пример:

PUT(NameFile) !Записать данные

IF ERRORCODE() = 90 !Произошла указанная ошибка

MESSAGE(FILEERROR())

RETURN

END

Смотри также: ERRORCODE, ERROR, ERRORFILE, FILEERRORCODE, Перехватываемые ошибки времени выполнения

 

FILEERRORCODE (получить код ошибки от файлового драйвера)

FILEERRORCODE( )

Процедура FILEERRORCODE возвращает строку, содержащую код оригинального сообщения об ошибке файловой системы (файлового драйвера), используемого для доступа к файлу. Справедливо, когда когда ERRORCODE() = 90 или ERRORCODE() = 47.

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

Пример:

PUT(NameFile) !Записать данные

IF ERRORCODE() = 90 !Произошла указанная ошибка

MESSAGE(FILERRORCODE())

RETURN

END

Смотри также: FILEERROR, ERRORFILE, ERRORCODE, ERROR, Перехватываемые ошибки времени выполнения, Дополнительно об ERRORCODE 47

 

FIRSTFIELD (указать первое поле окна)

FIRSTFIELD( )

Процедура FIRSTFIELD возвращает наименьший номер поля активного в данный момент окна или отчет, указанный оператором SETTARGET. Процедура не возвращает номера любых полей в TOOLBAR или MENUBAR.

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

Пример:

DISABLE(FIRSTFIELD(),LASTFIELD()) !Заблокировать все поля

Смотри также: LASTFIELD

 

FIXFORMAT (зафиксировать динамический файл)

FIXFORMAT( файл )

файл Метка структуры FILE, которая должна быть указателем-переменной.

FIXFORMAT устанавливает динамический файл, который может быть использован как любой другой файл.

Если вы передаете файл, который не был создан используя NEW(файл), FIXFORMAT посылает нижеследующие коды ошибок, которые могут быть отслежены функцией ERRORCODE:

Код ошибки Метка соответствия Причина

80 NoDriverSupport Передан файл который не был создан с NEW(файл)

47 InvalidFileErr Неправильная структура

Если выдается код 47, оператор FILEERRORCODE может быть использован для получения дополнительной информации. Смотри Дополнительно о ErrorCode 47 для получения дополнительной информации.

Смотри также: UNFIXFORMAT

 

FLUSH (записать буферы)

FLUSH(файл)

FLUSH Завершает операцию STREAM. Записывает на диск буферы операционной системы или записывает буферы оператора BUFFER.

файл Метка структуры FILE или VIEW.

Оператор FLUSH завершает потоковую обработку файла. Он записывает на диск буферы операционной системы. При этом обновляется элемент каталога для данного файла. FLUSH также записывает буферы файлового драйвера, размещенные оператором BUFFER. Если и STREAM и FLUSH активны, то записываются все буферы.

Реализация этого оператора зависит от файлового драйвера и конкретные действия при его выполнении описываются в документации на конкретный файловый драйвер (если имеются отличия от написанного здесь).

Пример:

STREAM(History) !Включить потоковую обработку файла

SET(Current) !Встать на начало файла Current

LOOP

NEXT(Current)

IF ERRORCODE() THEN BREAK END

His:Record = Cur:Record

ADD(History)

END

FLUSH(History) !Конец обработки потоком, записать буферы

OPEN(MyView)

BUFFER(MyView,10,5,2,300) !!по 10 записей на страницу, 5 страниц хранить и

!2 считывать вперед, с 5-минутным перерывом

!Обработка записей

FLUSH(MyView) !Запись буферов

Смотри также: STREAM, BUFFER

 

FOCUS (указать поле, владеющее фокусом)

FOCUS( )

Процедура FOCUS возвращает номер поля, которое получило последнее событие EVENT:SELECTED среди других полей (не пунктов меню) активного окна.

Компилятор присваивает номерам полей структуры WINDOW положительные значения в порядке возрастания - как поля следуют при объявлении структуры WINDOW. Номерам полей структуры APPLICATION присваиваются отрицательные значения. В операторах программы номера полей представлены, как правило, метками соответствия - именем USE-переменной, перед которой стоит знак вопроса (?FieldName).

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

Пример:

Screen WINDOW

ENTRY(@N4),USE(Control1)

ENTRY(@N4),USE(Control2)

ENTRY(@N4),USE(Control3)

END

CODE

ACCEPT

CASE EVENT()

OF EVENT:LoseFocus

OROF EVENT:CloseWindow

CASE FOCUS() !Редактируемое поле control

OF ?Control1 !Поле номер 1

UPDATE(?Control1)

OF ?Control2 !Поле номер 2

UPDATE(?Control2)

OF ?Control3 !Поле номер 3

UPDATE(?Control3)

END

END

END

Смотри также: ACCEPTED, SELECTED, FIELD, EVENT

 

FONTDIALOG (выбор шрифта)

FONTDIALOG([заголовок] ,начертание [,размер] [,цвет] [,стиль] [,дополнения] )

FONTDIALOG Выводит на экран стандартное Windows-окно выбора шрифта, в котором пользователь осуществляет свой выбор.

заголовок Строковая константа или переменная с текстом заголовка, который будет размещен в окне выбора шрифта. Если параметр опущен, то заголовок по умолчанию заимствуется у Windows.

начертание Строковая переменная, в которую возвращается имя шрифта.

размер Целочисленная переменная, в которой возвращается размер (в пунктах) шрифта.

цвет Целочисленная переменная типа LONG, в трех младших байтах которой возвращаются красная, зеленая и синяя компоненты цвета выбранного шрифта.

стиль Целочисленная переменная, в которой возвращается толщина и стиль выбранного шрифта.

дополнение Целочисленная константа или переменная, которая задает наличие дополнительных экранных или принтерных шрифтов. Значение 0 этого параметра означает добавление экранных шрифтов, 1 - принтерных, а 2 - и тех, и других. Если этот параметр опущен, то используются только зарегистрированные в Windows шрифты.

Процедура FONTDIALOG выводит на экран стандартное Windows-окно выбора шрифта и предоставляет пользователю возможность выбрать шрифт. При вызове процедуры значения параметров устанавливают значения параметров шрифта для выбора по умолчанию, предоставляемые пользователю в окне выбора. В этих параметрах возвращаются значения параметров выбранного пользователем шрифта, когда пользователь нажимает кнопку Ok в окне выбора. FONTDIALOG возвращает 0, если в окне выбора пользователем была нажата кнопка Cancel, и 1, если была нажата кнопка Ok.

 

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

Пример:

MDIChild1 WINDOW('View Text File'),AT(0,0,320,200),MDI,SYSTEM,HVSCROLL

!экранные объекты

END

Typeface STRING(31)

FontSize LONG

FontColor LONG

FontStyle LONG

CODE

OPEN(MDIChild1) !Открыть окно

IF FONTDIALOG('Choose Display Font',Typeface,FontSize,FontColor,FontStyle,0)

SETFONT(0,Typeface,FontSize,FontColor,FontStyle) !Установить шрифт окна

ELSE

SETFONT(0,'Arial',12) !Установить шрифт по умолчанию

END

ACCEPT

!Обработка окна

END

 

FONTDIALOGA (возвращает выбранный шрифт и начертание)

FONTDIALOGA([заголовок] ,начертание [,размер] [,цвет] [,стиль] [,набор символов][,дополнения] )

FONTDIALOGA Выводит на экран стандартное Windows-окно выбора шрифта, в котором пользователь осуществляет свой выбор.

заголовок Строковая константа или переменная с текстом заголовка, который будет размещен в окне выбора шрифта. Если параметр опущен, то заголовок по умолчанию заимствуется у Windows.

начертание Строковая переменная, в которую возвращается имя шрифта.

размер Целочисленная переменная, в которой возвращается размер (в пунктах) шрифта.

цвет Целочисленная переменная типа LONG, в трех младших байтах которой возвращаются красная, зеленая и синяя компоненты цвета выбранного шрифта.

стиль Целочисленная переменная, в которой возвращается толщина и стиль выбранного шрифта.

набор символов Целочисленная переменная типа LONG в которой возвращается набор символов.

дополнение Целочисленная константа или переменная, которая задает наличие дополнительных экранных или принтерных шрифтов. Значение 0 этого параметра означает добавление экранных шрифтов, 1 - принтерных, а 2 - и тех, и других. Если этот параметр опущен, то используются только зарегистрированные в Windows шрифты.

Процедура FONTDIALOGA выводит на экран стандартное Windows-окно выбора шрифта и предоставляет пользователю возможность выбрать шрифт. При вызове процедуры, значения параметров устанавливают значения параметров шрифта для выбора по умолчанию, предоставляемые пользователю в окне выбора. В этих параметрах возвращаются значения параметров выбранного пользователем шрифта, когда пользователь нажимает кнопку Ok в окне выбора. FONTDIALOGA возвращает 0, если в окне выбора пользователем была нажата кнопка Cancel, и 1, если была нажата кнопка Ok.

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

Пример:

Typeface STRING(31)

FontSize LONG

FontColor LONG

FontStyle LONG

CharSet LONG

Added SIGNED

CODE

OPEN(MDIChild1) !открыть окно

IF FONTDIALOGA('Choose Display Font',Typeface,FontSize,FontColor,FontStyle,CharSet,0)

SETFONT(0,Typeface,FontSize,FontColor,FontStyle,CharSet) !Установить шрифт окна

ELSE

SETFONT(0,'Arial',12) !Установить шрифт по умолчанию

END

ACCEPT

!Обработка окна

END

 

FORMAT (форматировать число по шаблону)

FORMAT(значение,шаблон)

FORMAT Возвращает отформатированную числовую строку.

значение Числовое выражение, представляющее значение, которое должно быть форматировано.

шаблон Шаблон форматирования или метка переменной тип SТRING или выражение, содержащая параметр шаблон.

Процедура FОRМАТ возвращает строку цифр, отформатированную в соответствии с параметром шаблон.

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

Пример:

!Форматировать номер Социального обеспечения:

Rpt:SocSecNbr = FORMAT(Emp:SSN,@P###-##-####P)

!Изменить формат записи телефонного номера:

Phone = FORMAT(DEFORMAT(Phone,@P###-###-####P),@P(###)###-####P)

Форматировать дату как строку:

DateString = FORMAT(DateLong,@D1)

Смотри также: DEFORMAT, Шаблоны

 

FORWARDKEY (передать управляющему объекту нажатие клавиши)

FORWARDKEY(адресуемый объект)

FORWARDKEY Передает нажатие клавиши другому управляющему объекту.

адресумый объект Номер поля или метка соответствия управляющего объекта, который получит переданное нажатие клавиши.

FORWARDKEY передает нажатие клавиши другому управляющему объекту. Это имитация нажатия клавиши, как если бы объект находился в фокусе при нажатии клавиши.

Пример:

FORWARDKEY(?LIST) !передать нажатие клавиши списку

 

FREE (удалить все элементы очереди)

FREE(очередь )

FREE Удаляет все элементы очереди.

очередь Метка оператора QUEUE или метка переданного параметра, представляющего собой структуру QUEUE.

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

Если QUEUE содержит некоторые ссылочные переменные или поля данных типа ANY, вы обязаны сначала очистить их перед удалением содержимого из очереди. Это позволит избежать утечки памяти использованную переменными ANY перед тем как оператор FREE удалит указатели на занимаемую память.

Возвращаемый тип данных: 08 Insufficient Memory (Недостаточно памяти)

Пример:

FREE(Location) !Освободить очередь Location

FREE(NameQue) !Освободить очередь NameQue

Смотри также: ANY, CLEAR, Указатели-переменные

 

FREESTATE (освободить ресурсы)

FREESTATE(файл, сохраненное состояние)

 

FREESTATE Освобождает все ресурсы занимаемые GETSTATE.

файл Метка объявления файла.

сохраненное состояние

Числовая переменная LONG, которая представляет величину возвращенную процедурой GETSTATE.

FREESTATE освобождает все ресурсы занимаемые GETSTATE.

Пример:

MyFunction PROCEDURE(FILE MyFile)

CurState LONG

CODE

!Файл будет в таком же состоянии при выходе из процедуры как и при входе

CurState = GETSTATE(MyFile) !сохранить текущее состояние файла

SET(MyFile) !приготовиться к доступу к файлу

NEXT(MyFile) !прочитать запись

CLEAR(MyFile) !очистить буфер записи

RESTORESTATE(MyFile, CurState) !восстановить файл в первоначальное состояние

FREESTATE(MyFile, CurState) !освободить ресурсы

Смотри также: GETSTATE, RESTORESTATE

 

GET (прочитать запись с помощью прямого доступа)

| файл , ключ файла |

GET( | файл , указатель в файле [, длина ]| )

| ключ , указатель ключа|

| очередь , указатель в очереди|

| очередь , [+]ключ очереди,...,[-]ключ очереди|

| очередь , имя|

| очередь , имя|

GET Считывает указанную запись из файла или из очереди.

файл Метка структуры FILE, описывающей файл.

ключ Метка оператора объявления ключа или индекса.

указатель в файле Числовая константа, переменная или выражение, представляющая значение, возвращаемое для данной записи процедурой POINTER(файл).

длина Целочисленная константа, переменная или выражение, содержащее число байт, которые следует прочитать из файла. Длина должна быть больше нуля и не больше длины структуры RECORD. Если этот параметр опущен или выходит за границы допустимого диапазона, то он устанавливается равным длине структуры RECORD.

указатель ключа Числовая константа, переменная или выражение, представляющая значение, возвращаемое для данной записи указатель POINTER(ключ).

очередь Метка структуры QUEUE.

указатель в очереди

Числовая константа, переменная или выражение. Значение указателя должно находиться в диапазоне от 1 до числа элементов в очереди.

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

ключ очереди Метка поля, объявленного внутри структуры QUEUE. Если у очереди есть атрибут PRE, то параметр ключ должен включать в себя и префикс.

имя Строковая константа, переменная или выражение, содержащее разделенные запятыми, с необязательным знаком + или – спереди, значения атрибутов NAME, относящихся к полям в структуре QUEUE. Регистр букв в значениях этого параметра является значимым.

функция Метка функции содержащая два параметра *GROUP или поименованной GROUP, передаваемой по адресу, и возвращающая значение типа SIGNED. Оба параметра должны иметь одинаковый тип параметров и не должны быть опущены. В прототипах не должно быть атрибутов RAW, C и PASCAL. Смотри Дополнительные сведения об очередях.

Оператор GET находит указанную запись в файле или очереди и извлекает ее.

Использование в файлах

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

GET(файл,ключ)

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

GET(файл, указатель[,длина)

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

GET(ключ, указатель ключа)

Получает запись, основываясь на заданным указателем ключа относительном положении значения ключа в файле ключей.

Значения указателя в файле и указателя ключа зависят от файлового драйвера. Это могут быть: номер записи, байтовое смещение в файле или какая-либо другая “поисковая позиция” внутри файла. Если значение указателя файла или указателя ключа выходит за границы допустимого диапазона, или в файле нет соответствующего значения ключа, то выдается сообщение “Record Not Found” (запись не найдена).

Процедура DUPLICATE подразумевает, что содержимое структуры RECORD дублируется на место в файле, определяемое текущим указателем. Поэтому, при использовании функции DUPLICATE перед оператором ADD указатель должен быть обнулен с помощью оператора GET(файл,0).

Использование в очередях

Оператор GET считывает элемент в буфер структуры QUEUE для работы с ним. Если оператор GET не находит соответствующего запросу элемента, то выдается сообщение об ошибке “Entry Not Found” (элемент не найден).

GET(очередь, указатель в очереди )

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

GET(очередь, ключ)

Ищет первый элемент очереди, который соответствует значениям ключевых полей в буфере. Может использоваться несколько (до 16-ти) параметров ключ очереди. Очередь должна быть уже упорядочена по полям, использующимся в качестве ключевых параметров, ключ в очереди указывает “альтернативный порядок сортировки” который кэшируется (то есть последующие сортировки по тем же самым полям очень эффективны).

GET(очередь, имя)

Ищет элемент очереди, который соответствует значениям полей, указанные параметром имя. Строка имя должна содержать значения атрибутов NAME, относящихся к полям структуры QUEUE, разделенные запятыми, с необязательным знаком + или - спереди. Если очередь предварительно не была упорядочена по полям, указанным в параметре имя, имя указывает “альтернативный порядок сортировки” который кэшируется (то есть последующие сортировки по тем же самым полям очень эффективны).

GET(очередь,функция)

GET с ФУНКЦИЕЙ прочитает запись с позиции, номер которой возвращает функция. Смотри Дополнительные сведения об очередях.

Выдаваемые сообщения об ошибках:

08 Insufficient Memory (недостаточно памяти)

30 Entry Not Found (элемент не найден)

35 Record Not Found (запись не найдена)

37 File Not Open (файл не открыт)

43 Record Is Already Held (запись уже заблокирована)

75 Invalid Field Type Descriptor (неправильный описатель типа поля)

Пример:

NameQue QUEUE,PRE(Que)

Name STRING(20),NAME('FirstField')

Zip DECIMAL(5,0),NAME('SecondField')

END

Customer FILE,DRIVER('Clarion'),PRE(Cus)

NameKey KEY(Cus:Name),OPT

NbrKey KEY(Cus:Number),OPT

Rec RECORD

Name STRING(20)

Number SHORT

END

END

CODE

DO BuildQue !Вызов подпрограммы построения очереди

GET(NameQue,1) !Получить первую запись

IF ERRORCODE() THEN STOP(ERROR()) END

Que:Name = 'Jones' !Присвоить значение ключевому полю

GET(NameQue,Que:Name) !Получить соответствующую запись

IF ERRORCODE()

STOP(ERROR())

END

Que:Name = Fil:Name !Присвоить полю значение Fil:Name

GET(NameQue,Que:Name) !Получить соответствующую запись

IF ERRORCODE() THEN STOP(ERROR()) END

Que:Name = 'Smith' !Присвоить значение ключевому полю

Que:Zip = 12345

GET(NameQue,'FirstField,SecondField') !Получить соответствующую запись

IF ERRORCODE() THEN STOP(ERROR()) END

LOOP X# = 1 TO RECORDS(NameQue)

GET(NameQue,X#) !Цикл в очереди

IF ERRORCODE() THEN STOP(ERROR()) END

!Process the entry

END

Cus:Name = 'Clarion' !Присвоить значение ключевому полю

GET(Customer,Cus:NameKey) !получить запись с соответствующим значением

IF ERRORCODE() THEN STOP(ERROR()) END

GET(Customer,3) !Получить 3-ю запись в файле,

!построенному в физическом порядке

IF ERRORCODE() THEN STOP(ERROR()) END

GET(Cus:NameKey,3) !Получить 3-ю запись в порядке,

!построенному в порядке ключа

IF ERRORCODE() THEN STOP(ERROR()) END

Смотри также: SORT, PUT, POINTER(очередь), POINTER, DUPLICATE, HOLD, WATCH

 

GETFONT (получить информацию о шрифте)

GETFONT( поле [, начертание ] [, размер ] [, цвет ] [, стиль ] [,набор символов])

GETFONT Выдает информацию об изображаемом шрифте

поле Номер или метка соответствия поля, о шрифте которого выдается информация. Нулевой (0) параметр поле означает структуру WINDOW.

начертание Строковая переменная, в которую возвращается имя шрифта

размер Целочисленная переменная, в которой возвращается размер (в пунктах) шрифта.

цвет Целочисленная переменная типа LONG, в трех младших байтах которой возвращаются красная, зеленая и синяя компоненты цвета. Отрицательное значение параметра цвет означает системный цвет.

стиль Целочисленная переменная, в которой возвращается толщина и стиль шрифта.

набор символов Переменная LONG в которую возвращается значение набора символов.

Оператор GETFONT возвращает информацию об изображаемом в поле шрифте. При нулевом (0) значении параметра поле GETFONT возвращает информацию об установленном по умолчанию шрифте окна.

Пример:

TypeFace STRING(31)

Size BYTE

Color LONG

Style LONG

CharSet LONG

CODE

OPEN(Screen)

GETFONT(0,TypeFace,Size,Color,Style,CharSet) !Получить информацию о шрифте для окна

Смотри также: SETFONT

 

GETGROUP (возвращает указатель на группу)

GETGROUP( группа, номер [,измерение] )

GETGROUP Возвращает указатель на указанную структуру группы.

группа Метка объявления GROUP или QUEUE.

номер Численное выражение указывающую порядковую позицию GROUP или QUEUE в указанной группе.

измерение Необязательный номер элемента массива, если используется.

Оператор GETGROUP указатель на номер указанного поля из целевой структуры группы. Если номер указанного поля является полем массива, тогда GETGROUP возвращает указатель на элемент массива номера поля. GETGROUP возвращает указатель NULL, если указанный номер не является группой. GETGROUP также возвратит NULL, если указанный номер является группой массива, а измерение не указано. Эта процедура может быть использована для доступа к полю, являющейся частью группы массива.

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

Пример:

MyGroup GROUP

SubGroup GROUP,DIM(3)

number LONG,DIM(5)

END

END

gr &GROUP

lr ANY

CODE

gr &= GETGROUP(MyGroup, 1, 2)

lr &= WHAT(gr, 1, 4)

!lr теперь указывает на MyGroup.SubGroup[2].number[4]

Смотри также: HOWMANY, ISGROUP, WHAT, WHERE, WHO

 

GETINI (возвратить элемент INI-файла)

GETINI( раздел ,элемент [,умолчание] [,файл] )

GETINI Возвращает содержимое элемента INI-файла.

раздел Строковая константа или переменная, содержащая имя раздела INI-файла, в котором (разделе) расположен элемент.

элемент Строковая константа или переменная, содержащая имя той установки, значение которой требуется получить.

умолчание Строковая константа или переменная, содержащая значение по умолчанию, которое будет возвращено в случае отсутствия элемента (до 1023 символов). Если параметр опущен и элемент отсутствует, то GETINI возвратит пустую строку.

файл Строковая константа или переменная, содержащая имя INI-файла, в котором осуществляется поиск (если полный путь к файлу не задан (т.е. 'Autolog.ini'), то он ищется в каталоге Windows). Чтобы файл искался в текущем каталоге введите точку и обратный слеш перед именем (т.е. '.\Autolog.ini'). Если файл не существует, GETINI возвращает пустую строку. Если этот параметр не указан, то поиск осуществляется в файле WIN.INI.

Процедура GETINI возвращает значение элемента INI-файла стандарта Windows (максимальный размер 64 К). INI-файл стандарта Windows представляет собой текстовый ASCII файл организованный следующим образом:

[имя раздела]

элемент=значение

следующий элемент=другое значение

Пусть, например, файл WIN.INI содержит такие элементы:

[int1]

sLanguage=enu

sCountry=United States

iCountry=1

Процедура GETINI ищет в указанном файле элемент внутри указанного раздела. Она возвращает текст строки элемента, стоящий справа от символа равенства (=).

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

Пример:

Value STRING(30)

CODE

Value = GETINI('intl','sLanguage') !Прочитать элемент установки языка

Смотри также: PUTINI

 

GETNULLS(получить состояние NULL таблицы)

GETNULLS(таблица)

GETNULLS Получить состояние NULL таблицы.

таблица Метка файла.

Процедура GETNULLS возвращает строку, содержащую состояние NULL таблицы. Размер возвращаемой строки зависит от файлового драйвера. Для AS400 Accelerator, MSSQL Accelerator, ODBC Accelerator, Oracle Accelerator, Scalable/Pervasive Accelerator и SQLAnywhere Accelerator размер возвращаемой строки – количество колонок в таблице умноженное на 4. Эта функция – допустима во всех SQL таблицах.

 

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

Пример:

StorageString STRING(255)

Rec STRING(2048)

CODE

StorageString = GETNULLS(table) !Получить состояние NULL таблицы

Rec = table.record !Сохранить буфер записи

! Обработка таблицы

table.record = Rec !Восстановить буфер записи

SETNULLS(table, StorageString) !Установить состояние NULL таблицы

Выдаваемые сообщения об ошибках: 80 Function Not Supported (Функция не поддерживается)

Смотри также: NULL, SETNULL, SETNULLS, SETNONULL

 

GETPOSITION (получить информацию о расположении поля)

GETPOSITION( поле [,x ] [, y ] [, ширина ] [, высота ] )

GETPOSITION Возвращает информацию о расположении и размерах окон APPLICATION, WINDOW или поля.

поле Номер или метка соответствия поля, о котором запрашивается информация. Нулевой (0) параметр поле означает окно.

x Целочисленная переменная, в которой возвращается горизонтальное положение левого верхнего угла.

y Целочисленная переменная, в которой возвращается вертикальное положение левого верхнего угла.

ширина Целочисленная переменная в которой возвращается размер по ширине.

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

Оператор GETPOSITION возвращает координаты и размеры поля или окон APPLICATION и WINDOW. Значения координат и размеров зависят от наличия у поля атрибута SCROLL. Если SCROLL присутствует, то значения берутся относительно виртуального окна. В противном случае, значения берутся относительно верхнего левого угла видимой на данный момент части окна. Следовательно, возвращаемые значения не противоречат тому, что указано атрибутом AT или установлено последним по времени оператором SETPOSITION.

Значения параметров x, y, ширина и высота указаны в условных единицах измерения. За условные единицы принимаются одна четверть усредненной ширины символа и одна восьмая его усредненной высоты. Ясно, что величина условной единицы зависит от установленного для окна шрифта по умолчанию. За основу измерений берется либо шрифт, указанный FONT-атрибутом окна, либо системный шрифт по умолчанию.

Пример:

Screen WINDOW,PRE(Scr)

ENTRY(@N3),USE(Ctl:Code)

ENTRY(@S30),USE(Ctl:Name)

BUTTON('OK'),USE(?OkButton),KEY(EnterKey)

BUTTON('Cancel'),USE(?CanxButton),KEY(EscKey)

END

X SHORT

Y SHORT

Width SHORT

Height SHORT

CODE

OPEN(Screen)

GETPOSITION(?Ctl:Code,X,Y,Width,Height)

Смотри также: SETPOSITION

 

GETREG (получить значение реестра Windows)

GETREG(корень, имя ключа [, имя значения] [, *? тип значения] ),STRING

GETREG Получить значение указанного ключа и/или величину из системного реестра.

корень Переменная LONG или выражение, которое содержит корневой раздел реестра из которого следует получить значение. Допустимые значения для него определены в файле equates.clw :

REG_CLASSES_ROOT

REG_CURRENT_USER

REG_LOCAL_MACHINE

REG_USERS

REG_PERFORMANCE_DATA

REG_CURRENT_CONFIG

REG_DYN_DATA

имя ключа Строковая константа, переменная или выражение которое содержит имя ключа в котором надо должен находиться запрашиваемый ключ. Может включать в себя путь, разделенный символами обратного слеша '\'.

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

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

Поддерживаемые типы:

REG_NONE – значение игнорируется

REG_SZ – значением является строка

REG_EXPAND_SZ – значением является строка, которая может содержать значения нерасширяемых переменных окружения

REG_MULTI_SZ – значением является строка, состоящей из подстрок разделенных символами '<0>'; последняя подстрока завершается двумя последовательными символами '<0>' . ЗАМЕЧАНИЕ: результат значения не может быть присвоен CSTRING

REG_DWORD – значение является 32-х битным числом

REG_DWORD_LITTLE_ENDIAN - значение является 32-х битным числом

REG_DWORD_BIG_ENDIAN - значение является 32-х битным числом

REG_QWORD - значение является 64-х битным числом

REG_QWORD_LITTLE_ENDIAN - значение является 64-х битным числом

REG_BINARY – значением строки являются двоичные данные любой формы

Константа REG_* объявленная в EQUATES.CLW

Функция GETREG возвращает значение запрашиваемого ключа или значения из системного реестра, как строку Clarion. Если запрашиваемого значения или ключа не существует, возвращается пустая строка.

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

Пример:

PROGRAM

MAP.

INCLUDE('EQUATES')

CurrentPath CSTRING(100)

ColorScheme CSTRING(100)

CODE

CurrentPath =|

GETREG(REG_LOCAL_MACHINE,'SOFTWARE\SoftVelocity\Clarion6','root')

!Возвращает корневой каталог где инсталирован Clarion 6

ColorScheme =|

GETREG(REG_CURRENT_USER,'Control Panel\Current','Color Schemes')

!получить текущую пользовательскую цветовую схему

Смотри также: PUTREG, DELETEREG

 

GETSTATE (вернуть текущее состояние файла данных)

GETSTATE(файл [ ,сохранение blob ])

GETSTATE Идентифицирует текущее состояние файла, включая буфер записи, указателя файла, порядок последовательности файла и состояние ошибки системы.

файл Метка объявления файла.

сохранение blob Целочисленная константа или переменная содержащая либо ноль (0) либо единицу (1). Если единица, возвращается также состояние BLOB. Если опущено или равно нулю (0), состояние BLOB не возвращается.

GETSTATE возвращает текущее состояние файла данных. Оно включает в себя буфер записи, MEMO-, BLOB-поля, указатель файла, порядок последовательности файла и текущее состояние ошибки системы. Используйте GETSTATE, чтобы сохранить состояние файла, для того чтобы его состояние можно было восстановить используя RESTORESTATE. Использование этих функций (включая FREESTATE), позволяет легко прерывать и восстанавливать последовательность файла в процессе обработки.

GETSTATE теперь может сохранять состояние полей BLOB, если второй параметр установлен в истину. По умолчанию BLOB-поля не сохраняются.

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

Пример:

MyFunction PROCEDURE(FILE MyFile)

CurState LONG

CODE

!Файл будет в том же самом состоянии при выходе из процедуры как и при входе в нее

CurState = GETSTATE(MyFile,1) !сохранить текущее состояние файла и BLOB

SET(MyFile) !подготовить доступ к файлу

NEXT(MyFile) !прочитать запись

CLEAR(MyFile) !очистить буфер записи

RESTORESTATE(MyFile, CurState) !восстановить файл в первоначальное состояние

FREESTATE(MyFile, CurState) !освободить ресурсы

Смотри также: FREESTATE, RESTORESTATE

 

HALT (выйти из программы)

HALT([код завершения] [,сообщение])

HALT Немедленное завершение программы.

код завершения Положительная целочисленная константа или переменная в диапазоне от 0 до 250, которая представляет собой код возврата, передаваемый в DOS. Это значение принимает переменная среды ERRORLEVEL. Этот параметр не является обязательным. Если он опущен, значение по умолчанию рано нулю.

сообщение Строковая константа или переменная, которая выводится после завершения программы на экран.

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

Процедура HALT не может применяться в приложениях, использующих несколько DLL, и должна использоваться только при отладке.

Пример:

PasswordProc PROCEDURE

Password STRING(10)

Window WINDOW,CENTER

ENTRY(@s10),AT(5,5),USE(Password),HIDE

END

CODE

OPEN(Window)

ACCEPT

CASE ACCEPTED()

OF ?Password)

IF Password <> 'Pay$MeMoRe'

HALT(0,'Incorrect Password entered.')

END

END

END

Смотри также: STOP

 

HELP (доступ к окну справки)

HELP([файл справки] [,идентификатор окна])

HELP Открывает файл и формирует на экране окно справки

файл справки Строковая константа или метка STRING-переменной, содержащие спецификацию файла справки в DOS. Если не указан путь, то подразумевается текущий каталог. Если не указано расширение имени, то полагается “.HLP”. Если опущен параметр файл справки, то его место обязана занять запятая (,).

идентификатор окна

Строковая константа или метка STRING-переменной, в которых находится ключ доступа к справочной системе. Им может быть как ключевое слово, так и “строка контекста”.

Оператор HELP открывает файл с именем файл справки и формирует окно с именем идентификатор окна. Если в момент выполнения оператора ASK или ACCEPT пользователь нажмет клавишу F1 (“Help”-клавиша), то текущее окно справки отобразится на экран.

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

Параметр идентификатор окна может принимать значение ключевого слова справочной (Help) системы. Ключевое слово присутствует в окне Search (Поиск) системы Help. Если ключевое слово относится только к одному разделу файла справки, то при нажатии клавиши F1 этот раздел отображается на экран в окно справки. Если же ключевое слово относится к нескольким разделам, то для пользователя открывается диалоговое окно поиска.

“Строка контекста”, как значение параметра идентификатор окна, обозначается символом тильда (~), за которым следует уникальный идентификатор, относящийся только к одному разделу справки. Отсутствие тильды воспринимается как указание ключевого слова в качестве значения параметра идентификатор окна. При нажатии клавиши F1 на экран отображается тот раздел файла справки, который определяется “строкой контекста”.

В новом начатом процессе наследуются все установки файла справки из предыдущего процесса.

Пример:

HELP('C:\HLPDIR\LEDGER.HLP') !Открыть файл справки для бух. учета

HELP(,'~CustUpd') !Активизировать окно справки раздела “обновление данных заказчика”

HELP !Отобразить окно справки

Смотри также: ASK, ACCEPT, HLP

 

HIDE (“спрятать” поле)

HIDE( [ первое поле ] [, последнее поле ] )

HIDE Прячет поля окна.

первое поле Номер или метка соответствия поля или первого поля в группе полей. По умолчанию равно 0.

последнее поле Номер или метка соответствия последнего поля в группе полей.

Оператор HIDE прячет поле или группу полей структур APPLICATION и WINDOW. Скрытые объекты окна на экране не появляются.

Пример:

Screen WINDOW,PRE(Scr)

ENTRY(@N3),USE(Ctl:Code)

ENTRY(@S30),USE(Ctl:Name)

BUTTON('OK'),USE(?OkButton),KEY(EnterKey)

BUTTON('Cancel'),USE(?CanxButton),KEY(EscKey)

END

CODE

OPEN(Screen)

HIDE(?Ctl:Code) !Скрыть поле

HIDE(?Ctl:Code,?Ctl:Name) !Скрыть группу полей

HIDE(2) !Скрыть второе поле

Смотри также: UNHIDE, ENABLE, DISABLE

 

HOLD (исключительный доступ к записи)

HOLD( структура [,секунд])

HOLD Включает блокировку записи.

структура Метка структуры FILE, открытой в режиме совместного доступа или структура VIEW, содержащая компоненты файла, который открыт для совместного доступа.

секунд Числовая константа или переменная, которая задает максимальное время ожидания в секундах.

Оператор HOLD включает блокировку записи последующими операторами GET, REGET, NEXT или PREVIOUS при работе в многопользовательской среде. При успешном получении записи операторы GET, REGET, NEXT и PREVIOUS отмечают эту запись как “захваченную”. В общем случае это запрещает другим пользователям изменять эту запись, но чтение ее возможно. Конкретные действия, выполняемые оператором HOLD, зависят от файлового драйвера. Когда параметр структура является меткой структуры VIEW, HOLD оперирует только с первичный файлом в этой структуре.

HOLD(структура)

Включает процесс безусловного захвата записей; последующие операторы GET, REGET, NEXT и PREVIOUS до тех пор предпринимают попытки захватить запись, пока попытка не завершится успешно. Если запись захвачена другой рабочей станцией, то попытки захватить запись будут продолжаться до тех пор, пока другой пользователь не освободит ее.

HOLD(структура,секунд)

Включает процесс условного удержания т.е. после безуспешных попыток захватить запись в течение заданного числа секунд операторы GET, REGET, NEXT и PREVIOUS выдают сообщение об ошибке “Record Is Already Held” (запись уже кем-то захвачена).

В каждом файле пользователь может за раз захватить одну запись. Если в том же файле происходит обращение ко второй записи, то ранее захваченная запись автоматически освобождается (смотри RELEASE).

Как и при блокировке файлов, при захвате записей существует ситуация, которую следует избегать, - взаимная блокировка. Эта ситуация возникает, когда две рабочие станции пытаются захватить один и тот же набор записей в разной последовательности и обе используют форму HOLD(структура) этого оператора. Одна станция уже захватила запись одного файла и пытается захватить запись другого, а другая рабочая станция, наоборот, захватила запись второго файла и пытается захватить запись первого. Этой проблемы можно избежать, используя форму HOLD(структура, секунд) и отслеживая ситуацию “Record Is Already Held” после операторов GET, REGET, NEXT и PREVIOUS.

Пример:

ViewOrder VIEW(Customer) !Объявить структуру VIEW

PROJECT(Cus:AcctNumber,Cus:Name)

JOIN(Hea:AcctKey,Cus:AcctNumber) !Соединить с файлом заголовков

PROJECT(Hea:OrderNumber)

JOIN(Dtl:OrderKey,Hea:OrderNumber) !Соединить с файлом накладных

PROJECT(Det:Item,Det:Quantity)

JOIN(Pro:ItemKey,Dtl:Item) !Соединить с файлом товаров

PROJECT(Pro:Description,Pro:Price)

END

END

END

END

CODE

OPEN(Customer,22h)

OPEN((Header,22h)

OPEN(Detail,22h)

OPEN(Product,22h)

SET(Cus:AcctKey)

OPEN(ViewOrder)

LOOP !Цикл обработки записей

LOOP !Цикл для предотвращения взаимной блокировки

HOLD(ViewOrder,1) !Попытаться блокировать запись в течение 1 секунды

NEXT(ViewOrder) !Прочитать и заблокировать запись

IF ERRORCODE() = 43 !Если это сделал кто-то другой

CYCLE ! попытаться еще раз

ELSE

BREAK !Если запись не блокирована другим, выйти из цикла

END

END

IF ERRORCODE() THEN BREAK END !Проверять на конец файла

!Process the records

RELEASE(ViewOrder) !Освободить заблокированные записи

END

CLOSE(ViewOrder)

Смотри также: RELEASE, NEXT, PREVIOUS, WATCH, GET, REGET

 

HOWMANY (возвратить измерения)

HOWMANY( метка ,элемент)

HOWMANY Возвращает количество измерений (общее число элементов в массиве) для определенного элемента.

метка Метка структуры GROUP, QUEUE или RECORD.

элемент Целочисленная константа или переменная LONG, которая указывает порядковую позицию в целевом элементе (структуре).

HOWMANY возвращает общее число элементов в массиве для n-го поля структуры GROUP, QUEUE или RECORD. Многомерные поля имеют выровненные в ряд измерения.

HOWMANY вернет ноль(0), если запрашиваемые измерения для поля внутри группы имеющей несколько измерений. Для доступа к номеру такого поля, необходимо использовать GETGROUP для получения одного элемента такой группы.

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

Пример:

NestGroup GROUP

subGroup GROUP,DIM(2,2)

var1 LONG,DIM(3,3)

END

END

gr &GROUP

MyGroup GROUP

var1 LONG,DIM(3,3)

var2 LONG,DIM(100)

var3 LONG,DIM(2,3,4)

END

CODE

HOWMANY(MyGroup, 1) !Возвращает 9

HOWMANY(MyGroup, 2) !Возвращает 100

HOWMANY(MyGroup, 3) !Возвращает 24

HOWMANY(NestGroup, 1) !Возвращает 4

HOWMANY(NestGroup, 2) !Возвращает 0

IF ISGROUP(NestGroup, 1)

gr &= GETGROUP(NestGroup, 1, 1)

HOWMANY(gr, 1) !Возвращает 9

END

Смотри также: ISGROUP, GETGROUP, WHAT, WHERE, WHO

 

IDLE (включить периодически исполняемую процедуру)

IDLE([процедура] [,интервал])

IDLE Включает периодически исполняемую процедуру.

процедура Метка оператора PROCEDURE. Эта процедура не может принимать никаких параметров.

интервал Целое число, задающее минимальное время ожидания (в секундах) между обращениями к процедуре. Интервал равный 0 устанавливает, что обращение к процедуре происходит постоянно. Если параметр интервал опущен, то по умолчанию устанавливается 1 секунда.

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

IDLE процедура в первом (1) процессе, в том же что и APPLICATION в MDI-приложении. Следовательно, структура WINDOW в процедуре IDLE не должна иметь атрибута MDI. Открытие не MDI-окна в том же процессе, что и APPLICATION создает модальное окно для приложения, поэтому для IDLE процедуры более обычно (правильно) не иметь структуры WINDOW вообще.

Процедура типа IDLE обычно описывается прототипом в структуре MAP в программном модуле. Если же ее прототип содержится в member-модуле, то операторы IDLE, включающие и выключающие обращение к этой процедуре должны содержаться внутри процедур этого же MEMBER-модуля.

Пример:

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

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

IDLE !Выключить обращение к фоновой процедуре

Смотри также: ASK, ACCEPT, PROCEDURE, MAP, MDI

 

IMAGE (нарисовать графическое изображение)

IMAGE( x , y , [ ширина ] , [ высота ] , имя файла [,список атрибутов])

IMAGE Размещает графическую картинку в текущем окне или документе.

x Целочисленное выражение для указания горизонтального положения начальной точки.

y Целочисленное выражение для указания вертикального положениям начальной точки.

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

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

имя файла Строковая константа или переменная, указывающие имя отображаемого файла.

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

Процедура IMAGE размещает графическую картинку в текущем окне или документе в области, местоположение которой и размеры указываются параметрами x, y, ширина и высота. В качестве графической картинки может выступать битовое отображение (.BMP), пиктограмма (.ICO), PaintBrush-объект (.PCX), GIF-объект (.GIF), JPEG-объект (.JPG) или метафайл Windows (.WMF).

Пример:

MDIChild WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!экранные объекты

END

CODE

OPEN(MDIChild)

IMAGE(100,50,100,50,'LOGO.BMP') !Вывести графическую картинку

Смотри также: Текущий объект, SETPENCOLOR, SETPENWIDTH, SETPENSTYLE

 

INCOMPLETE (указать пустое REQ-поле)

INCOMPLETE( )

Процедура INCOMPLETE возвращает номер поля с атрибутом REQ, которое первым в текущем окне было оставлено пустым или нулевым, и устанавливает фокус ввода в это поле. Если данные введены во все REQ-поля, то INCOMPLETE возвращает 0 и не изменяет положения фокуса ввода.

Действия функции INCOMPLETE совпадают с действием атрибута REQ поля BUTTON.

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

Пример:

CODE

OPEN(Window)

ACCEPT

CASE ACCEPTED()

OF ?OkButton

IF ~Check1 AND ~Check2 AND ~Check3

Message('You must check at least one box')

CYCLE

END

ReqFld = INCOMPLETE() !Есть пустые REQ-поля?

IF ReqFld

ReqFld{Prop:FillColor}=Color:Yellow !выделить цветом пустое поле

MESSAGE('The selected entry must be filled in.')

CYCLE

ELSE

BREAK !если нет - идти дальше

END

END

END

Смотри также: REQ, BUTTON

 

INLIST (искать элемент в списке)

INLIST(строка поиска,элемент списка,элемент списка [,элемент списка...])

INLIST Возвращает признак наличия или отсутствия элемента в списке.

строка поиска Константа, переменная или выражение, содержащее значение, которое следует искать в списке. Если это числовая величина, то перед сравнением она преобразуется в строку.

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

Процедура INLIST сравнивает содержимое параметра строка поиска со значением, содержащимся в каждом параметре элемент списка. Если совпадающее значение найдено, то процедура возвращает номер параметра относительно первого элемента списка, содержащий этот совпадающий элемент. Если значение строки не найдено ни в одном элементе списка, то в этот случае процедура INLIST возвращает 0.

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

Пример:

INLIST('D','A','B','C','D','E') !возвращает 4

INLIST('B','A','B','C','D','E') !возвращает 2

EXECUTE INLIST(Emp:Status,'Fulltime','Parttime','Retired','Consultant')

Scr:Message = 'All Benefits' !Full timer

Scr:Message = 'Holidays Only' !Part timer

Scr:Message = 'Medical/Dental Only' !Retired

Scr:Message = 'No Benefits' !Consultant

END

Смотри также: CHOOSE

 

INRАNGЕ (проверить попадание в диапазон)


INRANGE(
выражение,нижняя граница,верхняя граница)

INRАNGЕ Проверяет попадание в диапазон.

выражение Числовая константа, переменная или выражение

нижняя граница Числовая константа, переменная или выражение, представляющая нижнюю границу диапазона.

верхняя граница Числовая константа, переменная или выражение, представляющая верхнюю границу диапазона.

Процедура INRАNGЕ сравнивает числовое выражение с включающим числовым диапазоном. Процедура возвращает единицу (“истина”), если значение выражения попадает в указанный диапазон. Если значение выражения больше параметра верхняя граница или меньше параметра нижняя граница, то процедура возвращает ноль (“ложь”).

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

Пример:

IF INRANGE(Date % 7,1,5) !Если это рабочий день

DO WeekdayRate !использовать тариф рабочего дня

ELSE !в противном случае

DO WeekendRate !использовать тариф выходного дня

END

 

INSTANCE (возвращает адрес экземпляра переменной процесса)

INSTANCE(переменная,номер процесса)

INSTANCE Возвращает адрес экземпляра переменной или объекта процесса.

переменная Метка переменной, поля, FILE, KEY, QUEUE или указателя-переменной.

номер процесса Числовая константа, переменная или выражение, которое должно оцениваться как знаковое целое (SIGNED).

Процедура INSTANCE оценивает условие параметра переменная и номера процесса, указанного параметром номер процесса и возвращает следующие результаты:

Если величина номера процесса - не равна нулю (0) и процесс, указанный номером процесса не запущен (или не указана переменная для запуска данного номера процесса), INSTANCE возвращает нуль (0). В противном случае, INSTANCE возвращает адрес экземпляра переменной, указанной для активного процесса, указанного номером процесса.

Параметр переменная должен быть либо экземпляром потоковой переменной, либо структурой расположенной в текущем процессе, либо указателем-переменной, указывающей на расположение в памяти, адрес которой получен вызовом процедуры INSTANCE(переменная, 0). В противном случае, INSTANCE вернет адрес переданной переменной. Если параметр номер процесса установлен в ноль (0), INSTANCE возвращает адрес переменной, которая назначена программным загрузчиком. Она также известна как независимый ID процесса.

INSTANCE может быть использован вместо оператора ADDRESS( ) когда ADDRESS( ) – не применим или не доступен (напр.. структуры FILE и QUEUE). ADDRESS(QUEUE) – это допустимый вызов, но она возвращает адрес внутреннего буфера очереди. С другой стороны, INSTANCE(QUEUE,THREAD()) возвращает адрес внутренней структуры очереди.

Например, имеется следующее объявление очереди:

SomeQueue QUEUE

...

END

QueueRef &QUEUE

Следующее присвоение правильно:

QueueRef &= INSTANCE (SomeQueue, Somethread)

В то время как присвоение ниже - неправильно:

QueueRef &= ADDRESS (SomeQueue)

И устанавливает переменную в неверное значение.

INSTANCE также можно использовать для получения независимого ID потока.

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

Пример:

addressvar = INSTANCE(SalesFile,THREAD())

!возвращает адрес структуры SalesFile в активном потоке

addressvar = INSTANCE(GLO:LoginID, 0)

!получить независимый ID потока в глобальной потоковой переменной

Расширенный пример:

PROGRAM

MAP

PROC1()

END

ThreadClass CLASS,TYPE

A STRING(10)

END

NoThreadClass CLASS,TYPE

TC &ThreadClass

Init PROCEDURE(ThreadClass TC)

GetA PROCEDURE(),STRING

SetA PROCEDURE(STRING A)

END

MyClass NoThreadClass

MyThreadClass ThreadClass,THREAD

!Если MyThreadClass не потоковый, значение "A" будет такое же для каждого

!процесса, и доступ к нему должен быть синхронизирован

AppFrame APPLICATION('Application'),AT(,,505,318),|

FONT('MS Sans Serif',8,,FONT:regular),|

CENTER,ICON('WAFRAME.ICO'),STATUS(-1,80,120,45),SYSTEM,MAX,RESIZE

END

CODE

MyClass.Init(MyThreadClass)

OPEN(AppFrame)

START(PROC1)

START(PROC1)

ACCEPT

END

PROC1 PROCEDURE()

LOC:SETVAL STRING(10)

LOC:GETVAL STRING(10)

Window WINDOW('Win'),AT(,,119,100),|

FONT('MS Sans Serif',8,,FONT:regular),IMM,GRAY,AUTO,MDI

BUTTON('Set Value'),AT(5,6,41,14),USE(?SET)

ENTRY(@s10),AT(53,7,60,10),USE(LOC:SETVAL)

BUTTON('Get Value'),AT(5,25,41,14),USE(?GET)

ENTRY(@s10),AT(53,28,60,10),USE(LOC:GETVAL)

BUTTON('&Close'),AT(35,50,46,14),USE(?Close),LEFT,STD(STD:Close)

PROMPT('Each window is getting/setting the value of its own' &|

' instance of the ThreadClass'),AT(5,67,107,31),USE(?Description)

END

CODE

OPEN(Window)

0{PROP:TEXT}=0{PROP:TEXT}&'-'&THREAD()

LOC:SETVAL = THREAD()

MyClass.SETA(LOC:SETVAL)

ACCEPT

CASE EVENT()

OF EVENT:ACCEPTED

CASE ACCEPTED()

OF ?GET

LOC:GETVAL=MyClass.GETA()

DISPLAY()

OF ?SET

MyClass.SETA(LOC:SETVAL)

END

END

END

NoThreadClass.Init PROCEDURE(ThreadClass TC)

CODE

!Хранение "Thread independent ID" для класса

SELF.TC &= INSTANCE(TC,0)

NoThreadClass.GetA PROCEDURE()

LTC &ThreadClass

CODE

! SELF.TC contain the "Thread independent ID" for the threaded class

LTC &= INSTANCE(SELF.TC,THREAD())

! LTC – указатель на экземпляр для текущего процесса

RETURN LTC.A

NoThreadClass.SetA PROCEDURE(STRING A)

LTC &ThreadClass

CODE

! SELF.TC содержит "Thread independent ID" для потокового класса

LTC &= INSTANCE(SELF.TC,THREAD())

! LTC – указатель на экземпляр текущего процесса

LTC.A = A

Смотри также: THREAD

 

INSTRING (искать вхождение строки)

INSTRING(подстрока,строка [,шаг] [,начало])

INSTRING Ищет подстроку в строке.

подстрока Строковая константа, переменная или выражение, содержащая строку, которую следует искать. Следует использовать с переменной, содержащей подстроку, процедуру CLIP, чтобы в процедуре INSTRING не производился поиск с учетом пробелов в конце переменной.

строка Строковая константа или метка переменной типа SТRING, PSТRING или CSТRING в которой должен осуществляться поиск.

шаг Числовая константа, переменная или выражение, которая задает размер шага при поиске. Шаг равный 1 означает, что сравнение производится с подстрокой, начало которой каждый раз смещается на 1 символ, шаг равный 2 - что смещение происходит на 2 символа и т. д. Отрицательное значение шага означает поиск справа налево внутри строки. Если параметр шаг опущен, то длина шага по умолчанию равна длине искомой подстроки.

начало Числовая константа, переменная или выражение, которая задает с какого символа строки начинается поиск. Если этот параметр опущен, то поиск начинается с первого символа.

Процедура INSТRING шаг за шагом продвигается по строке в поиске вхождения подстроки. Если подстрока найдена, то процедура возвращает номер успешного шага (первый шаг имеет номер 1). Если подстрока не была найдена, то процедура INSТRING возвращает ноль.

INSTRING начинает поиск подстроки с позиции начало и движется вперед с заданным шагом до тех пор пока не найдет подстроку или пока длина оставшейся части строки не будет меньше длины подстроки. В последнем случае INSTRING возвращает ноль. Если подстрока найдена, результат будет равен номеру шага равному номеру позиции строки. Если значение шага не равно 1, результат округляется в большую сторону до целого номера шага следующим образом:

INT ((найденная позиция - 1) / шаг) + 1

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

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

Пример:

INSTRING('DEF','ABCDEFGHIJ',1,1)) !возвращает 4

INSTRING('DEF','ABCDEFGHIJ',1,2)) !возвращает 4

INSTRING('DEF','ABCDEFGHIJ',1,3)) !возвращает 4

INSTRING('DEF','ABCDEFGHIJ',1,4)) !возвращает 4

INSTRING('DEF','ABCDEFGHIJ',1,5)) !возвращает 0

INSTRING('DEF','ABCDEFGHIJ',2,1)) !возвращает 0

INSTRING('DEF','ABCDEFGHIJ',2,2)) !возвращает 2

INSTRING('DEF','ABCDEFGHIJ',3,1)) !возвращает 2

!Выделить расширение из спецификации файла:

Extension = SUB(FileSpec,INSTRING('.',FileSpec) + 1,3)

IF INSTRING(CLIP(Search),Cus:Notes,1,1) !Если значение переменной search найдено

Scr:Message = 'Found' !отобразить сообщение

END

Смотри также: SUB, STRING, CSTRING, PSTRING, Части строк, INLIST

 

INT (взять целую часть)

INT(выражение)

INТ Возвращает целую часть числа.

выражение Числовая константа, переменная или выражение.

Процедура INТ возвращает целую часть значения числового выражения. Округления значения при этом не производится, а знак не изменяется.

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

Пример:

!INT(8.5) возвращает 8

!INT(-5.9) возвращает -5

x = INT(y) !возвращает целую часть от Y

Смотри также: BCD операции и процедуры, ROUND

 

ISALPHA (проверить символ на букву)

ISALPHA( строка )

ISALPHA Проверяет содержит ли переданная ей строка букву.

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

Процедура ISALPHA возвращает значение ИСТИНА, если переданная ей строка представляет собой букву алфавита (прописную или строчную), а противном случае она возвращает значение ЛОЖЬ. Работа этой процедуры не зависит от установленного языка и последовательности сортировки. Эта процедура требует установленного параметра CLACASE в файле переменной окружения или посредством оператора LOCALE.

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

Пример:

SomeString STRING(1)

CODE

SomeString = 'A' !ISALPHA возвращает истину

IF ISALPHA(SomeString)

X#= MESSAGE('Alpha string')

END

SomeString = '1' !ISALPHA возвращает ложь

IF ISALPHA(SomeString)

X#= MESSAGE('Alpha string')

ELSE

X#= MESSAGE('Not Alpha string')

END

Смотри также: ISUPPER, ISLOWER, LOCALE, Файлы переменных среды

 

ISGROUP (сообщает - тип данных GROUP или нет)

ISGROUP( метка, элемент )

ISGROUP Возвращает истину, если элемент данных имеет тип GROUP.

метка Метка GROUP или QUEUE.

элемент Числовое выражение указывающее порядковую позицию поля в GROUP или QUEUE.

Оператор ISGROUP возвращает истину если элемент GROUP или QUEUE является типом данных GROUP.

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

Пример:

MyGroup GROUP

F1 LONG !Поле номер 1

F2 SHORT !Поле номер 2

F3 STRING(30) !Поле номер 3

InGroup GROUP !Поле номер 4

F1 LONG !Поле номер 5

F2 SHORT !Поле номер 6

F3 STRING(30) !Поле номер 7

END

END

Flag LONG

CODE

Flag = ISGROUP(MyGroup,1) !возвращает ложь

Flag = ISGROUP(MyGroup,4) !возвращает истину

Смотри также: HOWMANY, GETGROUP, WHAT, WHERE, WHO

 

ISLOWER (проверить символ на строчную букву)

ISLOWER( строка )

ISLOWER Проверяет, содержит ли переданная ей строка строчную букву.

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

Процедура ISLOWER возвращает значение ИСТИНА, если переданная ей строка представляет собой строчную букву, противном случае она возвращает значение ЛОЖЬ. Работа этой процедуры не зависит от установленного языка и последовательности сортировки. Эта процедура требует установленного параметра CLACASE в файле переменной окружения или посредством оператора LOCALE.

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

Пример:

SomeString STRING(1)

CODE

SomeString = 'a' !ISLOWER возвращает истину

IF ISLOWER(SomeString)

X#= MESSAGE('Lower case string')

END

SomeString = 'A' !ISLOWER возвращает ложь

IF ISLOWER(SomeString)

X#= MESSAGE('Lower case string')

ELSE

X#= MESSAGE('Not lower case string')

END

Смотри также: ISUPPER, ISALPHA, LOCALE, Файлы переменных среды

 

ISSTRING (сообщает, строковое поле или нет)

ISSTRING( поле )

ISSTRING Возвращает истину, если поле GROUP, STRING, CSTRING или PSTRING.

поле Метка поля.

Оператор ISSTRING возвращает истину если поле является типом данных GROUP, STRING, CSTRING или PSTRING.

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

Пример:

MyGroup GROUP

F1 LONG !Поле номер 1

F2 SHORT !Поле номер 2

F3 STRING(30) !Поле номер 3

InGroup GROUP !Поле номер 3

F1 LONG !Поле номер 4

F2 SHORT !Поле номер 5

F3 STRING(30) !Поле номер 6

END

END

Flag LONG

CODE

Flag = ISSTRING(MyGroup.F1) !возвращает ложь

Flag = ISSTRING(MyGroup.F3) !возвращает истину

Смотри также: WHAT, WHERE

 

ISUPPER (проверить символ на прописную букву)

ISUPPER( строка )

ISUPPER Проверяет, содержит ли переданная ей строка прописную букву.

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

Процедура ISUPPER возвращает значение ИСТИНА, если переданная ей строка представляет собой прописную букву, противном случае она возвращает значение ЛОЖЬ. Работа этой процедуры не зависит от установленного языка и последовательности сортировки. Эта процедура требует установленного параметра CLACASE в файле переменной окружения или посредством оператора LOCALE.

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

Пример:

SomeString STRING(1)

CODE

SomeString = 'A' !ISUPPER возвращает истину

IF ISUPPER(SomeString)

X#= MESSAGE('Upper case string')

END

SomeString = 'a' !ISUPPER возвращает ложь

IF ISUPPER(SomeString)

X#= MESSAGE('Upper case string')

ELSE

X#= MESSAGE('Not upper case string')

END

Смотри также: ISLOWER, ISALPHA, LOCALE, Файлы переменных среды

 

KEYBOARD (возвратить код первый в буфере)

KEYBOARD( )

Процедура KEYBOARD возвращает код нажатой клавиши, лежащий первым в буфере клавиатуры. Процедуру используют для выяснения: есть ли нажатые клавиши, которые дожидаются обработки операторами ASK или ACCEPT.

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

Пример:

LOOP UNTIL KEYBOARD() !Ждать нажатия клавиши

ASK

IF KEYCODE() = EscKey THEN BREAK END !Выход из цикла по Esc

END

Смотри также: ASK, ACCEPT, KEYCODE, Метки соответствия кодов клавиш

 

KEYCHAR (возвратить ASCII код )

KEYCHAR( )

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

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

Пример:

ACCEPT !Ждать события

CASE KEYCHAR() !Обработка последней нажатой клавиши

OF VAL('A') TO VAL('Z') ! верхний регистр?

DO ProcessUpper

OF VAL('a') TO VAL('z') ! нижний регистр?

DO ProcessLower

END

END

Смотри также: SETKEYCHAR, ASK, ACCEPT, SELECT, VAL, CHR

 

KEYCODE (возвратить код последней клавиши)

KEYCODE( )

Процедура KEYCODE возвращает код клавиши, нажатой последней на момент возникновения события, либо значение кода клавиши, которое было установлено последней процедурой SETKEYCODE. Текущий список кодов клавиш может быть найден в исходном файле KEYCODES.CLW.

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

Пример:

ACCEPT !Обработать экран

CASE KEYCODE() !Обработка кода нажатой клавиши

OF UpKey !“стрелка вверх”

DO GetRecordUp !прочитать запись

OF DownKey !“стрелка вниз”

DO GetRecordDn !прочитать запись

END

END

Смотри также: ASK, ACCEPT, KEYBOARD, SETKEYCODE, KEYSTATE, Метки соответствия кодов клавиш

 

KEYSTATE (возвратить состояние клавиатуры)

KEYSTATE( )

Процедура KEYSTATE возвращает битовую карту, сформированную последним вызовом процедуры KEYCODE, в которой отражено состояние SHIFT, CTRL, ALT, CAPS LOCK, NUM LOCK, SCROLL LOCK, INSERT и любой из функциональных клавиш. Упомянутая карта располагается в старшем байте возвращаемого SHORT-значения.

x . . . . . . . insert key (8000h)

. x . . . . . . scroll lock (4000h)

. . x . . . . . num lock (2000h)

. . . x . . . . caps lock (1000h)

. . . . x . . . extended (0800h)

. . . . . x . . alt (0400h)

. . . . . . x . ctrl (0200h)

. . . . . . . x shift (0100h)

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

Пример:

ACCEPT !Обработать экран

CASE KEYCODE() !Обработка кода нажатой клавиши

OF EnterKey !Пользователь нажал клавишу Enter

IF BAND(KEYSTATE(),0800h) !Отследить Enter в цифровой панели

PRESSKEY(TabKey) !а пользователю выдать как Tab

END

END

END

Смотри также: KEYCODE, BAND, Кодировка клавиш

 

LASTFIELD (указать последнее поле окна)

LASTFIELD( )

Процедура LASTFIELD возвращает наибольший возможный для текущего окна номер поля или окно или отчет, указанный оператором SETTARGET. Процедура не возвращает номера любых полей в TOOLBAR или MENUBAR.

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

Пример:

DISABLE(FIRSTFIELD(),LASTFIELD()) !Заблокировать все поля

Смотри также: FIRSTFIELD

 

LEFT (выровнять строку влево)

LEFT(строка [,длина])

LЕFТ Выравнивает строку на налево.

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

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

Процедура LЕFТ возвращает выровненную влево строку. Пробелы в начале строки удаляются.

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

Пример:

!LEFT(' ABC') возвращает 'ABC '

CompanyName = LEFT(CompanyName) !Выровнять влево название компании

Смотри также: RIGHT, CENTER

 

LEN (получить длину строки)

LEN(строка)

LЕN Возвращает длину строки.

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

Процедура LЕN возвращает значение длины строки. Если параметр строка является меткой строковой переменой типа SRTING, то процедура возвратит ее объявленную длину. Если параметр строка является меткой строковой переменой типа CSTRING или PSTRING, то процедура возвратит длину содержимого строки. Числовые переменные автоматически преобразуются в промежуточное, строковое значение.

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

Пример:

IF LEN(CLIP(Title) & ' ' & CLIP(First) & ' ' & CLIP(Last)) > 30 !Если полное имя не поместится

Rpt:Name = CLIP(Title) & ' ' & SUB(First,1,1) & '. ' & Last !использовать первую букву имени

ELSE

Rpt:Name = CLIP(Title) & ' ' & CLIP(First) & ' ' & CLIP(Last) !в противном случае

! использовать полное имя

END

Rpt:Title = CENTER(Cus:Name,LEN(Rpt:Title)) !Центрировать имя в заголовке

 

LINE (изобразить прямую линию)

LINE( x ,y ,ширина ,высота [,список атрибутов])

LINE Рисует прямую линию в текущем окне или документе.

x Целочисленное выражение для указания горизонтального положения начальной точки.

y Целочисленное выражение для указания вертикального положения начальной точки.

ширина Целочисленное выражение для указания ширины. Может принимать отрицательные значения.

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

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

Процедура LINE помещает в текущее окно или документ прямую линию. Начальная точка, наклон и длина линии определяются параметрами x, y, ширина и высота. Параметры x и y определяют начальную точку прямой, а параметры ширина и высота указывают расстояние по горизонтали и по вертикали до конечной точки. Если их значения - положительные числа, то линия распространяется вправо и вниз от начальной точки. Если значение параметра ширина отрицательно, то линия распространяется влево от начальной точки; если значение параметра высота отрицательно, то линия распространяется влево от начальной точки. Если либо ширина, либо высота - нулевые, то линия либо вертикальна, либо горизонтальна.

Ширина Высота Результат

положительная положительная вправо и вниз от начальной точки

отрицательная отрицательная влево и вниз от начальной точки

положительная отрицательная вправо и вверх от начальной точки

отрицательная положительная влево и вверх от начальной точки

нулевая положительная вертикально вниз от начальной точки

нулевая отрицательная вертикально вверх от начальной точки

положительная нулевая горизонтально вправо от начальной точки

отрицательная нулевая горизонтально влево от начальной точки

Цвет линии - цвет, установленный оператором SETPENCOLOR для текущего пера. Цвет по умолчанию - цвет, установленный Windows для текста окна. Толщина линии - текущая толщина, установленная SETPENWIDTH, толщина по умолчанию – один пиксел. Тип линии - тип линии, установленный SETPENSTYLE для текущего пера, тип линии по умолчанию - сплошная линия.

Пример:

MDIChild WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!экранные объекты

END

CODE

OPEN(MDIChild)

LINE(100,50,100,50) !Нарисовать линию

Смотри также: Текущая цель, SETPENCOLOR, SETPENWIDTH, SETPENSTYLE

 

LOCALE (загрузить файл с переменными среды)

LOCALE( | файл | )

| переменная, значение |

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

файл Строковая константа или переменная, содержащая имя (с расширением) файла переменных среды (.ENV), который следует загрузить или ключевое слово WINDOWS. Это может быть и полный путь в файловой системе DOS.

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

значение Строковая константа или переменная, которая содержит значение переменной среды.

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

Ключевое слово WINDOWS, использованное в качестве параметра файл, указывает, что для переменных CLACOLSEQ, CLACASE и CLAAMPM используются принятые по умолчанию в Windows значения. При присвоении значений отдельным переменным для параметра значение не требуются двойные кавычки, в отличие от синтаксиса, принятого для файла переменных среды.

Выдаваемые сообщения об ошибках:

02 File Not Found (файл не найден)

05 Access Denied (доступ запрещен)

Пример:

LOCALE('MY.ENV') !Загрузить файл переменных среды

LOCALE('WINDOWS') !Установить значения CLACOLSEQ, CLACASE и CLAAMPM

LOCALE('CLABUTTON','OK,&Si,&No,&Abortar,&Ignora,&Volveratratar,Cancelar,&Ayuda')

!Установить испанские надписи на кнопках

LOCALE('CLACOLSEQ',|

'AДЕЖaабвдежBbCЗcзDdEЙeийклFfGgHhIiмнопJjKkLlMmNСnсOЦoтуфцPpQqRrSsЯTtUЬuщъыьVvWwXxYyZzя')

!Установить последовательность сортировки

LOCALE('CLACASE','ДЕЖЗЙСЦЬ,дежзйсть') !Установить пары прописных/строчных букв

LOCALE('CLAMSG2','No File Found') !Установить текст сообщения для ERRORCODE()=2

Смотри также: Файлы переменных среды, OEM

 

LOCK (заблокировать файл)

LOCK(файл [,секунд])

LOCK Блокирует файл данных.

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

секунд Числовая константа или переменная, которая задает максимальное время ожидания (в секундах).

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

LОCK(файл)

Пытается заблокировать файл до тех пор, пока это не удастся. Если файл уже заблокирован другой рабочей станцией, то оператор LОCK будет ожидать до тех пор, пока другой пользователь не разблокирует его.

LОCK(файл,секунд)

После безуспешных попыток в течение заданного числа секунд заблокировать файл выдает сообщение “File Already Locked” (файл уже заблокирован)

Наиболее часто встречающаяся проблема, которую следует избегать при блокировании файлов - взаимная блокировка. Эта ситуация возникает, когда две рабочие станции, используя оператор LOCK в форме LОCK(файл), пытаются заблокировать один и тот же набор файлов, но в различной последовательности. Одна рабочая станция уже заблокировала файл, который другая пытается блокировать в данный момент и наоборот. Избежать этой проблемы можно используя вторую форму оператора: LОCK(файл,секунд) и блокируя файлы всегда в одном и том же порядке.

Выдаваемые сообщения об ошибках: 32 File Is Already Locked (файл уже заблокирован)

Пример:

LOOP !Цикл для исключения взаимной блокировки

LOCK(Master,1) !В течение 1 секунды пытаться заблокировать файл Master

IF ERRORCODE() = 32 !Если кто-то уже сделал это

CYCLE !попытаться еще раз

END

LOCK(Detail,1) !В течение 1 секунды пытаться заблокировать файл Detail

IF ERRORCODE() = 32 !Если кто-то уже сделал это

UNLOCK(Master) !разблокировать файл Master

CYCLE !попытаться повторить все сначала

END

BREAK !прервать цикл, когда оба файла разблокированы

END

Смотри также: UNLOCK, HOLD, LOGOUT

 

LOCKTHREAD (вновь заблокировать внешнюю обработку сообщений)

LOCKTHREAD

Оператор LOCKTHREAD вновь блокирует внешнюю обработку сообщений, которая была разрешена оператором UNLOCKTHREAD.

С помощью процедуры THREADLOCKED() можно определить является ли данный процесс “разблокированным” или нет.

Пример:

UNLOCKTHREAD !Разблокировать процесс

MyLibraryCodeWithMessageLoop !Обратиться к процедуре со своим циклом обр. сообщений

LOCKTHREAD !заблокировать процесс

Смотри также: ACCEPT, UNLOCKTHREAD, THREADLOCKED

 

LOG10 (вычислить десятичный логарифм)

LOG10(выражение)

LOG10 Возвращает десятичный логарифм.

выражение Числовая константа, переменная или выражение. Если значение выражения меньше нуля, то возвращаемое процедурой значение равно нулю. Десятичный логарифм неопределен для значений меньших или равных нулю.

Процедура LОG10 возвращает десятичный логарифм значения числового выражения. Десятичный логарифм числа - это степень, в которую нужно возвести число 10, чтобы получить данное число.

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

Пример:

!LOG10(10) возвращает 1

!LOG10(1) возвращает 0

LogStore = LOG10(Var) !Запомнить десятичный логарифм Val

Смотри также: LOGE

 

LOGE (вычислить натуральный логарифм)

LOGE(выражение)

LОGЕ Возвращает натуральный логарифм.

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

Процедура LОGЕ возвращает натуральный логарифм значения числового выражения. Натуральный логарифм числа - это степень, в которую нужно возвести число е, чтобы получить данное число. Значение е, используемое внутренней библиотекой Clarion равно 2.71828182846.

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

Пример:

!LOGE(2.71828182846) возвращает 1

!LOGE(1) возвращает 0

LogVal = LOGE(Val) !Получить натуральный логарифм Val

Смотри также: LOG10

 

LOGOUT (начать транзакцию)

LOGOUT(интервал [, файл, ... , файл ] )

LOGOUT Начинает транзакцию.

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

файл Метка объявления структуры FILE. В списке параметров может быть несколько параметров файл (до 100), разделенных запятыми. Если файл не указан, все файлы, которые будут входить в набор файлов транзакции, должны перечисляться используя PROP:Logout.

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

LOGOUT сообщает файловому драйверу о том, что начинается транзакция. Затем драйвер выполняет действия, необходимые в этой файловой системе для того, чтобы начать отработку транзакции для заданного набора файлов. Например, если в этой файловой системе требуется, чтобы для отработки транзакции были заблокированы файлы, то оператор LOGOUT блокирует их.

Одновременно может быть активна только одна транзакция. Второй оператор LOGOUT, выполняемый до оператора COMMIT или ROLLBACK, относящегося к предыдущей транзакции, выдает сообщение об ошибке 56.

Выдаваемые сообщения об ошибках:

32 File Is Already Locked (файл уже заблокирован)

37 File Not Open (файл не открыт)

48 Unable to Log Transaction (невозможно завершить транзакцию)

56 LOGOUT Already Active (транзакция уже активна)

80 Function Not Supported (функция не поддерживается)

Пример:

LOGOUT(1,OrderHeader,OrderDetail) !Начать транзакцию

DO ErrHandler !всегда проверяя ошибки

ADD(OrderHeader) !Добавить порождающую запись

DO ErrHandler !всегда проверяя ошибки

LOOP X# = 1 TO RECORDS(DetailQue) !Процесс занесения порожденных записей

GET(DetailQue,X#) !Взять одну из очереди

DO ErrHandler !проверяя ошибки

Det:Record = DetailQue !поместить в буфер записи

ADD(OrderDetail) !и добавить в файл

DO ErrHandler !проверяя ошибки

END

COMMIT !Завершить успешную транзакцию

ASSERT(~ERRORCODE())

ErrHandler ROUTINE !Подпрограмма проверки ошибок

IF NOT ERRORCODE() THEN EXIT. !Выйти, если нет ошибок

Err" = ERROR() !Save the error message

ROLLBACK !Откатить неуспешную транзакцию

ASSERT(~ERRORCODE())

BEEP !Оповестить пользователя

MESSAGE('Transaction Error - ' & Err")

RETURN !и выйти

Смотри также: COMMIT, ROLLBACK, Prop:Logout

 

LONGPATH (получить длинное имя)

LONGPATH( [ короткое имя файла ] )

LONGPATH Возвращает подходящее длинное файловое имя для данного короткого.

короткое имя файла

Строковая константа, переменная или выражение, которое специфицирует стандартное короткое имя для преобразования (может содержать полный путь). Если опущено, LONGPATH возвращает в длинном имени имя текущего диска и директорию.

Процедура LONGPATH возвращает длинное имя файла для данного короткого. Файл, имя которого указано в поле короткое имя файла (shortfilename) должен существовать на диске. LONGPATH теперь может использоваться в оценивании выражений оператором EVALUATE во время работы приложения и в шаблонах.

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

Пример:

MyLongFile STRING(260)

CODE

MyLongFile = LONGPATH('c:\progra~1\mytext~1.txt')

!возвращает: c:\program files\my text file.txt

Смотри также: SHORTPATH, PATH, DIRECTORY

 

LOWER (преобразовать в строчные буквы)

LOWER(строка)

LОWЕR Преобразует символы в строке в строчные.

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

Процедура LОWЕR возвращает строку, в которой все буквы строчные.

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

Пример:

!LOWER('ABC') возвращает 'abc'

Name = SUB(Name,1,1) & LOWER(SUB(Name,2,19))

!Все буквы имени кроме первой записать маленькими буквами

Смотри также: UPPER, ISUPPER, ISLOWER

 

MATCH (вернуть сопоставленные величины)

MATCH( первое, второе [, режим ] )

MATCH Возвращает истину или ложь исходя из результатов сравнения переданных первого и второго параметров.

первое Строка с данными для сравнения со вторым параметром. Строка должна быть заключена в одинарные кавычки.

второе Строка с данными для сравнения с первым параметром. Строка должна быть заключена в одинарные кавычки.

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

Процедура MATCH возвращает истину или ложь в зависимости от результатов сравнения первого и второго параметров в соответствии с указанным режимом сравнения. Следующие метки соответствия для значения режима перечислены в EQUATES.CLW:

Match:Simple

Прямое сравнение (первое = второму), которое чаще всего используется в комбинации с Match:NoCase.

Match:Wild (по умолчанию)

Свободное сравнение со вторым параметром, включающим шаблон, который может содержать звездочку (*) для указания того, что символов может быть несколько или нисколько (0), а также знак вопроса (?) для указания, что заменяется только один символ.

Match:Regular

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

Match:Soundex

Стандартное soundex сравнение двух строк, возвращает истину, если они имеют одинаковое soundex значение.

Match:NoCase

Добавляет режим для чувствительности к регистру (за исключением Soundex).

Операторы регулярных выражений

Регулярные выражения используются для описания шаблонов в тексте. Следующие символы являются операторами регулярных выражений (или метасимволы) для повышения производительности и универсальности регулярных выражений.

^ Символ ^ соответствует началу строки или начальной линии внутри строки. Например:

^@chapter

соответствует "@chapter" в начале строки.

$ Символ доллара означает тоже самое что и символ ^, но только для конца строки или линии внутри строки. Например:

p$

соответствует записи оканчивающейся на p.

. Точка соответствует любому одиночному символу за исключением новой линии. Например:

.P

соответствует любому одиночному символу следующим за P в строке. Используя конкатенацию мы можем создать регулярное выражение подобно 'U.A', которое соответствует любой трехсимвольной последовательности, начинающейся с 'U' и заканчивающейся 'A'.

[...] Это так называемый набор символов. Он соответствует любому из символов, заключенному в квадратные скобки. Например:

[MVX]

соответствует любому из символов M, V или X в строке. Диапазон символов указан использованием дефиса между первым и последним символом и заключается целиком в квадратные скобки. Например:

[0-9]

соответствует любой цифре. Для указания для соответствия символа '-', набирайте как '---', тогда диапазон будет соответствовать только символу '-'. Вы можете также указать '-' как первый или последний символ набора. Чтобы указать для соответствия символ '^', расположите его в любом месте кроме первой позиции набора символов. Чтобы указать ']', расположите его первым в наборе символов. Например:

[]d^]

соответствует одному из ']', 'd' или '^'.

[^ ...]

Это дополненный набор символов. Первым символом после [ должен быть символ ^. Это соответствует любому символу за исключением указанных в квадратных скобках (или новой линии). Например:

[^0-9]

соответствует любому символу за исключением цифр.

| Вертикальная черта является оператором чередования и используется для указания альтернатив. Например:

^P|[0-9]

соответствует любой строке которая соответствует либо ^P либо [0-9]. Это означает соответствие любой строке содержащей цифры или начинающейся с P. Чередование относится к предельно возможным регулярным выражениям с любой стороны.

Пробелы не допускается использовать между строками и операторами чередования.

{...}

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

* Звездочка означает, что предшествующее регулярное выражение будет повторяться столько раз, сколько необходимо для того, чтобы найти соответствие. Например:

ph*

применяет символ * к предшествующему символу h и ищет соответствие символу p сопровожденному любым количеством символов h. Это также соответствует символу p, даже если символ h отсутствует. Символ * повторяет наименее возможное предшествующее выражение (применяйте круглые скобки, если нужно повторять большее выражение). Это находит наибольшее число повторений насколько возможно. Например:

(c[ad][ad]*r x)

соответствует строке формы (car x), (cdr x), (cadr x) и так далее.

+ Знак плюс подобен звездочке, но предшествующее выражение должно сочетаться хотя бы один раз. Это означает, что:

wh+y

должно соответствовать "why" и "whhy", но не "wy," несмотря на то, что wh*y найдет соответствие во всех трех строках. Это более простой способ записи последнего * примера:

(c[ad]+r x)

? Знак вопроса подобен *, но предшествующее выражение должно встречаться только раз или не встречаться вовсе. Например:

fe?d

будет соответствовать fed и fd, но ничему больше.

\ Обратный слеш используется для подавления специального значения символа при сопоставлении. Например:

\$

соответствует символу $.

В регулярных выражения операторы *, +, и ? имеют высший приоритет, затем следует конкатенация и наконец символ |.

Теперь имеются расширенные возможности функции MATCH используемой с атрибутом FILTER в любой структуре VIEW для доступа к серверам SQL и ODBC. Для более детальной информации смотрите темы “Использование MATCH с PROP:Filter базами данных SQL”.

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

Пример:

A STRING('Richard')

B STRING('RICHARD')

C STRING('R*')

D STRING('[A-D]')

ListHave1 STRING('IN,OH,KY,TN,PA')

ListHave2 STRING('WI,MN,IA,SD,ND')

StatesWanted STRING('NJ|NY|PA|DE')

RV BYTE !Возвращаемое значение

CODE

RV = MATCH(A,B,Match:Simple+Match:NoCase) !Возвращает истину – соответствие любому регистру

RV = MATCH(A,B,Match:Soundex) !Возвращает истину – такие же soundex значение

RV = MATCH(A,C) !Возвращает истину – прямое соответствие

RV=MATCH('Fireworks on the fourth', '{{4|four}th', Match:Regular+Match:NoCase) !Возвращает

!истину

RV=MATCH('July 4th fireworks', '{{4|four}th',Match:Regular+Match:NoCase) !Возвращает

!истину

X = STRPOS(ListHave1,StatesWanted,Match:Regular+Match:NoCase) ! X = 1

Y = STRPOS(ListHave2,StatesWanted,Match:Regular+Match:NoCase) ! Y = 0

IF MATCH(EmployeeName,'^Th?om{{as|my}?{{ }+', Match:Regular+Match:NoCase)

Message('Welcome Tom Thom Thomas or Tommy')

END

!Регулярное выражение для проверки правильности почтового адреса (email).

!1. Часть имени может содержать символы: A-Z 0-9 -._

!2. Затем должен быть символ @

!3. атем повторяющаяся группа: A-Z 0-9 -._

!4. Точка и символы 2, 3, 4

RV = MATCH(UPPER(CLIP(eMailAddr)),|

'^[-A-Z0-9._]+@{{[-A-Z0-9._]+.}+[A-Z][A-Z][A-Z]?[A-Z]?$', Match:Regular)

Смотри также: STRPOS

 

MAXIMUM (получить максимальное значение индекса)

MAXIMUM(переменная,индекс)

MAXIMUM Возвращает максимальное значение индекса.

переменная Метка переменной, объявленной с атрибутом DIM.

индекс Числовая константа, переменная или выражение, задающее номер индекса массива. Параметр индекс указывает, какой из индексов массива передается процедуре.

Процедура MAXIMUM возвращает максимальное значение для индекса явно объявленного массива. Эта процедура не оперирует с неявно объявленными для переменных типа SТRING, CSТRING и PSТRING массивами. Обычно она используется для определения размера массива, переданного в процедуру в качестве параметра или процедуры.

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

Пример:

Array BYTE,DIM(10,12) !Определить двумерный массив

!Для приведенного выше массива: MAXIMUM(Array.1) возвращает 10

! MAXIMUM(Array,2) возвращает 12

CODE

LOOP X# = 1 TO MAXIMUM(Array,1) !Цикл по первому индексу

LOOP Y# = 1 TO MAXIMUM(Array,2) !Цикл по второму индексу

Array[X#,Y#] = 27 !присвоить каждому элементу значение по умолчанию

END

END

Пример: DIM, Передача массивов в качестве параметра

 

MESSAGE (отобразить окно сообщений)

MESSAGE( текст [,заголовок] [,пиктограмма] [,кнопки] [,по умолчанию] [,стиль] )

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

текст Строковая константа или переменная, в которых находится текст, предназначенный для окна сообщений. Вертикальная черта (|) означает переход на новую строку в сообщениях из нескольких строк. Включение ‘<9>’ в текст вставляет табуляцию для выравнивания текста.

заголовок Заголовок окна сообщений. Если параметр опущен, то окно изображается без заголовка.

пиктограмма Строковая константа или переменная, именующая файл .ICO, который будет показан, или EQUATE для одной из стандартных пиктограмм Windows (это EQUATE из EQUATES.CLW). При пропуске параметра ни одна пиктограмма в окне диалога не появляется.

кнопки Либо целочисленное выражение, показывающее, какую из стандартных кнопок Windows (необязательно одну, можно и несколько) поместить в окне диалога, либо строковое выражение, содержащее разграниченный вертикальными линиями список надписей для кнопок (которых не может быть более восьми). Если это пропущено, то будет показана кнопка Ok.

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

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

Допустимыми значениями для параметра стиль являются следующие значения:

Dec Bin Type

Modal Type:

0 0b Модально для приложения

1 1b Модально для системы

Copy Text:

0 00b текстовое сообщение отображается статически без возможности копирования

2 10b текстовое сообщение отображается только для чтения в несколько строк с возможностью выбирать весь текст или только его часть и возможностью копировать в буфер

Процедура MESSAGE выводит на экран окно сообщений стандарта Windows и ждет ответа пользователя. Как правило, это ответ типа “Да” или “Нет”, либо типа “Ok”. Вы можете указать шрифт для MESSAGE установкой SYSTEM{PROP:FONT}.

Символические имена для пиктограмм, параметров кнопок и параметров по умолчанию находятся в файле EQUATES.CLW и доступны для использования, когда параметр кнопки не строковая переменная:

BUTTON:OK

BUTTON:YES

BUTTON:NO

BUTTON:ABORT

BUTTON:RETRY

BUTTON:IGNORE

BUTTON:CANCEL

BUTTON:HELP

Когда кнопки строковая величина, параметр по умолчанию может иметь значение в диапазоне от 1 до 8, в зависимости от того, как определено в поле кнопки.

Процедура MESSAGE возвращает номер кнопки, нажатой пользователем для выхода из диалогового окна. Возвращаемый номер кнопки является постоянным значением, которое символизируется каждым из этих EQUATE (когда параметр кнопки есть целое число), либо целым числом из диапазона от 1 до числа кнопок, определенного в тексте кнопки (максимум-8), если кнопки содержит строчный текст.

Следующие символические имена наиболее часто используются для параметра пиктограмма (в файле EQUATES.CLW их значительно больше):

ICON:None

ICON:Application

ICON:Hand

ICON:Question

ICON:Exclamation

ICON:Asterisk

ICON:Pick

ICON:Clarion

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

Ниже представлен список мнемонических имен, используемых для параметра стиль:

MSGMODE:SYSMODAL

MSGMODE:CANCOPY

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

Пример:

!Иконка ? с кнопками Yes и No, по умолчанию- No:

CASE MESSAGE('Quit?','Editor',ICON:Question,BUTTON:Yes+BUTTON:No,BUTTON:No,1)

OF BUTTON:No !окно типа System Modal, без возможности копирования

CYCLE

OF BUTTON:Yes

MESSAGE('Goodbye|So Long|Sayonara') !Трехстрочное сообщение с одной только кнопкой Ok.

RETURN

END

!Кнопки Yes, No, и Maybe, по умолчанию Maybe, приложение типа Application Modal

!с возможностью копирования

CASE MESSAGE('Quit?','Editor',ICON:Question,'&Yes|&No|&Maybe',3,2)

OF 1 !Кнопка Yes

RETURN

OF 2 !Кнопка No

CYCLE

OF 3 !Кнопка Maybe

MESSAGE('You have a 50-50 chance of staying or going')

IF CLOCK() % 2 !Является ли текущее время четным или нечетным сотым

!долям секунды?

RETURN

ELSE

CYCLE

END

END

 

MONTH (получить месяц)

MONTH(дата)

MONTH Возвращает месяц в году.

дата Числовая константа, переменная или выражение, или метка переменной типа SТRING, CSТRING или PSТRING, объявленной с шаблоном даты. Параметр дата должен представлять стандартную дату. Переменные, объявленные с шаблоном даты, автоматически преобразуются в промежуточное значение в стандартном формате даты.

Процедура MONTH вычисляет для заданной стандартной даты месяц года (от 1 до 12).

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

Пример:

PayMonth = MONTH(DueDate) !Получить месяц из стандартной даты

Смотри также: Стандартная дата, DAY, YEAR, TODAY, DATE

 

MOUSEX (получить положение мыши по горизонтали)

MOUSEX( )

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

По умолчанию возвращаемое значение в диалоговых единицах, если не изменено свойство PROP:Pixels. Если же свойство PROP:Pixels установлено в истину (1), возвращаемое значение выражается в пикселях.

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

Пример:

SaveMouseX = MOUSEX() !Запомнить положение мыши

Смотри также: MOUSEY

 

MOUSEY (получить положение мыши по вертикали)

MOUSEY( )

Процедура MOUSEY возвращает число, которое определяет вертикальное положение курсора мыши в момент возникновения события. Положение берется относительно начала окна.

По умолчанию возвращаемое значение в диалоговых единицах, если не изменено свойство PROP:Pixels. Если же свойство PROP:Pixels установлено в истину (1), возвращаемое значение выражается в пикселях.

.

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

Пример:

SaveMouseY = MOUSEY() !Запомнить положение мыши

Смотри также: MOUSEX

 

NAME (получить имя файла)

NAME(метка)

NAME Возвращает имя файла.

метка Метка оператора объявления файла.

Процедура NAME возвращает строковую константу содержащую имя устройства операционной системы для структуры, указанной меткой. Для структуры FILE при условии, что файл открыт, возвращается полная спецификация (диск, путь, имя и расширение). Если файл закрыт, то возвращается содержимое атрибута NAME структуры файл. Если нет атрибута NAME, то возвращается метка файла.

 

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

Пример:

OpenFile = NAME(Customer) !Сохранить имя открытого файла

Смотри также: EXISTS

 

NEXT (прочитать следующую запись)

NEXT( структура )

NEXT Считывает следующую запись файла или VIEW в текущей последовательности.

структура Метка объявления структуры FILE или VIEW.

Оператор NEXT считывает следующую в заданной ранее последовательности запись файла или VIEW. Последовательность, в которой считываются записи, определяется оператором SET (или RESET). Первое выполнение оператора NEXT считывает запись в позиции, указанной оператором SET. Последующие выполнения оператора NEXT считывают следующие записи в заданной оператором SET последовательности. Выполнение операторов GET, REGET, ADD, PUT и DELETE не влияет на установленную последовательность обработки записей. Выполнение оператора NEXT без предварительной установки оператором SET положения в файле и последовательности обработки или попытка считывания записи после конца файла приводит к возникновению ошибочной ситуации “Record Not Available” (запись недоступна).

Использование в файлах

Оператор NEXT считывает следующую в заданной ранее последовательности запись или записи файла и помещает в буфер структуры RECORD.

Использование в виртуальных файлах

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

Как оператор SET, “поставленный” на первичный файл VIEW-структуры до открытия VIEW, так и оператор SET(view), которому предшествует OPEN(view) определяют последовательность чтения файла.

Выдаваемые сообщения об ошибках:

33 Record Not Available (запись недоступна)

37 File Not Open (файл не открыт)

43 Record Is Already Held (запись уже заблокирована)

90 Driver Specific Error (возвращается функцией FILEERRORCODE) (Ошибка указанного драйвера)

Пример:

ViewOrder VIEW(Customer) !Объявить VIEW-структуру

PROJECT(Cus:AcctNumber,Cus:Name)

JOIN(Hea:AcctKey,Cus:AcctNumber) !Присоединить Header файл

PROJECT(Hea:OrderNumber)

JOIN(Dtl:OrderKey,Hea:OrderNumber) !Присоединить Detail файл

PROJECT(Det:Item,Det:Quantity)

END

END

END

CODE

OPEN(Customer,22h)

SET(Cus:NameKey) !Встать на начало файла в последовательности ключа

LOOP !Читать все записи до конца файла

NEXT(Customer) !считывать записи последовательно

IF ERRORCODE() THEN BREAK. !остановиться по достижении конца файла

DO PostTrans !вызвать подпрограмму выполнения транзакции

END

OPEN((Header,22h)

OPEN(Detail,22h)

OPEN(Product,22h)

SET(Cus:AcctKey)

OPEN(ViewOrder)

LOOP !Читать все записи до конца первичного файла

NEXT(ViewOrder) !считать очередную запись

IF ERRORCODE() THEN BREAK. !остановиться по достижении конца файла

DO PostTrans !вызвать подпрограмму выполнения транзакции

END !Конец цикла

Смотри также: SET, RESET, PREVIOUS, EOF, HOLD, WATCH

 

NOMEMO (включить режим выборки без MEMO-полей)

NOMEMO(файл)

NOMEMO Включает режим выборки записей без MEMO-полей.

файл Метка файла.

Оператор NOMEMO включает режим выборки записей данных последующими операторами GET, REGET, NEXT и PREVIOUS без выборки значения МЕМО-поля. В таком режиме эти операторы считывают запись данных, но не выбирают соответствующее ей MEMO- или BLOB-поле. Обычно это ускоряет доступ к записи, если содержимое MEMO- или BLOB-поля не требуется в процессе работы процедуры.

Пример:

SET(Master)

LOOP

NOMEMO(Master) !Включить режим без МЕМО-полей

NEXT(Master) !Получить запись без МЕМО-поля

IF ERRORCODE() THEN BREAK.

Queue = Mst:Record !Заполнить очередь

ADD(Queue)

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

END

DISPLAY(?ListBox) !Отобразить очередь

Смотри также: GET, NEXT, PREVIOUS, MEMO

 

NOTIFICATION (получить информацию от передающего процесс)

NOTIFICATION(код извещения, <процесс>, <параметр> ), BYTE

NOTIFICATION Получает информацию от передающего процесс.

код извещения Переменная типа UNSIGNED, которая получает значение кода извещения, передаваемого отправителем оператором NOTIFY .

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

параметр Переменная типа LONG, которая получает параметр, переданный отправителем оператором NOTIFY.

Функция NOTIFICATION используется принимающим процессом. Она получает код извещения, номер потока и параметр переданный отправителем потока оператором NOTIFY.

NOTIFICATION возвращает ЛОЖЬ (0), если функция EVENT() возвращает событие отличное от EVENT:Notify. Если выдается событие EVENT:Notify, NOTIFICATION возвращает ИСТИНУ. Из-за того, что вызовы к NOTIFY и NOTIFICATION не синхронны, отправитель процесса может быть уже закрыт, когда принимающий процесс получает сообщение EVENT:Notify.

NOTIFY и NOTIFICATION функционально заменяют оператор SETTARGET(,процесс). Они могут быть также использованы для хранения передающей информации между процессами.

Код между SETTAREGT(,процесс) и последующим SETTARGET выполняется не только в среде указанного процесса, но и также в текущем процессе. То есть, два процесса могут выполнять код в одной и той же среде. Также, связанные DLL могут соединить их зависимые от процесса данные с ID текущего процесса. Эти аспекты делают использование SETTARGET(,процесс) потенциально опасным в новой модели процессов.

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

Пример:

CASE EVENT()

OF EVENT:Accepted

CASE ACCEPTED()

OF ?Start

START (T1)

OF ?Load

CALL ('DLL.DLL', 'EntryPoint', 1)

ELSE

Q.Feq = ACCEPTED()

GET (Q, Q.Feq)

IF ERRORCODE() = 0 AND Q.Op <> 0

DM &= Q.ID + 0

DM.ExecuteMenu (Q.Op)

END

END

OF EVENT:Notify

IF NOTIFICATION (NCode,, NParam) !NOTIFY послал событие Notify. Получает код и параметры

DM &= NParam + 0 !Присвоить переданный параметр указателю-переменной

CASE Ncode !Проверить код уведомления

OF NOTIFY:Load

DM.CreateMenu (Q) !Выполнить подходящее действие

OF NOTIFY:Unload

DO DestroyMenu

UNLOAD ('DLL.DLL') !Выполнить подходящее действие

END

END

END

Смотри также: NOTIFY

 

NOTIFY (послать безопасную информацию получающему процессу)

NOTIFY( код извещения, <процесс>, <параметр> )

NOTIFY Посылает событие и необязательный параметр в принимающий процесс.

код извещения Беззнаковое целое значение, которое указывает извещение или запрашиваемый код.

процесс Знаковое целое, которое указывает номер получающего процесса; если опущен или равен 0, получатель - текущий поток.

параметр Необязательное значение типа LONG, которое используется как параметр извещения или запрос.

Оператор NOTIFY вызывается на стороне отправителя. Он генерирует событие EVENT:Notify и размещает его во внешней очереди событий процесса получателя верхнего окна. Обычно, событие EVENT:Notify это специальное событие которое может передавать до 2-х параметров (процесс и параметр) получателю.

Выполнение процесса отправителя тут же продолжается и не ждет никакого ответа от получателя.

NOTIFY и NOTIFICATION функционально заменяют оператор SETTARGET(,процесс). Они могут быть также использованы для хранения передающей информации между процессами.

Код между SETTAREGT(,процесс) и последующим SETTARGET выполняется не только в среде указанного процесса, но и также в текущем процессе. То есть, два процесса могут выполнять код в одной и той же среде. Также, связанные DLL могут соединить их зависимые от процесса данные с ID текущего процесса. Эти аспекты делают использование SETTARGET(,процесс) потенциально опасным в новой модели процессов.

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

Пример

DynMenu.Construct PROCEDURE()

CODE

SELF.NofWindows = 0

NOTIFY (NOTIFY:Load, 1, ADDRESS (SELF.IDynMenu)) !Послать событие NOTIFY в первичный процесс

RETURN

! -------------------------------------------------------------

DynMenu.Destruct PROCEDURE()

CODE

NOTIFY (NOTIFY:Unload, 1, ADDRESS (SELF.IDynMenu))

RETURN

Смотри также: NOTIFICATION, SETTARGET

 

NULL (проверить значение поля на фиктивное)

NULL(поле)

NULL(файл, поле)

NULL Определяет наличие фиктивного значения в поле.

поле Метка (включая префикс) поля в структуре FILE. Это может быть структура GROUP или RECORD.

файл Метка структуры FILE.

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

Теперь вы можете передавать файл в качестве первого параметра в процедуру NULL. Это позволяет передавать указатели на поля (см. пример ниже).

 

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

Пример:

Customer FILE,DRIVER('MSSQL'),PRE(Cus) !Объявить структуру файла покупателей

AcctKey KEY(Cus:AcctNumber)

Record RECORD

AcctNumber LONG

OrderNumber LONG

Name STRING(20)

Addr STRING(20)

CSZ STRING(35)

END

END

Header FILE,DRIVER('MSSQL'),PRE(Hea) !Объявить структуру файла заголовков

AcctKey KEY(Hea:AcctNumber)

Record RECORD

AcctNumber LONG

OrderNumber LONG

ShipToName STRING(20)

ShipToAddr STRING(20)

ShipToCSZ STRING(35)

END

END

CODE

OPEN(Header)

OPEN(Customer)

SET(Hea:AcctKey)

LOOP

NEXT(Header)

IF ERRORCODE() THEN BREAK.

IF NULL(Hea:ShipToName) !Проверить заполнен ли адрес доставки

Cus:AcctNumber = Hea:AcctNumber

GET(Customer,Cus:AcctKey) !Прочитать запись о покупателе

IF ERRORCODE()

CLEAR(Cus:Record)

END

Hea:ShipToName = Cus:Name ! и присвоить адрес покупателя

Hea:ShipToAddr = Cus:Addr ! в качестве адреса поставки

Hea:ShipToCSZ = Cus:CSZ

END

PUT(Header) !Записать обратно запись заголовка

END

!Пример 2 – Использование параметра файл

SwapNullState PROCEDURE(File F, *? var)

CODE

IF NULL(f, var)

SETNONULL(f, var)

ELSE

SETNULL(f, var)

END

Смотри также: SETNULL, SETNULLS, SETNONNULL, GETNULLS

 

NUMERIC (проверить числовую строку)

NUMERIC(строка)

NUMERIC Проверяет числовую строку.

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

Процедура NUMERIC возвращает 1 (истина), если строка содержит допустимую числовую величину, и 0 (ложь) - если строка содержит недопустимые в числе символы. Допустимыми символами являются цифры от 0 до 9, буква “E” (см. ниже), знак минус спереди и десятичная точка. DEFORMAT используется для получения неформатированных чисел из форматированной строки.

Допустимым числом может также быть REAL и поэтому форматированные строки представляющие корректные числа могут быть одними из следующих:

[<знак>]<цифры>[.[<цифры>]][e[<знак>]<цифры>]

[<знак>].<цифры>[e[<знак>]<цифры>]

где:

<знак> - символ минус (-) или плюс (+)

<цифры> - последовательность (не пустая) десятичных цифр

e – символы либо "e", либо "E"

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

Пример:

!NUMERIC('1234.56') возвращает 1

!NUMERIC('1,234.56') возвращает 0

!NUMERIC('-1234.56') возвращает 1

!NUMERIC('1234.56-') возвращает 0

IF NOT NUMERIC(PartNumber) !Если в поле не число

DO ChkValidPart !выполнить подпрограмму проверки правильности значения

END !Конец условия

Смотри также: DEFORMAT

 

OMITTED (проверить не опущены ли параметры)

OMITTED(номер параметра)

(имя)

OMITTED Проверяет не опущен ли параметр.

номер параметра Целочисленная константа или переменная, которая задает номер параметра, который необходимо проверить.

имя Имя параметра-процедуры.

Процедура OMITTED проверяет был ли опущен параметр в списке параметров во время обращения к процедуре. Если параметр, указанный номером параметра опущен, то возвращаемое значение равно 1 (истина). И возвращаемое значение равно 0 (ложь), если параметр передан. Любые номера параметров после последнего переданного рассматриваются как номера опущенных параметров.

Параметр может опускаться, если в прототипе процедуры его тип данных заключен в угловые скобки (< >). Хотя параметры в прототипе со значениями по умолчанию могут быть опущены в вызывающей процедуре, значения по умолчанию на самом деле передаются и поэтому процедура OMITTED возвращает ложь (0) для таких параметров.

Все методы класса имеют неявный первый параметр который передается всегда – имя класса. Это означает, что OMITTED(1) всегда возвращает ложь для метода класса. Любые действительные параметры передаваемые в метод нумеруются начиная с двойки (2). То есть, чтобы проверить какой из двух параметров передан в класс, вы должны проверить номер параметра два (2) и три (3).

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

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

Пример:

MAP

SomeProc PROCEDURE(STRING,<LONG>,<STRING>) !Прототип процедуры

END

MyClass CLASS

MyMethod PROCEDURE(STRING Field1,<LONG Date>,<STRING Field3>) !Прототип метода

END

CODE

SomeProc(Field1,,Field3) !Для этого оператора:

!OMITTED(1) возвращает 0, OMITTED(2) возвращает 1

!OMITTED(3) возвращает 0, OMITTED(4) возвращает 1

SomeProc PROCEDURE(Field1,Date,Field3)

CODE

IF OMITTED(2) !Если параметр date был опущен

Date = TODAY() !использовать системную дату

END

MyClass.MyMethod PROCEDURE(STRING Field1,<LONG Date>,<STRING Field3>)

CODE

IF OMITTED(3) !Если параметр date был опущен

Date = TODAY() !использовать системную дату

END

*******Пример использования OMITTED с параметром-процедурой:

PROGRAM

MAP

PP(LONG),LONG,TYPE

END

T CLASS

F PROCEDURE (<LONG>,<QUEUE>,<FILE>,<KEY>,<BLOB>,<T>, |

<WINDOW>,<?>,<PP>),LONG,PROC

END

CODE

T.F()

T.F PROCEDURE (<LONG L>,<QUEUE Q>,<FILE F>,<KEY K>,<BLOB B>,<T TT>, |

<WINDOW W>,<? A>,<PP P>)

Res LONG,AUTO

CODE

Res = 0

Res += OMITTED (SELF)

Res += OMITTED (L)

Res += OMITTED (Q)

Res += OMITTED (F)

Res += OMITTED (K)

Res += OMITTED (B)

Res += OMITTED (TT)

Res += OMITTED (W)

Res += OMITTED (A)

Res += OMITTED (P)

RETURN Res

Смотри также: Передача массивов в качестве параметра

 

OPEN (открыть структуру данных)

OPEN( структура [, режим доступа / владелец ] )

OPEN Открывает структуру FILE, VIEW, APPLICATION, WINDOW или REPORT для обработки.

структура Метка структуры FILE, VIEW, APPLICATION, WINDOW или REPORT .

режим доступа Числовая константа, переменная или выражение, которая определяет уровень доступа, обуславливаемый и для пользователя, открывающего файл, и для других пользователей в многопользовательской среде. По умолчанию устанавливается значение 22h (чтение/запись + запрет записи). Допустимо если параметр структура именует структуру FILE.

владелец Метка структуры APPLICATION или WINDOW, которая “владеет” оконной структурой при открытии.

Оператор OPEN открывает FILE, VIEW, APPLICATION, WINDOW или REPORT структуру для работы.

Использование для файлов

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

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

Имеются следующие фактические значения для каждого уровня доступа:

Dec Hex Доступ

Доступ пользователя:

0 0h Только чтение

1 1h Только запись

2 2h Чтение/Запись

Доступ других пользователей:

0 0h Любой доступ (режим совместимости с FCB)

16 10h Полный запрет

32 20h Запрет записи

48 30h Запрет чтения

64 40h Нет запрета

Использование для виртуальных файлов

Оператор OPEN открывает для обработки структуру VIEW. Перед тем, как можно будет работать с виртуальным файлом, его нужно явно открыть. Файлы, используемые в структуре VIEW должны быть уже открыты.

Для того, чтобы установить последовательную обработку виртуального файла (последовательность и начальную точку) непосредственно перед оператором OPEN нужно выполнить оператор SET для первичного файла. В то время, когда виртуальный файл открыт, нельзя выполнить оператор SET; сначала нужно закрыть виртуальный файл, затем выполнить оператор SET перед последующим OPEN(view). SET (view) может быть выполнен при открытом VIEW для установки с помощью атрибута ORDER последовательной обработки.

Использование для окон

Оператор OPEN подготавливает структуру APPLICATION или WINDOW к отображению на экран. Отображение осуществляется оператором DISPLAY или ACCEPT. Это позволяет выполнить перед высвечиванием некоторые процедуры по настройке экрана.

Окно с параметром владелец всегда отображается поверх владельца и автоматически скрывается, если владелец минимизирован или скрыт. Если владелец закрывается, все его окна также автоматически закрываются. MDI-окна неявно являются собственниками окна приложения. Не MDI-окна по умолчанию не имеют владельца.

Использование для отчетов

OPEN активирует структуру REPORT. Перед тем как печатать какую-либо структуру необходимо явно открыть структуру REPORT.

Выдаваемые сообщения об ошибках:

02 File Not Found (файл не найден)

03 Path Not Found (путь не найден)

04 Too Many Open Files (слишком много открытых файлов

05 Access Denied (доступ запрещен)

32 File Is Already Locked (Файл уже заблокирован)

36 Invalid Data File (Поврежденный файл данных)

38 Invalid Key File (Поврежден ключ файла)

45 Invalid File Name (Неверное имя файла)

46 Key Files Must Be Rebuilt (Ключевой файл должен быть перестроен)

47 Invalid File Declaration (Неправильное объявление файла)

52 File Already Open (файл уже открыт)

57 Invalid Memo File (Поврежден файл MEMO)

73 Memo File is Missing (Ошибка файла MEMO)

75 Invalid Field Type Descriptor (неправильный описатель типа поля)

79 Unsupported Data Type In File (Неподдерживаемый тип данных в файле)

88 Invalid Key Length (Неверная длина ключа)

90 File System Error (Системная ошибка файла)

92 Build In Progress (Обработка перестраивания)

Пример:

ReadOnly EQUATE(0) !Метки соответствия режима доступа

WriteOnly EQUATE(1)

ReadWrite EQUATE(2)

DenyAll EQUATE(10h)

DenyWrite EQUATE(20h)

DenyRead EQUATE(30h)

DenyNone EQUATE(40h)

Header FILE,DRIVER('Clarion'),PRE(Hea) !Объявить структуру файла заголовков

AcctKey KEY(Hea:AcctNumber)

OrderKey KEY(Hea:OrderNumber)

Record RECORD

AcctNumber LONG

OrderNumber LONG

ShipToName STRING(20)

ShipToAddr STRING(20)

END

END

Detail FILE,DRIVER('Clarion'),PRE(Dtl) !Объявить файл накладных

OrderKey KEY(Dtl:OrderNumber)

Record RECORD

OrderNumber LONG

Item LONG

Quantity SHORT

END

END

ViewOrder VIEW(Header),ORDER('+Hea:OrderNumber') !Объявить структуру VIEW

PROJECT(Hea:OrderNumber)

JOIN(Dtl:OrderKey,Hea:OrderNumber) !Присоединить файл Detail

PROJECT(Det:Item,Det:Quantity)

END

END

CODE

OPEN(Names,ReadWrite+DenyNone) !Открыть в режиме полного

!совместного использования

OPEN(Header)

OPEN(Detail)

SET(Hea:AcctKey) !Встать на начало первичного файла

OPEN(ViewOrder) !затем открыть view

SET(ViewOrder) !или SET(view) после открытия

!для использования атрибута ORDER

OPEN(CustRpt) !Открыть отчет

Win1Proc PROCEDURE

Win1 WINDOW,ALRT(F10Key)

END

CODE

OPEN(Win1) !Открыть окно

GlobalWindowReference &= Win1 !Присвоить указатель на окно

!глобальному &WINDOW

ACCEPT

IF EVENT() = EVENT:AlertKey

START(Win2Proc)

END

END

Win2Proc PROCEDURE

Win2 WINDOW

END

CODE

OPEN(Win2,GlobalWindowReference) !Открыть Win2, владельцем которого является Win1

ACCEPT

END

Смотри также: SHARE, CLOSE, SET, EXISTS, FILE, VIEW, APPLICATION, WINDOW, REPORT, ACCEPT, DISPLAY, CLOSE

 

PACK (исключить удаленные записи)

PACK(файл)

PACK Исключает удаленные записи и перестраивает ключи.

файл Метка структуры FILE.

Оператор PACK исключает логически удаленные записи из файла данных и заново создает ключи для него. Получающийся в результате выполнения этого оператора файл является максимально компактным. Для своего выполнения оператор PACK требует дискового пространства, превышающего по крайней мере вдвое объем, занимаемый файлом данных, ключами и MEMO-файлами. Из старого файла создается новый, а старый удаляется только после завершения процесса. Этот оператор требует исключительного доступа к файлу. Поэтому файл должен быть открыт в режиме доступа 12h (чтение/запись, полный запрет) или 22h (чтение/запись, запрет записи).

PACK будет генерировать события для текущего открытого окна, если перед запуском процесса PACK для файла, вы присвоите значение (целое от 1 до 100) свойству PROP:ProgressEvents. Чем большее значение вы присвоите этому свойству, тем больше событий будет генерироваться и тем медленнее будет происходить процесс PACK. Эти события позволяют показывать пользователю процесс выполнения PACK. Этим самым конечный пользователь информируется о выполнении построения ключей в больших файлах (чтобы он не считал, что компьютер завис и не перегрузил его).

Не нужно делать никаких запросов к файлу во время его перестроения, кроме запросов его свойств, вызов NAME(файл), или CLOSE(файл) (который прекратит процесс, что не рекомендуется). Выполнение оператора CYCLE в ответ на любое сгенерированное событие (кроме EVENT:BuildDone) отменяет операцию. Во время процесса PACK свойство файл{PROP:Completed} вернет процент завершения перестроения. Вы также можете использовать свойство файл{PROP:CurrentKey} чтобы получить указатель на ключ, чтобы затем с помощью свойства ключ{PROP:Name} или ключ{PROP:Label} получить имя ключа, который в текущий момент обрабатывается.

Выдаваемые сообщения об ошибках:

63 Exclusive Access Required (требуется исключительный доступ)

Генерируемые события:

EVENT:BuildFile PACK(файл) обрабатывает порцию данных файла.

EVENT:BuildKey PACK(файл) перестраивает ключи в файле.

EVENT:BuildDone Операция PACK завершена.

Пример:

OPEN(Trans,12h) !Открыть файл в режиме исключительного доступа

PACK(Trans) ! и упаковать его

Смотри также: OPEN, SHARE, BUILD, PROP:ProgressEvents, PROP:Completed

 

PATH (получить текущий каталог)

PATH( )

Процедура PATH возвращает строку, содержащую текущий диск и каталог. Это эквивалент процедуры SHORTPATH.

PATH теперь может использоваться в оценивании выражений оператором EVALUATE во время работы приложения и в шаблонах.

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

Пример:

IF PATH() = 'C:\' !Если в корневом каталоге

MESSAGE('You are in the Root Directory') !отобразить сообщение

ELSIF PATH() = 'C:\INVOICE' !В каталоге программы

MESSAGE('You are in the INVOICE Directory') !отобразить сообщение

END

Смотри также: SETPATH, SHORTPATH, LONGPATH, DIRECTORY

 

PEEK (прочитать данные из памяти)

PEEK(адрес,переменная)

PEEK Считывает данные из адреса памяти.

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

переменная Имя переменной, в которую следует занести считываемые данные.

Оператор PEEK считывает данные из области памяти по указанному адресу и заносит их в переменную. Этим оператором считывается столько байт, сколько требуется для заполнения переменной.

Если вы считываете данные по некорректному адресу памяти, легко получить ошибочную ситуацию General Protection Fault (GPF) (нарушение защиты общего характера), так что следует с большой осторожностью использовать оператор PEEK. Для выполнения того, что вы хотите сделать с помощью оператора PEEK, обычно имеется стандартная функция в API - интерфейсе прикладного программирования Windows, и предпочтительнее использовать ее вместо того, чтобы использовать PEEK.

Пример:

MemAddress LONG

Dest1 BYTE

Dest2 SHORT

Dest3 REAL

KeyboardFlag BYTE

CODE

PEEK(ADDRESS(MemAddress),Dest1) !Читает 1 байт

PEEK(ADDRESS(MemAddress),Dest2) !Читает 2 байта

PEEK(ADDRESS(MemAddress),Dest3) !Читает 8 байт

Смотри также : POKE, ADDRESS

 

PENCOLOR (возвратить цвет линии)

PENCOLOR( )

Процедура PENCOLOR возвращает установленный процедурой SETPENCOLOR цвет текущего пера.

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

Пример:

Proc1 PROCEDURE

MDIChild1 WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!управляющие поля окна

END

CODE

OPEN(MDIChild1)

SETPENCOLOR(000000FFh) !Выбрать голубое перо

Proc2 !Вызов другой процедуры

Proc2 PROCEDURE

MDIChild2 WINDOW('Child Two'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!управляющие поля окна

END

ColorNow LONG

CODE

ColorNow = PENCOLOR() !Прочесть цвет текущего пера

OPEN(MDIChild2)

SETPENCOLOR(ColorNow) !Установить такой же цвет пера

SETPENSTYLE(PEN:dash) !Установить тип линии - штриховая

SETPENWIDTH(2) !Установить толщину линии в две условных единицы

BOX(100,50,100,50,00FF0000h) !Красный прямоугольник с жирным голубым штриховым контуром

Смотри также: SETPENCOLOR

 

PENSTYLE (возвратить тип линии)

PENSTYLE( )

Процедура PENSTYLE возвращает установленный процедурой SETPENSTYLE тип линии текущего пера.

В файле EQUATES.CLW есть операторы EQUATE для типов линий. Ниже приведена их представительная выборка (полный список смотри в EQUATES.CLW):

PEN:solid Сплошная линия

PEN:dash Штриховая линия

PEN:dot Пунктирная линия

PEN:dashdot Штрих-пунктирная линия

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

Пример:

Proc1 PROCEDURE

MDIChild1 WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!управляющие поля окна

END

CODE

OPEN(MDIChild1)

SETPENCOLOR(000000FFh) !Выбрать голубое перо

SETPENSTYLE(PEN:dash) !Выбрать тип линии - штриховая

Proc2 !Вызов другой процедуры

Proc2 PROCEDURE

MDIChild2 WINDOW('Child Two'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!управляющие поля окна

END

ColorNow LONG

StyleNow LONG

CODE

ColorNow = PENCOLOR() !Прочесть цвет текущего пера

StyleNow = PENSTYLE() !Прочесть тип линии текущего пера

OPEN(MDIChild2)

SETPENCOLOR(ColorNow) !Установить такой же цвет пера

SETPENSTYLE(StyleNow) !Установить такой же тип линии

SETPENWIDTH(2) !Установить толщину линии в 2 условных единицы

BOX(100,50,100,50,00FF0000h) !Красный прямоугольник с жирным голубым штриховым контуром

Смотри также: SETPENSTYLE

 

PENWIDTH (возвратить толщину линии)

PENWIDTH( )

Процедура PENWIDTH возвращает установленную процедурой SETPENWIDTH толщину линии текущего пера. Значение возвращается в условных единицах (если не было переопределено в REPORT атрибутами THOUS, MM или POINTS).

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

Пример:

Proc1 PROCEDURE

MDIChild1 WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!управляющие поля окна

END

CODE

OPEN(MDIChild1)

SETPENCOLOR(000000FFh) !Выбрать голубое перо

SETPENSTYLE(PEN:dash) !Выбрать тип линии - штриховая

SETPENWIDTH(2) !Установить толщину линии в 2 условных единицы

Proc2 !Вызов другой процедуры

Proc2 PROCEDURE

MDIChild2 WINDOW('Child Two'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!управляющие поля окна

END

ColorNow LONG

StyleNow LONG

WidthNow LONG

CODE

ColorNow = PENCOLOR() !Прочесть цвет текущего пера

StyleNow = PENSTYLE() !Прочесть тип линии текущего пера

WidthNow = PENWIDTH() !Прочесть толщину линии

OPEN(MDIChild2)

SETPENCOLOR(ColorNow) !Установить такой же цвет пера

SETPENSTYLE(StyleNow) !Установить такой же тип линии

SETPENWIDTH(WidthNow) !Установить такую же толщину линии

BOX(100,50,100,50,00FF0000h) !Красный прямоугольник с жирным голубым штриховым контуром

Смотри также: SETPENWIDTH

 

PIE (изобразить секторную диаграмму)

PIE( x ,y ,ширина ,высота ,секции ,цвета [,глубина] [,общее значение] [,начальный угол] [,список атрибутов])

PIE Рисует секторную диаграмму в текущем окне или документе.

x Целочисленное выражение для указания горизонтального положения начальной точки.

y Целочисленное выражение для указания вертикального положения начальной точки.

ширина Целочисленное выражение для указания ширины.

высота Целочисленное выражение для указания высоты.

секции Массив числовых значений (SIGNED), определяющих относительный размер каждой секции диаграммы.

цвета Целочисленный массив (LONG) для задания цвета раскраски каждой секции диаграммы.

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

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

начальный угол Числовая константа или переменная, определяющие начальное положение первой секции диаграммы. Значение параметра рассматривается как доля (пропорциональная) общего значения. Если параметр не указан (или равен нулю), то начало первой секции диаграммы соответствует 12 часам на циферблате часов.

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

Процедура PIE создает секторную диаграмму в текущем окне или документе. Диаграмма (эллипс) прорисовывается внутри “ограничивающего прямоугольника”, размеры которого определяются параметрами x, y, ширина и высота. Параметры x и y определяют начальную точку, а параметры ширина и высота определяют горизонтальный и вертикальный размеры “ограничивающего прямоугольника”.

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

Цвет линий - цвет, установленный оператором SETPENCOLOR для текущего пера. Цвет по умолчанию - цвет, установленный Windows для текста окна. Толщина линий - текущая толщина, установленная SETPENWIDTH, толщина по умолчанию – один пиксел. Тип линий - тип линии, установленный SETPENSTYLE для текущего пера, тип линии по умолчанию - сплошная линия.

Пример:

PROGRAM

MAP

END

 

Window WINDOW('Child One'),AT(0,0,320,200),HVSCROLL,SYSTEM,MAX

END

SliceSize SIGNED,DIM(4)

SliceColor LONG,DIM(4)

CODE

SliceSize[1] = 90

SliceColor[1] = 0 !Черный

SliceSize[2] = 90

SliceColor[2] = 00FF0000h !Красный

SliceSize[3] = 90

SliceColor[3] = 0000FF00h !Зеленый

SliceSize[4] = 90

SliceColor[4] = 000000FFh !Синий

OPEN(Window)

PIE(100,50,100,50,SliceSize,SliceColor,20)

!Изобразить секторную диаграмму, содержащую четыре равные

!секции, начинающуюся с 12 часов. Секторы Черный, Красный

!Зеленый и Голубой следуют против часовой стрелки

ACCEPT

END

Смотри также: Текущий объект, SETPENCOLOR, SETPENWIDTH, SETPENSTYLE

 

POINTER (получить относительное положение записи)

POINTER( очередь )

POINTER Получает относительный номер записи, к которой было последнее обращение в очереди.

очередь Метка структуры QUEUE или метка переданного параметра, представляющего собой структуру QUEUE.

Процедура POINTER возвращает целочисленное значение типа LОNG, указывающее номер элемента очереди, к которому было успешное обращение оператором ADD, GET, или PUT.

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

Пример:

Que:Name = 'Jones' !Присвоить значение ключевому полю

GET(NameQue,Que:Name) !Получить элемент

IF ~ERRORCODE() !Проверить ошибку и, если успешно,

ADD(SecondQue,POINTER(NameQue))!добавить во вторую очередь.

END

Смотри также: GET, PUT, ADD

 

POKE (записать данные в память)

POKE(адрес,источник)

POKE Записывает данные в адрес памяти.

адрес Числовая константа, переменная или выражение (вычисляется как LONG), которое задает адрес области памяти. В этом параметре всегда следует использовать процедуру ADDRESS, чтобы гарантировать правильность адреса в защищенном режиме.

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

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

Если вы записываете данные по некорректному адресу памяти, легко получить ошибочную ситуацию General Protection Fault (GPF) (нарушение защиты общего характера), так что следует с большой осторожностью использовать оператор POKE. Для выполнения того, что вы хотите сделать с помощью оператора POKE, обычно имеется стандартная функция в API - интерфейсе прикладного программирования Windows, и предпочтительнее использовать ее вместо того, чтобы использовать POKE.

Пример:

MAddress LONG

Source1 BYTE

Source2 SHORT

Source3 REAL

KeyboardFlag BYTE

CODE

POKE(ADDRESS(MAddress),Source1) !Записать один байт в память

POKE(ADDRESS(MAddress),Source2) !Записать два байта в память

POKE(ADDRESS(MAddress),Source3) !Записать восемь байт в память

KeyboardFlag = BOR(KeyboardFlag,40h) !включить caps lock

POKE(ADDRESS(00400017h),KeyboardFlag) !и записать байт обратно

Смотри также: PEEK, ADDRESS

 

POLYGON (изобразить многозвенную фигуру)

POLYGON( массив [,раскраска] [,список атрибутов])

POLYGON Рисует многозвенную фигуру в текущем окне или документе.

массив Целочисленный массив для задания x и y координат каждой “угловой точки” многоугольника.

раскраска Целочисленная константа типа LONG, символическое имя, переменная, в трех младших байтах (байты 0, 1 и 2) которых находятся красная зеленая и синяя компоненты цвета или символическое имя для значения стандартного цвета Windows.

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

Процедура POLYGON помещает многозвенную фигуру в текущее окно или документ. Многоугольник всегда замкнут. Массив содержит x и y координаты каждой “угловой точки” многоугольника. Число угловых точек многоугольника равно половине числа элементов массива. Для каждой угловой точки в общей последовательности точек координата x выбирается из нечетного элемента массива, координата y - из расположенного за ним четного элемента.

Цвет линии границы - цвет, установленный оператором SETPENCOLOR для текущего пера. Цвет по умолчанию - цвет, установленный Windows для текста окна. Толщина линии - текущая толщина, установленная SETPENWIDTH, толщина по умолчанию – один пиксел. Тип линии - тип линии, установленный SETPENSTYLE для текущего пера, тип линии по умолчанию - сплошная линия.

Пример:

MDIChild WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!управляющие объекты окна

END

Corners SIGNED,DIM(8)

CODE

Corners[1] = 0 !Координата x 1-й точки

Corners[2] = 90 !Координата y 1-й точки

Corners[3] = 90 !Координата x 2-й точки

Corners[4] = 190 !Координата y 2-й точки

Corners[5] = 100 !Координата x 3-й точки

Corners[6] = 200 !Координата y 3-й точки

Corners[7] = 50 !Координата x 4-й точки

Corners[8] = 60 !Координата y 4-й точки

OPEN(MDIChild)

POLYGON(Corners,000000FFh) !Четырехугольник, закрашенный голубым цветом

Смотри также: Текущая цель, SETPENCOLOR, SETPENWIDTH, SETPENSTYLE

 

POPUP (получить выбор пользователя в спускающемся меню)

POPUP( пункты [, x ] [, y ] [, позиция ] )

POPUP Возвращает целое число, означающее сделанный пользователем выбор из меню.

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

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

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

позиция Байтовое значение, которое, если установлено в 1, указывает, что координаты меню (2-й и 3-й параметры) рассчитываются относительно левого верхнего угла области активного окна. Если установлено в 0 (по умолчанию) – относительно координат экрана.

Процедура POPUP возвращает целое число, означающее сделанный пользователем выбор из меню, которое раскрывается при обращении к данной процедуре. Если пользователь щелкает кнопкой мыши вне пределов меню или нажимает клавишу ESC, означающая отсутствие выбора, то процедура POPUP возвращает 0.

В строке пункты, каждый пункт меню должен отделяется от другого символом вертикальной черты (|). Применяются следующие правила:

  • Дефис между вертикальными чертами (|-|) определяет разделитель между группами пунктов.
  • Пункт, следующий непосредственно за символом тильда (~) является деактивизированным (в меню он выглядит затушеванным).
  • Пункт, перед которым стоит символ плюс (+), на экране выводится с пометкой слева от него.
  • Пункт, перед которым стоит символ плюс (-), на экране выводится без пометки.
  • Пункт, за которым следует набор пунктов, заключенный в фигурные скобки (|SubMenu{{SubChoice 1|SubChoice 2}|), определяет вложенное меню (две фигурные скобки нужны для того, чтобы компилятор отличил этот случай от случая повторения символов в строке).
  • Вы можете использовать знак ASCII табуляции (<9>) в строке пунктов для правого выравнивания.
  • Вы можете изменить шрифт и его размер для пункта меню используя следующие свойства:

POPUP('['& PROP:FontSize &'(16)]I am 16 point ' & |

'|['& PROP:FontName &'(Arial),'& PROP:FontSize & |

'(16)]I am 16 Pt Arial ' & '|['& PROP:FontName &'(Arial),|

'& PROP:FontSize &'(16),'& PROP:FontStyle &'('& Font:Bold &'),|

'& PROP:FontColor &|

'('& COLOR:Blue &')]I am 16 Pt Arial Bold Blue ' & '')

  • Вы можете указать иконку для пункта меню предваряя пункт меню заключенными квадратными скобками PROP:Icon и имя файла иконки в скобках, например:

POPUP('[' & PROP:Icon & '(MyIco.ICO)]MenuChoice')

Каждый пункт меню нумеруется в возрастающей последовательности, начиная с единицы (1), в соответствии с его положением в строке пункты. Разделители и вложенные меню в последовательность номеров не включаются (что увеличивает эффективность использования с этой процедурой операторной структуры EXECUTE). Когда пользователь щелкает мышью или нажимает клавишу ENTER на определенном пункте меню, выполнение процедуры завершается и она возвращает номер выбранного пункта меню.

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

Пример:

PopupString = 'First|+Second|Sub menu{{One|Two}|-|Third|~Disabled|' & |

'[' & PROP:Icon & '(MyIco.ICO)]Last Menu Choice'

ToggleChecked = 1

ACCEPT

CASE EVENT()

OF EVENT:AlertKey

IF KEYCODE() = MouseRight

EXECUTE POPUP(PopupString)

FirstProc !Вызвать процедуру для пункта 1

BEGIN !Операторы для переключения значения пункта 2

IF ToggleChecked = 1 !Проверить состояние переключателя

SecondProc(Off) !Процедура выключения чего-то

PopupString[7] = '-' !Изменить строку меню, чтобы не было отметки

ToggleChecked = 0 !Установить переключатель

ELSE

SecondProc(On) !Процедура включения чего-то

PopupString[7] = '+' !Изменить строку меню, чтобы отметка была

ToggleChecked = 1 !Установить переключатель

END

END !Конец операторов для переключения пункта 2

OneProc !Вызвать процедуру для пункта 3

TwoProc !Вызвать процедуру для пункта 4

ThirdProc !Вызвать процедуру для пункта 5

DisabledProc !Пункт 6 неактивен, так что нельзя выполнить эту процедуру

IconProc !Пенкт 7 отображает иконку в меню

END

END

END

END

!Этот пример демонстрирует использование API для получения координат расположения меню

!и “горячей” правой кнопки мыши и меню мыши

PROGRAM

INCLUDE('keycodes.clw')

RECT GROUP,TYPE

Left SIGNED

Top SIGNED

Right SIGNED

Bottom SIGNED

END

MAP

MODULE('Win32Api')

GetWindowRect(UNSIGNED hWnd, *RECT lpRect),BOOL,PASCAL,RAW,PROC

END

END

W WINDOW('GetWindowRect'),AT(,,156,110),ALRT(93),ALRT(MouseRight),SYSTEM,GRAY

BUTTON('GetWindowRect'),AT(23,21,75,14),USE(?GetWindowRectButton)

END

rcCtrl LIKE(RECT)

hWndControl LONG,AUTO

CODE

OPEN(W)

hWndControl = ?GetWindowRectButton{PROP:Handle}

ACCEPT

IF FIELD() = ?GetWindowRectButton

IF EVENT() = EVENT:Accepted

!Get the rect of the button control in screen coordinates

GetWindowRect(hWndControl, rcCtrl)

X# = POPUP('1|2|3', rcCtrl.Left, rcCtrl.Bottom)

END

END

IF KeyCode()=93 !Щелкните правой кнопкой мыши, координаты меню основаны на месте щелчка

GetWindowRect(hWndControl, rcCtrl)

x# = POPUP('Moe|Larry|Curly', rcCtrl.Left, rcCtrl.Bottom)

ELSIF KeyCode()=MouseRight

x# = POPUP('Moe|Larry|Curly')

END

END

 

POSITION (получить положение в последовательности обработки файла)

POSITION( последовательность )

POSITION Однозначно идентифицирует положение в FILE, VIEW или QUEUE.

последовательность

Метка объявления структуры VIEW, FILE, KEY, очереди или индекса.

POSITION возвращает строку, которая однозначно идентифицирует положение записи в заданной последовательности. Эта процедура возвращает положение записи файла или VIEW, к которой было последнее обращение. Процедура POSITION используется в сочетании с оператором RESET для того, чтобы временно приостанавливать и возобновлять последовательную обработку файла.

Использование в файлах

Значение, находящееся в возвращаемой процедурой строке, и длина этой строки зависят от файлового драйвера. Как правило для файловых систем, в которых записи имеют номера, размер строки, возвращаемой процедурой POSITION(файл) равна 4 байта. Размер строки, возвращаемой процедурой POSITION(ключ) равна 4 плюс сумма длин полей, составляющих ключ. Для файловых систем, в которых записи не имеют номеров, размер строки, возвращаемой процедурой POSITION(файл) обычно равна сумме длин полей первичного ключа (первый ключ файла, не имеющий атрибута DUP и OPT). Размер строки, возвращаемой в этом случае процедурой POSITION(ключ) равна сумме длин полей первичного ключа плюс сумме длин полей заданного ключа.

Использование в виртуальных файлах

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

Использование в очередях

POSITION(очередь) возвращает указатель на первый элемент очереди с совпавшим значением ключа (для текущего активного порядка сортировки). Если такое совпадение не найдено, возвращается указатель на следующую больший, чем элемент в текущем буфере очереди. Если же все элементы в очереди имеют меньший ключ, возвращается RECORDS(очередь)+1.

Выдаваемые сообщения об ошибках:

35 Record Not Found (Запись не найдена)

30 Entry Not Found (специфично для QUEUE ) (Элемент не найден)

Возвращаемый тип данных: LONG для POSITION(QUEUE), STRING все остальные

Пример (POSITION(VIEW)):

ViewO VIEW(Customer) !Объявить структуру VIEW

PROJECT(Cus:AcctNumber,Cus:Name)

JOIN(Hea:AcctKey,Cus:AcctNumber) !Присоединить файл Header

PROJECT(Hea:OrderNumber)

JOIN(Dtl:OrderKey,Hea:OrderNumber) !Присоединить файл Detail

PROJECT(Det:Item,Det:Quantity)

JOIN(Pro:ItemKey,Dtl:Item) !Присоединить файл Product

PROJECT(Pro:Description,Pro:Price)

END

END

END

END

RecordQue QUEUE,PRE(Que)

AcctNumber LIKE(Cus:AcctNumber)

Name LIKE(Cus:Name)

OrderNumber LIKE(Hea:OrderNumber)

Item LIKE(Det:Item)

Quantity LIKE(Det:Quantity)

Description LIKE(Pro:Description)

Price LIKE(Pro:Price)

END

SavPosition STRING(260)

CODE

OPEN(Customer,22h)

OPEN(Header,22h)

OPEN(Detail,22h)

OPEN(Product,22h)

SET(Cus:AcctKey)

OPEN(ViewOrder) !Начало файла в последовательности ключа

LOOP !Прочитать все записи файла

NEXT(ViewOrder) !читать записи последовательно

IF ERRORCODE()

DO DisplayQue !Вывести очередь

BREAK

END

RecordQue :=: Cus:Record !Переслать данные из записи в очередь

RecordQue :=: Hea:Record !Переслать данные из записи в очередь

RecordQue :=: Dtl:Record !Переслать данные из записи в очередь

RecordQue :=: Pro:Record !Переслать данные из записи в очередь

ADD(RecordQue) !и добавить элемент в очередь

ASSERT(~ERRORCODE())

IF RECORDS(RecordQue) = 20 !20 записей в очереди?

DO DisplayQue !Вывести очередь

END

END

DisplayQue ROUTINE

SavPosition = POSITION(ViewOrder)!Запомнить положение записи

DO ProcessQue !Вывести очередь

FREE(RecordQue) !и очистить ее

RESET(ViewOrder,SavPosition) !Восстановить указатель на запись

NEXT(ViewOrder) !и получить запись снова

Пример (POSITION(QUEUE)):

TaxQ QUEUE

LowPay DECIMAL(9,2)

HighPay DECIMAL(9,2)

TaxAmount DECIMAL(9,2)

PlusPercent DECIMAL(5,2)

END

Bracket LONG,AUTO `

CODE

SORT(TaxQ, TaxQ.HighPay) !Установить порядок сортировки

TaxQ.HighPay = PayCheck.GrossPay !присвоить значение ключевому полю очереди

Bracket = POSITION(TaxQ) !найти группу оплаты

!если очередь не отсортирована, то выдаст сообщение об ошибке ERRORCODE 30.

IF Bracket > RECORDS(TaxQ) !Если значение превышает число записей

Bracket = RECORDS(TaxQ) !в QUEUE, установить высшее значение в QUEUE

END

GET(TaxQ,Bracket) !прочитать элемент очереди

Paycheck.Tax = TaxAmount+ | !подсчет на основе элемента очереди

(Paycheck.Gross-TaxQ.LowPay)*TaxQ.PlusPercent

Смотри также: RESET, REGET

 

POST (послать событие определенное пользователем)

POST( событие [,поле] [,процесс] [,позиция] )

POST Послать событие.

событие Целочисленная константа, переменная, выражение или символическое имя, содержащие номер события. Значение в пределах от 400h до 0FFFh -событие определенное пользователем.

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

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

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

Оператор POST посылает событие активному в данный момент ACCEPT-циклу указанного процесса. Все события можно разбить на два класса: события, определяемые пользователем, все прочие события. Номера событий определяемых пользователем задаются любым целым числом в пределах от 400h до 0FFFh. Любое событие, посылаемое с указанием поля, - событие связанное с полем, а посылаемое без указания - событие не связанное с полем.

Посылка события является причиной срабатывания цикла ACCEPT, но не может являться причиной “срабатывания” события. Например, POST(EVENT:Selected,?MyControl) выполняет любой код в EVENT:Selected для ?MyControl?, но не может дать фокус этому полю.

Пример:

Win1 WINDOW('Tools'),AT(156,46,32,28),TOOLBOX

BUTTON('Date'),AT(0,0,,),USE(?Button1)

BUTTON('Time'),AT(0,14,,),USE(?Button2)

END

CODE

OPEN(Win1)

ACCEPT

IF EVENT() = EVENT:User !Выделить событие определяемое пользователем

BREAK

END

CASE ACCEPTED()

OF ?Button1

POST(EVENT:User,,UseToolsThread) !Послать событие не связанное с полем другому процессу

OF ?Button2

POST(EVENT:User) !Послать событие не связанное с полем данному процессу

END

END

CLOSE(Win1)

Смотри также: ACCEPT, EVENT

 

PRAGMA (управление установками транслятора из исходного кода)

PRAGMA(строка)

PRAGMA Посылает проектной системе оператор из вашего исходного кода.

строка Строковая константа, переменная или выражение формата 'project(string)', compile(string)' или 'link(string)'.

PRAGMA('project(строка)')

Поддерживает использование операторов системы поддержки проекта в исходном коде Clarion и добавляет оператор в проект динамически. Параметр строки определяет соответствующий синтаксис проекта.

Любой оператор pragma (т.е. CALL, DATA, DEFINE, и т.д.) может быть использован.

PRAGMA('compile(строка)')

Эквивалентно PRAGMA('project(#compile string)')

PRAGMA('link(string)')

Эквивалентно PRAGMA('project(#pragma link(string))')

PRAGMA Поддерживает использование операторов системы поддержки проекта в исходном коде Clarion и добавляет pragma в проект динамически. Параметр строки определяется соответствующим синтаксисом проекта.

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

Пример:

PROGRAM

MAP

INCLUDE('MYUTIL.INC')

END

PRAGMA('project(#compile MYUTIL.CLW)')

PRAGMA('project(#pragma link(C%V%DOS%X%%L%.LIB))')

F FILE,DRIVER('DOS'),CREATE,NAME('Test.!')

Record RECORD

BYTE,DIM(1000)

END

END

CODE

CREATE (F)

В примере выше, pragma заставляет систему компилировать MYUTIL.CLW и автоматически добавлять корректную библиотеку драйвера DOS в список связей.

PROGRAM

MAP

INCLUDE('MYUTIL.INC')

END

PRAGMA('compile(MYUTIL.CLW)')

PRAGMA('link(C%V%DOS%X%%L%.LIB)')

F FILE,DRIVER('DOS'),CREATE,NAME('Test.!')

Record RECORD

BYTE,DIM(1000)

END

END

CODE

CREATE(F)

Этот пример идентичен по функциональности первому примеру.

 

PRESS (поместить в буфер строку символов)

PRESS(строка)

PRESS Помещает символы во входной буфер клавиатуры.

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

Оператор PRESS помещает символы во входной буфер клавиатуры системы Windows. В буфер заносятся все символы строки. Помещенная в буфер строка обрабатывается так же, как если бы символы вводились с клавиатуры.

Пример:

IF LocalRequest = AddRecord !При добавлении записи в memo

TempString = FORMAT(TODAY(),@D1) & ' ' & FORMAT(CLOCK(),@T4)

PRESS(TempString) !Установить дату и время в 1 строку memo

END

Смотри также: PRESSKEY

 

PRESSKEY (поместить в буфер код нажатия клавиши)

PRESSKEY(код клавиши)

PRESSKEY Помещает код нажатия во входной буфер клавиатуры.

код клавиши Целочисленная константа или символическое имя кода клавиши.

Оператор PRESSKEY помещает код нажатия клавиши во входной буфер клавиатуры системы Windows. Помещенный в буфер код клавиши обрабатывается так же, как если бы пользователь нажал клавишу клавиатуры. Оператор ALIAS не изменяет кода клавиши, “нажатой” в PRESSKEY.

Пример:

IF Action = 'Add' !При добавлении записи в memo

Cus:MemoControl = FORMAT(TODAY(),@D1) & ' ' & FORMAT(CLOCK(),@T4)

!Установить дату и время в 1 строку memo

PRESSKEY(EnterKey) !а пользователю предоставить вторую строку

END

Смотри также: PRESS

 

PREVIOUS (прочитать предыдущую запись)

PREVIOUS( структура )

PREVIOUS Считывает предыдущую запись в установленной последовательности.

файл Метка объявления структуры FILE или VIEW.

Оператор PREVIOUS считывает предыдущую в заданной ранее последовательности запись файла или VIEW. Последовательность, в которой считываются записи, определяется оператором SET (или RESET). Выполнение оператора PREVIOUS без предварительной установки оператором SET или попытка считывания записи после прочтения первой записи файла приводит к возникновению ошибочной ситуации “Record Not Available” (запись недоступна).

Использование для файлов

Оператор PREVIOUS считывает предыдущую в заданной ранее последовательности запись файла и помещает ее в буфер структуры RECORD. Первое выполнение оператора PREVIOUS считывает запись в позиции, указанной оператором SET. Последующие выполнения оператора PREVIOUS считывают следующие записи в обратной последовательности. Выполнение операторов GET, REGET, ADD, PUT и DELETE не влияет на установленную последовательность обработки записей.

Использование для виртуальных файлов

Оператор PREVIOUS считывает предыдущую в заданной ранее последовательности запись(и) виртуального файла и помещает соответствующие поля в буферы данных файлов - компонент структуры VIEW. Если VIEW содержит структуры JOIN, то оператор PREVIOUS считывает соответствующий набор предыдущих записей.

Как и оператор SET, “поставленный” на первичный файл VIEW-структуры до открытия VIEW, так и оператор SET(view), которому предшествует OPEN(view), определяют последовательность чтения файла. Первое выполнение оператора PREVIOUS(view) считывает запись в позиции, установленной оператором SET. Последующие выполнения оператора PREVIOUS считывают предыдущие записи в этой последовательности. Выполнение операторов PUT и DELETE не влияет на установленную последовательность обработки записей.

Выдаваемые сообщения об ошибках:

33 Record Not Available (запись недоступна)

37 File Not Open (файл не открыт)

43 Record Is Already Held (запись уже заблокирована)

Пример:

ViewOrder VIEW(Header)

PROJECT(Hea:OrderNumber)

JOIN(Dtl:OrderKey,Hea:OrderNumber) !Соединить с файлом накладных

PROJECT(Det:Item,Det:Quantity)

JOIN(Pro:ItemKey,Dtl:Item) !Соединить с файлом товаров

PROJECT(Pro:Description,Pro:Price)

END

END

END

CODE

OPEN((Header,22h)

OPEN(Detail,22h)

OPEN(Product,22h)

SET(Cus:AcctKey)

OPEN(ViewOrder)

LOOP !Прочитать все записи до начала файла

PREVIOUS(ViewOrder) !считать предыдущую запись

IF ERRORCODE() THEN BREAK END !выйти по началу файла

DO PostTrans !обратиться к процедуре инициирования

END !Конец цикла

Смотри также: SET, RESET, NEXT, BOF, HOLD, WATCH, REGET, ADD, PUT, DELETE

 

PRINT (напечатать структуру отчета)

PRINT( | структура | )

| документ ,номер |

PRINT Печатает структуру документа DETAIL.

структура Метка структуры DETAIL.

документ Метка структуры REPORT.

номер Номер или метка соответствия структуры документа, которую требуется напечатать (имеет смысл только с параметром документ).

Оператор PRINT печатает структуру документа на принтер по умолчанию или куда укажет выбор пользователя в окне Print... системы Windows. Если необходимо, PRINT автоматически обрабатывает ситуации завершения раздела и перехода на новую страницу.

Пример:

MEMBER()

MAP

BuildRpt

PrintRpt(REPORT,LONG)

END

BuildRpt PROCEDURE

CustRpt REPORT

HEADER,USE(?PageHeader) !Верхний колонтитул страницы

!элементы структуры

END

CustDetail DETAIL,USE(?Detail) !заказы detail

!элементы структуры

END !

END

CODE

OPEN(BuildRpt)

!здесь инициализируются любые переменные отчета

PRINT(CustDetail) !Напечатать строку заказа

PrintRpt(CustRpt,?PageHeader) !Передать процедуре печати документ

!и метку соответствия структуры

CLOSE(BuildRpt)

PrintRpt PROCEDURE(RptToPrint,DetailNumber)

CODE

PRINT(RptToPrint,DetailNumber) !Напечатать структуру документа

Смотри также: Переход на новую страницу, BREAK, DETAIL, PROP:FlushPreview

 

PRINTERDIALOG (выбор принтера)

PRINTERDIALOG( [заголовок] [,флаг] )

PRINTERDIALOG Выводит на экран стандартное Windows-окно выбора принтера, в котором пользователь осуществляет свой выбор.

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

флаг Числовая константа или переменная, которая означает вывод диалогового окна принтеров основываясь на значении флага:

0 = Диалог “Выбор принтера”

1 = Диалог “Установка принтера”

3 = Диалог “Установки страницы”

Процедура PRINTERDIALOG выводит на экран стандартное Windows-окно выбора принтера,окно установки принтера или установки страницы в зависимости от значения флага и во встроенную переменную PRINTER внутренней библиотеки возвращает осуществленный пользователем выбор принтера. Таким способом выбирается принтер по умолчанию для открываемой в дальнейшем структуры REPORT.

PRINTERDIALOG возвращает 0, если в диалоговом окне пользователем была нажата кнопка Cancel, и 1, если была нажата кнопка Ok.

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

Пример:

CustRpt REPORT,AT(1000,1000,6500,9000),THOUS,FONT('Arial',12),PRE(Rpt)

!Структуры и управляющие поля отчета

END

CODE

IF NOT PRINTERDIALOG('Choose Printer')

RETURN !Если нажата Cancel - выход

END

OPEN(CustRpt)

 

POPERRORS (получить информацию об ошибке)

POPERRORS( )

POPERRORS Возвращает последнюю информацию об ошибке сохраненную PUSHERRORS().

Процедура POPERRORS восстанавливает последнюю информацию об ошибке, которая была сохранена PUSHERRORS. Информация включает в себя ERRORCODE(), ERROR(), FILEERRORCODE(), FILEERROR(), ERRORFILE(), переменную errno библиотеки C и текущую ошибку Windows, возвращенную API функцией GetLastError(). Чтобы прочесть эти ошибки, вам надо использовать подходящие для этого операторы.

POPERRORS особенно полезна для программистов, использующих API функцию GetLastError(). POPERRORS восстанавливает код ошибки Windows, которая была сохранена PUSHERRORS. GetLastError возвратит тот же код ошибки после POPERRORS, которая была возвращена перед PUSHERRORS.

PUSHERRORS и POPERRORS работают, используя принцип стека LIFO (последний вошел, первым вышел). Максимальный размер стека зависит от доступной памяти.

Поскольку ERRORCODE(), ERROR() и т.д. работают в своих отдельных исполняемых процессах, операторы PUSHERRORS и POPERRORS, вызываемые с других исполняемых процессов не зависят друг от друга и занимают отдельные стеки в памяти для каждого исполняемого процесса.

Пример:

PROGRAM

MAP

InitialErrors()

END

 

TESTFILE FILE,DRIVER('DOS')

RECORD

f1 BYTE

END

END

CODE

!здесь размещаются операторы обработки файла и инициализация

OPEN(testfile) !вызвать ошибку

PUSHERRORS()

!дополнительный код

 

InitialErrors

 

InitialErrors PROCEDURE

ERRORCODEVAR LONG

ERRORVAR CSTRING(255)

FILEERRORCODEVAR LONG

FILEERRORVAR CSTRING(255)

ERRORFILEVAR CSTRING(255)

 

Window WINDOW('Error Report'),AT(,,362,128),FONT('MS Sans Serif',8,,FONT:regular,CHARSET:ANSI),SYSTEM, |

GRAY

PROMPT('ERRORCODE:'),AT(9,10),USE(?Prompt1)

STRING(@N_4),AT(97,10,43,10),USE(ERRORCODEVAR)

PROMPT('ERROR:'),AT(9,25),USE(?Prompt2)

STRING(@s40),AT(96,25),USE(ERRORVAR)

PROMPT('FILEERRORCODE:'),AT(9,40),USE(?Prompt3)

STRING(@N_4),AT(95,40),USE(FILEERRORCODEVAR)

PROMPT('FILEERROR:'),AT(9,55),USE(?Prompt4)

STRING(@S40),AT(95,55),USE(FILEERRORVAR)

PROMPT('ERRORFILE:'),AT(9,70),USE(?Prompt5)

STRING(@S40),AT(95,71),USE(ERRORFILEVAR)

END

 

CODE

POPERRORS()

ERRORCODEVAR = ERRORCODE() !возвратит 2

ERRORVAR = ERROR() !возвратит "File Not Found"

FILEERRORCODEVAR = FILEERRORCODE()

FILEERRORVAR = FILEERRORCODE()

ERRORFILEVAR = ERRORFILE() !возвратит "TESTFILE"

OPEN(WINDOW)

ACCEPT

DISPLAY

END

Смотри также: PUSHERRORS

 

PUSHERRORS (записать информацию об ошибке)

PUSHERRORS( )

PUSHERRORS Записывает последнюю информацию об ошибке во внутренний стек.

Процедура PUSHERRORS записывает текущее состояние ошибки текущего исполняемого потока, возвращаемых ERRORCODE(), ERROR(), FILEERRORCODE(), FILEERROR(), ERRORFILE(), переменной errno библиотеки C, а также текущую ошибку Windows, возвращаемую API функцией GetLastError().

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

PUSHERRORS и POPERRORS работают, используя принцип стека LIFO (последний вошел, первым вышел). Максимальный размер стека зависит от доступной памяти. Поскольку ERRORCODE(), ERROR() и т.д. работают в своих отдельных исполняемых процессах, операторы PUSHERRORS и POPERRORS, вызываемые с других исполняемых процессов не зависят друг от друга и занимают отдельные стеки в памяти для каждого исполняемого процесса.

Пример:

PROGRAM

MAP

InitialErrors()

END

 

TESTFILE FILE,DRIVER('DOS')

RECORD

f1 BYTE

END

END

CODE

!здесь размещаются операторы обработки файла и инициализация

OPEN(testfile) !вызвать ошибку

PUSHERRORS()

!здесь дополнительный код

 

InitialErrors

 

InitialErrors PROCEDURE

ERRORCODEVAR LONG

ERRORVAR CSTRING(255)

FILEERRORCODEVAR LONG

FILEERRORVAR CSTRING(255)

ERRORFILEVAR CSTRING(255)

 

Window WINDOW('Error Report'),AT(,,362,128),FONT('MS Sans Serif',8,,FONT:regular,CHARSET:ANSI),SYSTEM, |

GRAY

PROMPT('ERRORCODE:'),AT(9,10),USE(?Prompt1)

STRING(@N_4),AT(97,10,43,10),USE(ERRORCODEVAR)

PROMPT('ERROR:'),AT(9,25),USE(?Prompt2)

STRING(@s40),AT(96,25),USE(ERRORVAR)

PROMPT('FILEERRORCODE:'),AT(9,40),USE(?Prompt3)

STRING(@N_4),AT(95,40),USE(FILEERRORCODEVAR)

PROMPT('FILEERROR:'),AT(9,55),USE(?Prompt4)

STRING(@S40),AT(95,55),USE(FILEERRORVAR)

PROMPT('ERRORFILE:'),AT(9,70),USE(?Prompt5)

STRING(@S40),AT(95,71),USE(ERRORFILEVAR)

END

 

 

 

CODE

POPERRORS()

ERRORCODEVAR = ERRORCODE() !возвратит 2

ERRORVAR = ERROR() !возвратит "File Not Found"

FILEERRORCODEVAR = FILEERRORCODE()

FILEERRORVAR = FILEERRORCODE()

ERRORFILEVAR = ERRORFILE() !возвратит "TESTFILE"

OPEN(WINDOW)

ACCEPT

DISPLAY

END

Смотри также: POPERRORS

 

PUT (переписать запись)

PUT( | файл [, указатель [, длина ] ] | )

| очередь , [[+]ключ,...,[-]ключ] |

| очередь , имя |

| очередь , функция |

| view |

PUT Записывает данные обратно в файл, очередь или VIEW.

файл Метка объявления структуры FILE.

указатель Числовая константа, переменная или выражение, представляющее значение, возвращаемое для данной записи процедурой POINTER(файл).

длина Целочисленная константа, переменная или выражение, которая содержит число байтов, которые следует записать в файл. Длина должна быть больше нуля и не больше длины структуры RECORD. Если этот параметр опущен или выходит за границы допустимого диапазона, то он устанавливается равным длине структуры RECORD.

очередь Метка структуры QUEUE.

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

ключ Метка поля, объявленного внутри структуры QUEUE. Если у очереди есть атрибут PRE, то параметр ключ должен включать в себя и префикс.

имя Строковая константа, переменная или выражение, содержащее разделенные запятыми, с необязательным знаком + или – спереди значения атрибутов NAME, относящихся к полям в структуре QUEUE. Регистр букв в значениях этого параметра является значимым.

функция Метка функции содержащая два параметра *GROUP или поименованной GROUP, передаваемой по адресу, и возвращающая значение типа SIGNED. Оба параметра должны иметь одинаковый тип параметров и не должны быть опущены. В прототипах не должно быть атрибутов RAW, C и PASCAL. Смотри Дополнительные сведения об очередях.

view Метка объявления VIEW.

Оператор PUT записывает ранее полученную запись в FILE, QUEUE или VIEW.

Использование для файлов

Оператор PUT записывает находящиеся в данный момент в буфере RECORD данные на место ранее прочитанной в файле записи.

PUT(файл)

Заносит запись на место последней полученной оператором NEXT, PREVIOUS, GET или ADD. Если в буфере изменились значения полей, входящих в ключи, то обновляются и файлы ключей.

PUT(файл, указатель)

Заносит запись в файл, в заданной указателем место и обновляет ключи.

PUT(файл, указатель, длина)

Записывает указанное параметром длина число байт по заданному указателем адресу в файл и обновляет ключи.

Если к записи не было обращения с помощью операторов NEXT, PREVIOUS, GET, REGET, ADD или запись удалена, то выдается сообщение “Record Not Available” (запись недоступна). Кроме этого сообщения, оператор PUT выдает сообщение “Creates Duplicate Key” (создается повторяющееся значение ключа). Если выдано какое-либо сообщение об ошибке, то запись не заносится в файл.

Использование для очередей

Оператор PUT после успешного выполнения оператора GET или ADD записывает содержимое буфера данных обратно в очередь. Если перед оператором PUT не выполнялся оператор GET или ADD, то выдается сообщение об ошибке “Entry Not Found” (элемент не найден).

PUT(очередь)

Записывает данные обратно в ту же самую относительную позицию внутри очереди, к которой обращался последний успешно выполненный оператор GET или ADD.

PUT(очередь, ключ)

После успешно выполненного оператора GET или ADD возвращает элемент в упорядоченную очередь, сохраняя упорядоченность, если любые ключевые поля изменили свое значение. Может использоваться несколько (до 16-ти) параметров ключ, разделенных запятыми, с необязательным знаком “+” или “-“ спереди, означающим возрастающую или убывающую последовательность сортировки. Если в очереди имеется несколько элементов с данным значением ключевого поля, то записываемый элемент становится среди них последним.

PUT(очередь, имя)

После успешно выполненного оператора GET или ADD возвращает элемент в упорядоченную очередь, сохраняя упорядоченность, если любые ключевые поля изменили свое значение. Строка имя должна содержать значения атрибутов NAME полей из структуры QUEUE, разделенных запятыми с необязательным знаком “+” или “-“ спереди, означающим возрастающую или убывающую последовательность сортировки. Если в очереди имеется несколько элементов с данным значением поля, то записываемый элемент становится среди них последним.

PUT(очередь,функция)

PUT с ФУНКЦИЕЙ запишет в позицию, номер которой возвращает функция. Если функция возвращает ноль (0) запись очереди первого параметра рассматривается как равная второму параметру. В этом случае, так как значения равны, запись не записывается. Если функция возвращает отрицательное значение, запись, переданная в качестве первого параметра, рассматривается как имеющая меньшее значение, чем запись переданная в качестве второго параметра и PUT записывает соответственно. Если же функция возвращает положительное значение, запись, переданная в качестве первого параметра, рассматривается как имеющая большее значение, чем запись переданная в качестве второго параметра и PUT записывает соответственно.

Использование в виртуальных файлах

Оператор PUT записывает текущие значения полей в буфере первичного файла структуры VIEW на место ранее прочитанной в файле записи во view. Если запись была заблокирована, то она автоматически освобождается. Оператор PUT заносит запись на место последней, полученной оператором REGET, NEXT или PREVIOUS. Если в буфере изменились значения полей, входящих в ключи, то обновляются и файлы ключей.

Оператор PUT обновляет запись только первичного файла потому, что структура VIEW выполняет одновременно и проекцию и соединение. И в этом случае возможно создать такую структуру VIEW, что обновление всех ее компонент нарушило бы правила внутренней непротиворечивости базы данных. Общее решение этой проблемы в SQL-ориентированных продуктах - это обновление только первичного файла. Поэтому в Clarion реализуется такое же стандартное решение.

Если предварительной выборки записи не было, или она удалена, то выдается сообщение “Record Not Available”. Кроме того, для оператора PUT может выдаваться сообщение об ошибке “Create Duplicate Error”. Если выдано какое- либо сообщение об ошибке, то запись не заносится в файл.

Выдаваемые сообщения об ошибках:

05 Access Denied (доступ запрещен)

08 Insufficient Memory (недостаточно памяти)

30 Entry Not Found (элемент не найден)

33 Record Not Available (запись недоступна)

40 Creates Duplicate Key (создается повторяющееся значение ключа)

75 Invalid Field Type Descriptor (неправильный описатель типа поля)

89 Record Changed By Another Station (запись изменена другой рабочей станцией)

Пример:

ViewOrder VIEW(Header)

JOIN(Dtl:OrderKey,Hea:OrderNumber) !Присоединить файл Detail

PROJECT(Det:Item,Det:Quantity)

END

END

NameQue QUEUE,PRE(Que)

Name STRING(20),NAME('FirstField')

Zip DECIMAL(5,0),NAME('SecondField')

END

CODE

OPEN(Header,22h)

OPEN(Detail,22h)

SET(Cus:AcctKey)

OPEN(ViewOrder)

LOOP !Прочитать все записи в обратном порядке

PREVIOUS(ViewOrder) ! считать запись

IF ERRORCODE() THEN BREAK. ! прервать цикл на начале файла

DO LastInFirstOut !Вызвать процедуру обработки стека

PUT(ViewOrder) !Записать обратно в файл запись транзакции

IF ERRORCODE() THEN STOP(ERROR()) END

END !Конец цикла

DO BuildQue !Вызов подпрограммы построения очереди

Que:Name = 'Jones' !Присвоить значение ключевому полю

GET(NameQue,Que:Name) !Получить соответствующую запись

IF ERRORCODE() THEN STOP(ERROR()) END

Que:Zip = 12345 !Изменить Zip код

PUT(NameQue) !Записать изменения в очередь

IF ERRORCODE() THEN STOP(ERROR()) END

Que:Name = 'Jones' !Присвоить значение ключевому полю

GET(NameQue,Que:Name) !Получить соответствующую запись

IF ERRORCODE() THEN STOP(ERROR()) END

Que:Name = 'Smith' !Изменить значение ключевого поля

PUT(NameQue,Que:Name) !Записать изменения в очередь

IF ERRORCODE() THEN STOP(ERROR()) END

Que:Name = 'Smith' !Присвоить значение ключевому полю

GET(NameQue,'FirstField') !Получить соответствующую запись

IF ERRORCODE() THEN STOP(ERROR()) END

Que:Name = 'Jones' !Изменить значение ключевого поля

PUT(NameQue,'FirstField') !Записать изменения в очередь

IF ERRORCODE() THEN STOP(ERROR()) END

Смотри также: NEXT, PREVIOUS,GET, ADD, WATCH, HOLD, RELEASE, SORT

 

PUTINI (поместить элемент в INI-файл)

PUTINI( раздел [,элемент] [,значение] [,файл] )

PUTINI Устанавливает значение элемента INI-файла.

раздел Строковая константа или переменная, содержащая имя раздела INI-файла, в котором (разделе) расположен элемент.

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

значение Строковая константа или переменная, содержащая значение, которое будет помещено в элемент (до 1023 символов). Пустая строка (‘‘) производит “пустую” установку в элементе. Если параметр опущен, то элемент удаляется.

файл Строковая константа или переменная, содержащая имя файла, в котором осуществляется поиск (если полный путь к файлу не задан т.е. 'Autolog.ini', то он ищется в каталоге Windows). Чтобы осуществлять поиск файла в текущем каталоге введите путь с точкой (т.е. '.\Autolog.ini'). Если файл не существует, то создается новый .INI файл. Если параметр не указан, то PUTINI размещает элемент в файле WIN.INI.

Процедура PUTINI помещает значение в элемент INI-файла стандарта Windows (максимальный размер 64К). INI-файл стандарта Windows представляет собой текстовый ASCII файл организованный следующим образом:

[имя раздела]

элемент=значение

следующий элемент=значение

Пусть, например, файл WIN.INI содержит такие элементы:

[windows]

spooler=yes

load=nwpopup.exe

[int1]

sLanguage=enu

sCountry=United States

iCountry=1

Процедура PUTINI ищет в указанном файле элемент внутри указанного раздела. Она заменяет текст строки элемента, стоящий справа от символа равенства (=), на новое значение. Если раздела и элемента в файле нет, то они будут созданы.

Пример:

CODE

PUTINI('MyApp','SomeSetting','Initialized') !Поместить установку в WIN.INI

PUTINI('MyApp','ASetting','2','MYAPP.INI') !Поместить установку в MYAPP.INI

Смотри также: GETINI

 

PUTREG (записать значение в реестр Windows)

PUTREG(корень, имя ключа, имя значения [,значение] [,тип значения] ), LONG

PUTREG Записывает строковое значение в системный реестр.

корень Переменная LONG, константа или выражение, которое указывает корневой раздел реестра в который следует занести значение. Допустимые значения для него определены в файле equates.clw :

REG_CLASSES_ROOT

REG_CURRENT_USER

REG_LOCAL_MACHINE

REG_USERS

REG_PERFORMANCE_DATA

REG_CURRENT_CONFIG

REG_DYN_DATA

имя ключа Строковая константа, переменная или выражение которое содержит имя ключа ключевое значение которого надо записать. Может включать в себя путь, разделенный символами обратного слеша '\'. Имя ключа не может включать впереди символ обратного слеша.

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

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

тип значения Целочисленная переменная LONG, константа или выражение которые указывают как хранить переданное значение. Если опущена, то значение по умолчанию REG_SZ (смотри ниже).

Поддерживаемые типы (выраженные как мнемонические имена):

REG_NONE – значение игнорируется

REG_SZ – значением является строка, заканчивающаяся нулем UNICODE (по умолчанию)

REG_EXPAND_SZ – значением является строка, заканчивающаяся нулем UNICODE, которая может содержать значения нерасширяемых переменных окружения

REG_MULTI_SZ – значением является строка, заканчивающаяся нулем UNICODE, состоящей из подстрок разделенных символами '<0>'; GETREG добавляет в последней подстроке два последовательных символа '<0>' .для завершения, если их нет.

REG_DWORD – значение является 32-х битным числом, где младшие байты хранятся впереди, т.е. значение 12345678h хранится как '<78h,56h,34h,12h>'.

REG_DWORD_LITTLE_ENDIAN – то же что и REG_DWORD

REG_DWORD_BIG_ENDIAN - значение является 32-х битным числом с обратным порядком байтов, т.е. значение 12345678h хранится как '<78h,56h,34h,12h>'.

REG_QWORD - значение является 64-х битным числом, младшие байты хранятся впереди.

REG_QWORD_LITTLE_ENDIAN – такое же как REG_QWORD

REG_BINARY – значением строки являются двоичные данные любой формы

Процедура PUTREG помещает значение в имя значения, находящееся в реестре Windows. Если значение и ключ не существуют, то они создаются. Если запись в реестр осуществлена успешно, PUTREG возвращает 0. В противном случае возвращается ненулевое значение.

Пример:

PROGRAM

MAP.

INCLUDE('EQUATES')

CurrentPath CSTRING(100)

ColorScheme CSTRING(100)

CODE

!Установить корневой каталог где инсталирован Clarion 6

CurrentPath = 'C:\Clarion6'

IF PUTREG(REG_LOCAL_MACHINE,'SOFTWARE\SoftVelocity\Clarion6','root',CurrentPath)

MESSAGE('Unable to set the root directory') !выдается ошибка если значение ненулевое

END

!записывает текущую пользовательскую цветовую схему в реестр

ColorScheme = 'Windows Standard'

IF PUTREG(REG_CURRENT_USER,'Control Panel\Current','Color Schemes',ColorScheme)

MESSAGE('Unable to set the color scheme') !выдается ошибка если значение ненулевое

END

Смотри также: GETREG, DELETEREG

 

QUOTE (заменить специальные символы строки)

QUOTE( строка , флаг)

QUOTE Расширяет (или убирает) данные(data) строки.

строка Строковая константа или переменная, содержащая свойства для грамматического разбора.

флаг Целое без знака которое управляет метод распаковки.

Способ, которым QUOTE обрабатывает строку основан на параметре флаг.

Если параметр флаг установлен в 0 (по умолчанию), процедура QUOTE возвращает строку, содержащую все символы одинарных кавычек (‘), непарные левые угловые скобки (<) и непарные левые фигурные скобки ({) “удвоенными”, чтобы предупредить ошибки компиляции. Непечатаемые символы заменяются последовательностью <n>, где n - код символа. 10 и более повторяющихся символов заменяются последовательностью a{n}, где a является символом, а n числом повторения символа.

Если параметр флаг установлен в 1, QUOTE снимает {} и <> последовательности, если последовательность внутри {} или <> является числовой и удваивает все одиночные кавычки (‘).

Это позволяет пользователю вводить строковые константы содержащие апострофы и выражения фильтра, содержащих нечетное количество (<).

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

Пример:

stringvar1 STRING('<250>')

stringvar2 STRING('<display text>')

stringvar3 STRING(30)

CODE

MESSAGE(QUOTE(stringvar1,0)) !возвращает акцентированный u

MESSAGE(QUOTE(stringvar1,1)) !возвращает акцентированный u

MESSAGE(QUOTE(stringvar2,0)) !возвращает'<<display text>'

MESSAGE(QUOTE(stringvar2,1)) !возвращает'<display text>'

stringvar3 = 'label{{PROP:text} = value'

MESSAGE(QUOTE(stringvar3,0)) !возвращает 'label{{PROP:text} = value'

MESSAGE(QUOTE(stringvar3,1)) !возвращает 'label{PROP:text} = value'

Смотри также: UNQUOTE

 

RANDOM (получить случайное число)

RANDOM(нижний предел,верхний предел)

RАNDОМ Возвращает случайное целое число.

нижний предел Числовая константа, переменная или выражение, задающее нижнюю границу диапазона.

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

Процедура RАNDОМ генерирует случайное целое число в диапазоне между нижним и верхним пределами включительно. Параметры нижний предел и верхний предел могут быть любыми числовыми выражениями, но используется только их целая часть для формирования включающего диапазона.

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

Пример:

Num BYTE,DIM(49)

LottoNbr BYTE,DIM(6)

CODE

CLEAR(Num)

CLEAR(LottoNbr)

LOOP X# = 1 TO 6

LottoNbr[X#] = RANDOM(1,49) !Взять значение для лотереи

IF NOT Num[LottoNbr[X#]]

Num[LottoNbr[X#]] = 1

ELSE

X# -= 1

END

END

 

RECORDS (получить число строк в данных)

RECORDS( структура )

RECORDS Возвращает число записей.

структура Метка объявления структуры QUEUE, VIEW, FILE, KEY или INDEX .

Процедура RECORDS возвращает целое число, содержащее число элементов в структуре.

Использование в файлах

Процедура RECORDS возвращает число записей в файле, ключе или индексе. Поскольку атрибут OPT операторов KEY или INDEX задает исключение “пустых” значений, RECORDS для ключа или индекса может возвращать меньшее значение чем для файла данных.

Использование в очередях

Процедура RECORDS возвращает целочисленное значение типа LОNG, содержащее число элементов в очереди.

Использование в виртуальных файлах

Процедура RECORDS возвращает целое число типа LONG, содержащее количество строк в последовательности данных VIEW-структуры, если в атрибуте ORDER VIEW-структуры не специфицировано ни одного ключевого поля.

Для не-SQL файловой системы RECORDS возвратит отрицательную единицу (-1), если в атрибуте ORDER VIEW-структуры имеется какое-нибудь ключевое поле. RECORDS может вернуть верное значение только в тех случаях, когда механизм функционирования предусматривает построение своего собственного индекса по всем записям в последовательности возвращаемых данных. Для тех же не-SQL VIEW, которые используют ключевые поля в атрибуте ORDER, оптимизационный механизм VIEW- структуры Clarion использует специфицированное ключевое поле (предназначенное

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

 

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

Пример:

SomeProc PROCEDURE(LocationQueue Location) !получает поименованную структуру QUEUE

Customer FILE,DRIVER('Clarion'),PRE(Cus)

AcctKey KEY(Cus:AcctNumber)

NameKey KEY(Cus:Name)

Record RECORD

AcctNumber LONG

Name STRING(20)

Addr STRING(20)

CSZ STRING(60)

END

END

Header FILE,DRIVER('Clarion'),PRE(Hea)

AcctKey KEY(Hea:AcctNumber)

OrderKey KEY(Hea:OrderNumber)

Record RECORD

AcctNumber LONG

OrderNumber LONG

OrderAmount DECIMAL(11,2)

END

END

ViewOrder VIEW(Customer),ORDER('Cus:Name,-Hea:OrderAmount') !ORDER без ключевых полей

PROJECT(Cus:AcctNumber,Cus:Name)

JOIN(Hea:AcctKey,Cus:AcctNumber)

PROJECT(Hea:OrderNumber)

PROJECT(Hea:OrderAmount)

END

END

SaveCount LONG

SaveNameCount LONG

CODE

OPEN(Customer)

OPEN(Header)

SaveCount = RECORDS(Customer) !Запомнить число записей

SaveNameCount = RECORDS(Cus:NameKey) !Число записей с заполненным полем Name

OPEN(ViewOrder)

MESSAGE("Records in VIEW = ' & RECORDS(ViewOrder))

Entries# = RECORDS(Location) !Определить количество элементов в передаваемой очереди

LOOP I# = 1 TO Entries# !Цикл по всем элементам очереди

GET(Location,I#) !получить запись

ASSERT(NOT ERRORCODE())

DO SomeProcess !и обработать ее

END

Смотри также: QUEUE, ADD, KEY, INDEX, OPT

 

REGISTER (регистрировать события обработчика)

REGISTER( событие, обработчик, объект [,окно] [,поле] )

REGISTER Регистрирует процедуру обработки событий.

событие Целочисленная константа, переменная, выражение или метка соответствия, содержащие номер события. Значение события, определенного пользователем лежит в диапазоне 400h - 0FFFh.

обработчик Переменная LONG или выражение, содержащие возвращаемое значение из процедуры ADDRESS для процедуры обработки события.

объект Целочисленная константа LONG, переменная или выражение, содержащие уникальное 32-х битное значение идентификатора указанного обработчика. Обычно это возвращаемое значение ADDRESS(SELF), когда обработчик является методом класса.

окно Метка WINDOW или REPORT, чье событие надлежит обработать. Если опущен, подразумевается текущее открытое WINDOW или REPORT.

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

  Может быть также прототипирован как REGISTEREVENT.

REGISTER регистрирует процедуру обработки события, вызываемую внутри текущего активного цикла ACCEPT указанного окна, всякий раз, когда событие происходит. Это может быть событием, определенным пользователеи, или любое другое событие. Номер события определенного пользователем является любым целым числом, лежащим в диапазоне между 400h и 0FFFh.

Вы можете зарегистрировать несколько обработчиков для одних и тех же событий по вашему выбору – обработчики вызываются циклом ACCEPT в обратном порядке их регистрации (последний из зарегистрированных обработчиков выполняется первым). Вы можете вызывать UNREGISTER для удаления регистрации любого указанного обработчика. Библиотечная функция Clarion автоматически разрегистрирует все зарегистрированные обработчики событий (для WINDOW передается как 4-й параметр) как часть закрытия окна (когда запущен внешний цикл ACCEPT для закрытия окна), поэтому явное выполнение UNREGISTER не требуется, если это не требует логика программы.

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

Процедура обработчика ДОЛЖНА иметь 1 параметр: когда обработчик вызван во время работы программы библиотека передает значение объекта ( 3-й параметр вызове REGISTER) как данный параметр.

Обработчик процедуры не должен передавать никаких параметров и должен возвращать BYTE, содержащее одно из следующих значений мнемонического имени (эти мнемонические имена определены в файле ABERROR.INC):

Level:Benign

Вызывает любые другие обработчики и цикл ACCEPT, если возможно.

Level:Notify

Не вызывает других обработчиков или цикл ACCEPT. Это равнозначно выполнению CYCLE при обработке события в цикле ACCEPT.

Level:Fatal

Не вызывает других обработчиков или цикл ACCEPT. Это равнозначно выполнению BREAK при обработке события в цикле ACCEPT.

Пример:

WindowResizeClass.Init PROCEDURE

CODE

REGISTER(EVENT:Sized,ADDRESS(SELF.TakeResize),ADDRESS(SELF))

!Следует другой код

WindowResizeClass.TakeResize PROCEDURE

ReturnValue BYTE

CODE

ReturnValue = Level:Benign

RETURN(ReturnValue)

Смотри также: UNREGISTER, ACCEPT, EVENT

 

REJECTCODE (получить код причины события EVENT:Rejected)

REJECTCODE( )

Процедура REJECTCODE возвращает числовой код причины возникновения события EVENT:Rejected. Если такого события не было, то возвращается ноль. В файле EQUATES.CLW содержатся мнемонические имена соответствия для значений, возвращаемых функцией REJECTCODE:

REJECT:RangeHigh ! Превышение верхней границы диапазона в SPIN

REJECT:RangeLow ! Выход за нижнюю границу диапазона в SPIN

REJECT:Range ! Прочая ошибка, связанная с диапазоном

REJECT:Invalid ! Введены неправильные данные

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

Пример:

CASE EVENT()

OF EVENT:Rejected

Message('Your entry is ' & CHOOSE(REJECTCODE(),'too high.','too low.',|

'out of range.','invalid.') & |

'||Entry: ' & EntryEqt{PROP:ScreenText})

SELECT(?)

CYCLE

END

 

REGET (повторно прочитать запись)

REGET( последовательность, строка)

REGET Повторно прочитывает заданную запись.

последовательность

Метка объявления VIEW, FILE, KEY или INDEX.

строка Строка, возвращенная ранее процедурой POSITION.

Оператор REGET считывает ранее полученную запись.

Использование в файлах

Оператор REGET считывает запись, идентифицированную строкой, возвращенной ранее процедурой POSITION. Содержащаяся в строке значение и длина зависят от файлового драйвера.

Использование в виртуальных файлах

Оператор REGET читает запись виртуального файла, указанную строкой, возвращенной процедурой POSITION(view). Значение, содержащееся в строке и его длина зависят от файлового драйвера. Если структура VIEW содержит структуры JOIN, то оператор REGET считывает соответствующий набор связанных записей.

Оператор REGET повторно заносит полные записи в буферы файлов – компонент структуры VIEW. Он не выполняет реляционной операции “проекция”. Оператор REGET(view) специально предназначен для того, чтобы перед закрытием виртуального файла восстановить соответствующие записи в буферах. Однако последовательность обработки файлов должна быть повторно установлена операторами SET или RESET.

Выдаваемые сообщения об ошибках:

35 Record Not Found (Запись не найдена)

37 File Not Open (Файл не открыт)

43 Record Is Already Held (Запись уже заблокирована)

78 Invalid number of parameters (параметр строка слишком мал)

Пример:

ViewOrder VIEW(Customer) !Объявить структуру VIEW

PROJECT(Cus:AcctNumber,Cus:Name)

JOIN(Hea:AcctKey,Cus:AcctNumber) !Присоединить файл Header

PROJECT(Hea:OrderNumber)

JOIN(Dtl:OrderKey,Hea:OrderNumber) !JПрисоединить файл Detail

PROJECT(Det:Item,Det:Quantity)

JOIN(Pro:ItemKey,Dtl:Item) !Присоединить файл Product

PROJECT(Pro:Description,Pro:Price)

END

END

END

END

RecordQue QUEUE,PRE(Que)

AcctNumber LIKE(Cus:AcctNumber)

Name LIKE(Cus:Name)

OrderNumber LIKE(Hea:OrderNumber)

Item LIKE(Det:Item)

Quantity LIKE(Det:Quantity)

Description LIKE(Pro:Description)

Price LIKE(Pro:Price)

SavPosition STRING(260)

END

CODE

OPEN(Customer,22h)

OPEN((Header,22h)

OPEN(Detail,22h)

OPEN(Product,22h)

SET(Cus:AcctKey)

OPEN(ViewOrder)

LOOP !Прочитать все записи файла

NEXT(ViewOrder) !читать последовательно записи

IF ERRORCODE()

DO DisplayQue

BREAK

END

RecordQue :=: Cus:Record !Занести запись в очередь

RecordQue :=: Hea:Record !Занести запись в очередь

RecordQue :=: Dtl:Record !Занести запись в очередь

RecordQue :=: Pro:Record !Занести запись в очередь

SavPosition = POSITION(ViewOrder)!Запомнить положение записей

ADD(RecordQue) !и добавить элемент в очередь

ASSERT(NOT ERRORCODE())

END

ACCEPT

CASE ACCEPTED()

OF ?ListBox

GET(RecordQue,CHOICE())

REGET(ViewOrder,Que:SavPosition)!Восстановить буферы записей

CLOSE(ViewOrder) !и снова получить записи

FREE(RecordQue)

UpdateProc !Вызвать процедуру обновления

BREAK

END

END

Смотри также: POSITION, SET, RESET, WATCH, GET, NEXT, PREVIOUS

 

RELEASE (освободить захваченную запись)

RELEASE( структура )

RELEASE Освобождает захваченную запись(и).

файл Метка объявления структуры FILE или VIEW.

Оператор RELEASE освобождает ранее захваченную запись процедурой HOLD. Но он не освободит запись, захваченную другим пользователем. Если запись не захвачена, или захвачена другим пользователем, то оператор RELEASE игнорируется.

Пример:

ViewOrder VIEW(Customer) !Объявить структуру VIEW

PROJECT(Cus:AcctNumber,Cus:Name)

JOIN(Hea:AcctKey,Cus:AcctNumber) !Присоединить файл Header

PROJECT(Hea:OrderNumber)

JOIN(Dtl:OrderKey,Hea:OrderNumber) !Присоединить файл Detail

PROJECT(Det:Item,Det:Quantity)

JOIN(Pro:ItemKey,Dtl:Item) !Присоединить файл Product

PROJECT(Pro:Description,Pro:Price)

END

END

END

END

CODE

OPEN(Customer,22h)

OPEN(Header,22h)

OPEN(Detail,22h)

OPEN(Product,22h)

SET(Cus:AcctKey)

OPEN(ViewOrder)

LOOP !Цикл обработки записей

LOOP !Цикл во избежание “взаимной блокировки”

HOLD(ViewOrder,1) !В течение 1 сек. пытаться заблокировать запись

NEXT(ViewOrder) !Прочитать и заблокировать запись

IF ERRORCODE() = 43 !Если кто-то уже заблокировал

CYCLE !попытаться снова

ELSE

BREAK !Выйти если запись никем не заблокирована

END

END

IF ERRORCODE() THEN BREAK END !Проверить на конец файла

!Process the records

RELEASE(ViewOrder) !Освободить заблокированную запись

END

Смотри также: HOLD, PUT

 

REMOVE (удалить файл)

REMOVE(файл)

REMOVE Удаляет файл данных.

файл Метка структуры FILE или строковая константа, содержащая имя файла, который нужно удалить.

Оператор REMOVE удаляет спецификацию файла из каталога операционной системы точно таким же образом как это делает команда DELETE операционной системы. Файл должен быть закрыт, в противном случае выдается сообщение об ошибке “File Already Open”. Если выдается какое-либо сообщение об ошибке, то файл не удаляется.

Поскольку некоторые файловые драйверы используют для одной логической структуры FILE несколько физических дисковых файлов, используемые по умолчанию имена файлов и расширения зависят от конкретного файлового драйвера.

REMOVE не может использоваться для удаления каталога, даже если он пуст. Для удаления каталога используйте CLib функцию RmDir, или вызов Windows API RemoveDirectory() для пустых каталогов, а также SHFileOperation для удаления файлов и подкаталогов рекурсивно.

Выдаваемые сообщения об ошибках:

02 File Not Found (файл не найден)

03 The system cannot find the path specified (система не может отыскать указанный путь)

05 Access Denied (доступ запрещен)

52 File Already Open (файл уже открыт)

Пример:

REMOVE(OldFile) !Удалить старый файл

REMOVE('Changes.dat') !Удалить файл changes

Смотри также: CLOSE

 

RENAME (изменить имя файла и/или каталог)

RENAME(файл,новый файл)

RENAME Переименовывает файл.

файл Метка структуры FILE, строковая константа или переменная, содержащая спецификацию файла, который следует переименовать.

новый файл Строковая константа или переменная, содержащая спецификацию файла. Если эта спецификация файла не содержит диска и пути, то подразумевается текущий диск и каталог. Если указывается только путь к файлу, то в качестве имени и расширения для нового файла используется имя и расширение исходного файла. Файл нельзя “переименовать” на диск, отличный от старого.

Оператор RENAME изменяет спецификацию файла в файловой системе на заданную параметром новый файл. Файл, который переименовывается должен быть закрыт, в противном случае выдается сообщение “File Already Open”. Если спецификация нового файла совпадает с исходной спецификацией файла, то оператор RENAME игнорируется. Если выдается какое-либо сообщение об ошибке, то файл не переименовывается.

Поскольку некоторые файловые драйверы используют для одной логической структуры FILE несколько физических дисковых файлов, используемые по умолчанию имена файлов и расширения зависят от конкретного файлового драйвера.

Выдаваемые сообщения об ошибках:

02 File Not Found (файл не найден).

03 Path Not Found (путь неверен)

05 Access Denied (доступ запрещен)

52 File Already Open (файл уже открыт)

Пример:

RENAME(Text,'text.bak') !Сделать резервную копию

RENAME(Master,'\newdir') !Переместить в другой каталог

RENAME('C:\AUTOEXEC.BAT','C:\AUTOEXEC.SAV') !Сделать резервную копию

Смотри также: CLOSE

 

RESET (восстановить положение в последовательности записей)

RESET( | view, строка | )

| view, файл |

| последовательность, строка |

RESET Восстановить указатель последовательной обработки на заданную запись.

view Метка виртуального файла.

строка Строковая константа или переменная, содержащая строку, полученную с помощью процедуры POSITION.

файл Метка составляющего файла VIEW-структуры.

последовательность

Метка объявления файла, ключа или индекса.

RESET восстанавливает последовательность обработки на указанную запись.

Использование в виртуальных файлах

RESET восстанавливает VIEW на предварительно прочитанную позицию в наборе возвращаемых данных.

RESET(view, строка)

Устанавливается на запись, которая была идентифицирована строкой, возвращенной процедурой POSITION. Как только RESET восстановил указатель записи, эта запись будет считана либо оператором NEXT, либо PREVIOUS.

RESET(view, файл)

Устанавливается на запись, которая была идентифицирована текущим содержимым буфера записи файла. Это применяется в тех случаях, когда порядок просмотра VIEW определен путем использования PROP:Order и эквивалентен RESET(view, строка).

Значение, содержащееся в строке (возвращаемой процедурой POSITION), и его длина зависят от файлового драйвера. Оператор RESET обычно используется совместно с процедурой POSITION для временной приостановки и продолжения последовательной обработки виртуального файла.

Использование в файлах

Оператор RESET восстанавливает указатель на запись, идентифицированную строкой, возвращенной ранее процедурой POSITION. Поскольку оператор RESET восстановил указатель на запись, то либо оператор NEXT, либо PREVIOUS считают эту запись.

Содержащаяся в строке значение, возвращенное процедурой POSITION, и его длина зависят от файлового драйвера. Оператор RESET в сочетании с процедурой POSITION используется для временной приостановки и продолжения последовательной обработки файла.

Выдаваемые сообщения об ошибках:

33 Record Not Available (запись не доступна)

37 File Not Open (файл не открыт)

78 Invalid number of parameters (параметр строки слишком мал)

Пример:

ViewOrder VIEW(Customer) !Объявить структуру VIEW

PROJECT(Cus:AcctNumber,Cus:Name)

JOIN(Hea:AcctKey,Cus:AcctNumber) !Соединить с файлом заголовков

PROJECT(Hea:OrderNumber)

JOIN(Dtl:OrderKey,Hea:OrderNumber) !Соединить с файлом накладных

PROJECT(Det:Item,Det:Quantity)

JOIN(Pro:ItemKey,Dtl:Item) !Соединить с файлом товаров

PROJECT(Pro:Description,Pro:Price)

END

END

END

END

RecordQue QUEUE,PRE(Que)

AcctNumber LIKE(Cus:AcctNumber)

Name LIKE(Cus:Name)

OrderNumber LIKE(Hea:OrderNumber)

Item LIKE(Det:Item)

Quantity LIKE(Det:Quantity)

Description LIKE(Pro:Description)

Price LIKE(Pro:Price)

END

SavPosition STRING(260)

CODE

OPEN(Customer,22h)

OPEN(Header,22h)

OPEN(Detail,22h)

OPEN(Product,22h)

SET(Cus:AcctKey)

OPEN(ViewOrder) !Начало файла в последовательности ключа

LOOP !Прочитать все записи в файле

NEXT(ViewOrder) ! читать следующую запись

IF ERRORCODE()

DO DisplayQue

BREAK

END

RecordQue :=: Cus:Record !Занести запись в очередь

RecordQue :=: Hea:Record !Занести запись в очередь

RecordQue :=: Dtl:Record !Занести запись в очередь

RecordQue :=: Pro:Record !Занести запись в очередь

ADD(RecordQue) ! и добавить элемент в очередь

ASSERT(NOT ERRORCODE())

IF RECORDS(RecordQue) = 20 !В очереди 20 записей?

DO DisplayQue !Вывести очередь на экран

END

END !Конец цикла

DisplayQue ROUTINE

SavPosition = POSITION(ViewOrder) !Запомнить положение в последовательности

DO ProcessQue !Вывести очередь на экран

FREE(RecordQue) !и очистить ее

RESET(ViewOrder,SavPosition) !Установить заново указатель

NEXT(ViewOrder) !и прочитать заново запись.

Смотри также: POSITION, SET, NEXT, PREVIOUS, REGET

 

RESTORESTATE (восстановить состояние файла данных)

RESTORESTATE(файл, сохраненное состояние,<флаг восстановления>)

RESTORESTATE Восстанавливает сохраненное состояние файла включающее буфер записи, указатель файла, порядок последовательности и состояние ошибки системы.

файл Метка объявления файла.

сохраненное состояние

Числовая переменная LONG, которое представляет значение, возвращаемое процедурой GETSTATE.

флаг восстановления

Байтовое значение, которое указывает восстанавливать или нет буфер записи. По умолчанию значение ЛОЖЬ (0), которое означает, что буфер записи не восстанавливается.

RESTORESTATE восстанавливает состояние файла включающее буфер записи, указатель файла, порядок последовательности и состояние ошибки системы. По умолчанию, RESTORESTATE не восстанавливает буфер записи файла. Установка флага восстановления в ИСТИНУ восстановит буфер.

RESTORESTATE не изменяет данные, хранящиеся в файле. Если записи добавлены после GETSTATE, но перед RESTORESTATE, то новые записи останутся в файле данных после RESTORESTATE.

Пример:

MyFunction PROCEDURE(FILE MyFile)

CurState LONG

CODE

! Файл вернется в тоже состояние при выходе из процедуры, что и при входе

CurState = GETSTATE(MyFile) !сохранить текущее состояние файла

SET(MyFile) !приготовиться к доступу к файлу

NEXT(MyFile) !прочитать запись

CLEAR(MyFile) !очистить буфер записи

RESTORESTATE(MyFile,CurState,1) !восстановить состояние файла и буфера

!в первоначальное состояние

FREESTATE(MyFile, CurState) !освободить ресурсы

Смотри также: FREESTATE, GETSTATE

 

RESUME (возобновление выполнения процесса)

RESUME(номер процесса)

RESUME Возобновление выполнения процесса.

номер процесса Числовая константа, переменная или выражение, которое вычисляется как знаковое целое.

Процедура RESUME восстанавливает процесс, который был приостановлен оператором SUSPEND. Если параметр threadno является номером процесса, который ранее был приостановлен вызовом SUSPEND, счетчик остановок уменьшается. Когда счетчик остановок становится равным нулю, выполнение процесса продолжается с точки в которой он был приостановлен. Поэтому, число вызовов RESUME должно быть равным числу вызовов SUSPEND для возобновления выполнения процесса.

RESUME может также использоваться для немедленной активации нового процесса. Обычно, процедура не выделяет память для потоковых переменных до тех пор пока не выполнится обработчик событий ACCEPT. RESUME может использоваться для активизации процесса непосредственно при входе в процедуру.

Пример:

RESUME(ThreadNumVariable) !попытка восстановления выполнения процесса

RESUME(START(MyThreadProc)) !тут же начать новый процесс

Смотри также: SUSPEND

 

RIGHT (выровнять строку вправо)

RIGHT(строка [,длина])

RIGHT Выравнивает строку вправо.

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

длина Числовая константа, переменная или выражение, указывающая длину возвращаемой строки. Если этот параметр опущен, то берется длина параметра строка.

Процедура RIGНТ возвращает выровненную вправо строку. Пробелы в конце значения строки удаляются, затем значение выравнивается вправо и строка возвращается дополненная в начале пробелами.

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

Пример:

!RIGHT('ABC ') возвращает ' ABC'

Message = RIGHT(Message) !Выровнять текст сообщения вправо

Смотри также: LEFT, CENTER

 

ROLLBACK (завершить неуспешную транзакцию)

ROLLBACK

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

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

Выдаваемые сообщения об ошибках:

65 Unable to ROLLBACK Transaction (Невозможно откатить транзакцию)

91 No Logout Active (Транзакция не начиналась)

Пример:

LOGOUT(1,OrderHeader,OrderDetail) !Начать транзакцию

DO ErrHandler !всегда проверяя ошибки

ADD(OrderHeader) !Добавить порождающую запись

DO ErrHandler !всегда проверяя ошибки

LOOP X# = 1 TO RECORDS(DetailQue) !Процесс занесения порожденных записей

GET(DetailQue,X#) !Взять одну из очереди

DO ErrHandler !всегда проверяя ошибки

Det:Record = DetailQue !поместить в буфер записи

ADD(OrderDetail) !и добавить в файл

DO ErrHandler !всегда проверяя ошибки

END

COMMIT !Завершить успешную транзакцию

ASSERT(~ERRORCODE())

ErrHandler ROUTINE !Подпрограмма проверки ошибок

IF NOT ERRORCODE() THEN EXIT. !Выйти, если нет ошибок

ROLLBACK !Откатить неуспешную транзакцию

ASSERT(~ERRORCODE())

BEEP !Оповестить пользователя

MESSAGE('Transaction Error - ' & ERROR())

RETURN !затем выйти

Смотри также: LOGOUT, COMMIT

 

ROUND (округлить число)

ROUND(выражение,порядок)

ROUND Округляет число.

выражение Числовая константа, переменная или выражение.

порядок Числовое выражение, значение которого равно степени десяти, например: 1, 10, 100 или .1, .0001 и т.д.. Если значение параметра порядок не является кратным степени 10, то используется ближайшая более низкая кратная степень (например, вместо .55 используется 0.1, а вместо 155 используется 100).

Процедура RОUND выдает значение выражения, округленного до степени десяти. Если порядок является базовым типом LONG или DECIMAL, тогда округление выполняется как операции BCD. Заметьте, что если вам надо округлить реальное число большее чем 1³°, вы должны использовать ROUND(num,1.0e°), а не ROUND(num,1). Процедура ROUND очень эффективна как двоично-десятичная операция и должна использоваться для сравнивания натуральных чисел в десятичные по дробным долям.

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

Пример:

!ROUND(5163,100) возвращает 5200

!ROUND(657.50,1) возвращает 658

!ROUND(51.63594,.01) возвращает 51.64

Commission = ROUND(Price / Rate,.01) !Округление комиссии до ближайшего цента

Смотри также: BCD операции и процедуры

 

ROUNDBOX (нарисовать прямоугольник с округлыми углами)

ROUNDBOX( x ,y ,ширина ,высота [,закраска] [,список атрибутов])

ROUNDBOX Рисует прямоугольник с округлыми углами в текущем окне или документе.

x Целочисленное выражение для указания горизонтального положения начальной точки.

y Целочисленное выражение для указания вертикального положения начальной точки.

ширина Целочисленное выражение для указания ширины.

высота Целочисленное выражение для указания высоты.

раскраска Целочисленная константа типа LONG, символическое имя, переменная, в трех младших байтах (байты 0, 1 и 2) которых находятся красная зеленая и синяя компоненты цвета или символическое имя для значения стандартного цвета Windows.

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

Процедура ROUNDBOX рисует прямоугольник с округлыми углами в текущем окне или документе. Положение и размеры прямоугольника определяются параметрами x, y, ширина и высота.

Параметры x и y определяют начальную точку, а параметры ширина и высота определяют горизонтальный и вертикальный размеры прямоугольника. Прямоугольник распространяется вправо и вниз от начальной точки.

Цвет линии прямоугольника - цвет, установленный оператором SETPENCOLOR для текущего пера. Цвет по умолчанию - цвет, установленный Windows для текста окна. Толщина линии - текущая толщина, установленная SETPENWIDTH, толщина по умолчанию - один пиксел. Тип линии - тип линии, установленный SETPENSTYLE для текущего пера, тип линии по умолчанию - сплошная линия.

Пример:

MDIChild WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!объкты окна

END

CODE

OPEN(MDIChild)

ROUNDBOX(100,50,100,50,00FF0000h) !Красный сглаженный прямоугольник

Смотри также: Текущий объект, SETPENCOLOR, SETPENWIDTH, SETPENSTYLE

 

RUN (выполнить команду)

RUN( команда [, флаг ожидания ] )

RUN Выполняет команду как, если бы она была введена в командной строке DOS.

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

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

Оператор RUN выполняет команду, чтобы исполнить программу для DOS или Windows. Если параметр команды строковая переменная (STRING), вы должны использовать CLIP для удаления пробелов в конце строки (это неважно, если используется CSTRING). Внутренне, RUN использует соответствующий вызов API для выполнения команды.

При выполнении команды, новая программа загружается как “верхняя”, активная программа. Управление немедленно возвращается в запускающую программу на следующий за оператором RUN оператор и программа продолжает выполняться как фоновая прикладная программа, если переменная - флаг ожидания - 0. Пользователь может возвратиться запускающую программу или закончив выполнение запущенной, или переключившись обратно посредством списка задач Windows. Управление возвращается в запускающую программу на оператор, следующий за RUN только после завершения исполнения команды, если значение флага ожидания единица (1).

Если в параметре команда не содержится пути в файловой системе к программе, то поиск происходит в следующей последовательности:

1. Текущий каталог DOS;

2. Каталог Windows;

3. Системный каталог Windows;

4. Все каталоги, указанные в переменной PATH;

5. Все каталоги для поиска, указанные средствами локальной сети.

Успешное выполнение команды может проверяться с помощью процедуры RUNCODE, которая возвращает код возврата, передаваемый запускаемой программой операционной системе. Если он ненулевой, то RUN устанавливает соответствующие значения процедур ERROR и ERRORCODE.

Выполнение оператора RUN может приводить к возникновению различных ошибочных ситуаций.

Выдаваемые сообщения об ошибках :

Выполнение оператора RUN может приводить к возникновению различных ошибочных ситуаций.

Пример:

ProgNameC CSTRING(100)

ProgNameS STRING(100)

CODE

RUN('notepad.exe readme.txt') !Выполняется Notepad, автоматически

!подгружается файл readme.txt file

RUN(ProgNameC) !Выполнить программу, имя которой в

!переменной CSTRING ProgNameC

RUN(CLIP(ProgNameS)) !Выполнить программу, имя которой в

!переменной STRING ProgNameS

 

RUN('command.com /c MyBat.bat',1) !Выполнить команду и ждать до ее полного завершения

Смотри также: RUNCODE, HALT, ERROR, ERRORCODE

 

RUNCODE (получить код завершения)

RUNCODE( )

Процедура RUNCODE возвращает код возврата, переданный операционной системе последней командой, исполненной оператором RUN. Этот код возврата является тем же самым кодом, который передается оператором HALT в Clarion-программе и такой же как DOS ЕRRОRLЕVЕL. Возвращаемое этой процедурой значение представляет собой длинное целое и может быть любым значением, которое возвращается в DOS порожденной программой в качестве кода завершения.

Порожденная программа в качестве кода завершения может передавать только однобайтовое значение без знака, поэтому для него невозможны отрицательные значения. Это позволяет процедуре RUNCODE зарезервировать следующие значения для обработки ситуаций, когда код возврата отсутствует:

0 нормальное завершение

-1 программа прервана нажатием комбинации Ctrl-C

-2 программа завершена с сообщением о критической ошибке

-3 выход из TSR программы

-4 программа не выполнялась, проверьте значение функции ERROR()

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

Пример:

RUN('Nextprog.exe') !Выполнить следующую программу

IF RUNCODE() = -4

IF ERROR() = 'Not Enough Memory' !Если программа не выполнена из-за нехватки памяти

MESSAGE('Insufficient memory') !вывести сообщение

RETURN !! и завершить процедуру

ELSE

STOP(ERROR()) !закончить программу

.END.

Смотри также: RUN, HALT

 

SELECT (выбор поля для последующей обработки)

SELECT( [поле] [,позиция] [,конец позиции] )

SELECT Назначает поле, в которое направляется фокус ввода

поле Номер или метка соответствия поля, выбираемого для последующей обработки. Если параметр опущен, то оператор SELECT устанавливает режим “принять все” (AcceptAll).

позиция Указывает местоположение курсора внутри поля. Для полей ENTRY, TEXT, SPIN, COMBO указывается либо позиция символа, либо позиция первого символа блока выделения. Для структуры OPTION – это номер альтернативы выбора. Для управляющего поля LIST – номер QUEUE-элемента. Этот параметр также может задаваться с помощью синтаксиса свойств, как PROP:Selected или PROP:SelStart.

конец позиции Указывает позицию последнего символа внутри полей ENTRY, TEXT, SPIN или COMBO. Позиции символов, указанные параметрами позиция и конец позиции, помечаются как начало и конец блока, предназначенного для операций “вырезания” (cut) и “склеивания” (paste). Этот параметр также может задаваться с помощью синтаксиса свойств, как PROP:SelEnd.

Оператор SELECT нарушает нормальную последовательность выбора полей, осуществляемую TAB-клавишей в структурах APPLICATION или WINDOW. Он оказывает воздействие на последующее выполнение оператора ACCEPT. Параметр поле определяет то поле, которое будет обработано следующей итерацией ACCEPT-цикла. Если указанное поле заблокировано операторами DISABLE или HIDE, т. е. не может принять фокус ввода, то фокус устанавливается на следующее незаблокированное поле окна. Если параметр поле определяет объект в структуре TAB, которая в данный момент не имеет фокуса ввода, то перед тем как на объект будет переключен фокус ввода, лист будет перенесен на передний план.

SELECT с параметрами позиция и конец позиции определяет в поле блок выделения, предназначенный для операций “вырезания” (cut) и “склеивания” (paste).

SELECT без параметров устанавливает режим “принять все” (AcceptAll), еще называемый безостановочным режимом. Это режим редактирования поля, в котором каждое управляющее поле окна обрабатывается в последовательности их выбора клавишей TAB, когда для каждого поля порождается событие EVENT:Accepted. Это дает возможность выполнить процедуру проверки правильности ввода данных для всех полей, включая и те, которые не были затронуты пользователем.

Режим “принять все” отменяется, когда возникает одно из следующих условий:

  • Оператор SELECT(?) выбирает для редактирования то же самое поле. Как правило, такое случается тогда, когда введено недопустимое значение, и пользователь должен повторить ввод данных.

  • Установлено в 0 свойство Window{PROP:AcceptAll}. Значение свойства равно 1 когда установлен режим “принять все”. Таким образом, присваивая значение атрибуту, можно устанавливать или отменять режим “принять все”.

  • Нулевое или “пустое” значение поля, у которого присутствует атрибут REQ. Режим “принять все” отменяется, поле подсвечивается для ввода данных, отменяется обработка полей в последовательности выбора клавишей TAB.

Когда обработаны все поля, для данного окна генерируется событие EVENT:Completed.

Пример:

Screen WINDOW,PRE(Scr)

ENTRY(@N3),USE(Ctl:Code)

ENTRY(@S30),USE(Ctl:Name)

LIST,USE(Ctl:Type),From(TypeQue),Drop(5)

BUTTON('OK'),USE(?OkButton),KEY(EnterKey)

BUTTON('Cancel'),USE(?CanxButton),KEY(EscKey)

END

CODE

OPEN(Screen)

SELECT(?Ctl:Code) !Начать с поля Ctl:Code

ACCEPT

CASE SELECTED()

OF ?Ctl:Type

GET(TypeQue,Ctl:Type) !Найти тип в списке

SELECT(?Ctl:Type,POINTER(TypeQue) !выбрать список в элемент

END

CASE ACCEPTED()

OF ?Ctl:Code

IF Ctl:Code > 150 !Если введенные данные неверны

BEEP !оповестить пользователя и

SELECT(?) !дать ему возможность повторить ввод данных

END

OF ?Ctl:Name

SELECT(?Ctl:Name,1,5) !Пометить первые пять символов в блоке

OF ?OkButton

SELECT !Инициировать безостановочный режим

END

IF EVENT() = EVENT:Completed

BREAK !Закончить безостановочный режим

END

END

Смотри также: ACCEPT

 

SELECTED (указать поле, владеющее фокусом ввода)

SELECTED( )

Для события EVENT:Selected процедура SELECTED возвращает номер управляющего поля, завладевшего фокусом ввода. Процедура возвращает 0 для всех остальных событий.

Компилятор присваивает номерам полей структуры WINDOW положительные значения в порядке возрастания - как поля следуют при объявлении структуры WINDOW. Номерам полей структуры APPLICATION присваиваются отрицательные значения. В операторах программы номера полей представлены, как правило, метками соответствия - именем USE-переменной, перед которой стоит знак вопроса (?FieldName).

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

Пример:

CASE SELECTED() !Предварительные действия

OF ?Cus:Company !Переустановить значение поля

OF ?Cus:CustType !Переустановить значение поля

END

Смотри также: ACCEPT, SELECT

 

SEND (послать сообщение файловому драйверу)

SEND(файл,сообщение)

SEND Посылает сообщение файловому драйверу

файл Метка объявления структуры FILE. Атрибут DRIVER этой структуры идентифицирует файловый драйвер, который должен получить сообщение.

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

Процедура SEND позволяет программе во время выполнения передать любые параметры, характерные для какого-то файлового драйвера. Допустимые сообщения зависят от используемого файлового драйвера. Конкретные примеры допустимых сообщений перечисляются в документации на файловый драйвер.

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

Пример:

FileCheck = SEND(ClarionFile,'RECOVER=120') !Включить восстановление файла данных Clarion

Вы можете также использовать Clarion-процедуру SEND, чтобы послать SQL-команду во внутреннюю базу данных. Это обеспечивает обратную совместимость с ранними версиями Clarion. Мы рекомендуем использовать синтаксис свойств, чтобы послать SQL-операторы во внутреннюю базу.

SEND(SQLFile,'SELECT field1,field2 FROM table1' |

& 'WHERE field1 > (SELECT max(field1)' |

& 'FROM table2') ! Возвращает результат установленный

! получением одной строки за раз

! используя NEXT(SQLFile)

SEND(SQLFile,'CALL GetRowsBetween(2,8)') !Вызвать процедуру сохранения

SEND(SQLFile,'CREATE INDEX ON table1(field1 DESC)') !Результат не установлен

 

SET (начать последовательную обработку файла)

| файл |

SET( | файл, ключ | )

| файл, указатель файла |

| ключ |

| ключ, ключ |

| ключ, указатель ключа |

| ключ, ключ, указатель файла |

| виртуальный файл |

| виртуальный файл , число |

SET Начинает последовательную обработку файла или VIEW.

файл Метка объявления структуры FILE. Этот параметр задает обработку в порядке физического расположения записей в файле данных.

ключ Метка объявления ключа или индекса. При использовании в качестве первого параметра ключ задает обработку в логической последовательности упорядочения ключа или индекса.

указатель файла Числовая константа, переменная или выражение представляющее собой значение возвращенное процедурой POINTER(файл).

указатель в ключах Числовая константа, переменная или выражение представляющее собой значение возвращенное процедурой POINTER(ключ).

виртуальный файл Метка структуры VIEW.

число Целочисленная константа, переменная или выражение, задающее начальное положение, на основе числа первых компонент атрибута ORDER. Если этот параметр опущен, то используются все компоненты атрибута ORDER.

Оператор SET начинает последовательную обработку файла или VIEW. Запись при его выполнении не считывается, а только устанавливается последовательность обработки и начальная точка для последующих операторов NEXT и PREVIOUS.

Использование в файлах

SET начинает последовательную обработку файла данных. Первый параметр оператора определяет последовательность, в которой обрабатываются записи. Второй и третий параметры определяют начальную точку обработки. Если второй и третий параметры опущены, то обработка начинается с начала (или с конца) файла.

SET(файл)

Задает обработку в последовательности физического расположения записей и устанавливает текущий указатель на начало (SET...NEXT) или конец (SET...PREVIOUS) заданного файла.

SET(файл, ключ)

Задает обработку в последовательности физического расположения записей и устанавливает текущий указатель на первую запись, которая содержит значения полей, совпадающие со значениями полей-компонент ключа. ЗАМЕЧАНИЕ: Эта форма используется редко и полезна только когда записи физически расположены в последовательности ключа. Это распространенная ошибка использования такой формы, в то время как SET(ключ,ключ) более подходящая.

SET(файл, указатель файла)

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

SET(ключ)

Задает обработку в последовательности ключа и устанавливает текущий указатель на начало (SET...NEXT) или конец (SET...PREVIOUS) файла в этой логической последовательности.

SET(ключ, ключ)

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

SET(ключ, указатель ключа)

Задает обработку в последовательности ключа и устанавливает текущий указатель в файле ключей в соответствии со вторым параметром.

SET(ключ, ключ, указатель файла)

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

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

Значения параметров указатель файла и указатель ключа зависят от файлового драйвера. Это может быть номер записи, относительное смещение в файле или некий другой тип “поисковой позиции” внутри файла. Эти параметры используются для того, чтобы начать обработку с заданной записи в файле.

Для всех файловых драйверов попытка выполнить оператор SET на запись “после конца” файла установит значение процедуры EOF “истина”, а попытка установить запись “перед началом” файла установит значение истина для функции BOF.

Использование в виртуальных файлах

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

Пример:

ViewOrder VIEW(Customer),FILTER('Hea:OrderTotal >= 500') |,ORDER('-Hea:OrderDate,Cus:Name')

PROJECT(Cus:AcctNumber,Cus:Name)

JOIN(Hea:AcctKey,Cus:AcctNumber) !Соединить с файлом Header

PROJECT(Hea:OrderNumber,Hea:OrderTotal,Hea:OrderDate)

JOIN(Dtl:OrderKey,Hea:OrderNumber) !Соединить с файлом Detail

PROJECT(Det:Item,Det:Quantity)

JOIN(Pro:ItemKey,Dtl:Item) !Соединить с файлом Product

PROJECT(Pro:Description,Pro:Price)

END

END

END

END

CODE

DO OpenAllFiles

!Физический порядок обработки с начала файла

SET(Customer)

Cus:Name = 'Smith'

!Физический порядок обработки, с записи с Name = 'Smith'

SET(Customer,Cus:NameKey)

SavePtr = POINTER(Customer)

!Физический порядок обработки, начав с номера = SavePtr

SET(Customer,SavePtr)

!В порядке ключа NameKey, с начала файла (по ключу)

SET(Cus:NameKey)

SavePtr = POINTER(Cus:NameKey)

!В порядке NameKey, с номера записи в ключах = SavePtr

SET(Cus:NameKey,SavePtr)

Cus:Name = 'Smith'

!В порядке NameKey, с записи с Name = 'Smith'

SET(Cus:NameKey,Cus:NameKey)

Cus:Name = 'Smith'

SavePtr = POINTER(Customer)

!В порядке NameKey, с записи с Name = ‚Smith™ и номером записи = SavePtr

SET(Cus:NameKey,Cus:NameKey,SavePtr)

 

OPEN(ViewOrder)

SET(ViewOrder) !Начало записей установленных в последовательности ORDER

LOOP !Читать все записи файла

NEXT(ViewOrder) !читать последовательно

IF ERRORCODE() THEN BREAK END

!Process the order

END

END

Hea:OrderDate = TODAY()-1 !Присвоить вчерашнюю дату

SET(ViewOrder,1) !и обработать только вчерашние данные

LOOP !Читать все записи файла

NEXT(ViewOrder) !читать последовательно

IF ERRORCODE() THEN BREAK.

!Порядок обработки

END

END

Смотри также: NEXT, PREVIOUS, FILTER, ORDER, OPEN, POINTER(очередь), POINTER, GET, RESET, POSITION

 

SET3DLOOK (установить объемное изображение окна)

SET3DLOOK( переключатель )

SET3DLOOK Устанавливает/отменяет трехмерное восприятие изображения.

переключатель Целочисленная константа, отменяющая (=0) или устанавливающая (=1) объемное (3D) изображение.

Процедура SET3DLOOK настраивает программу на трехмерное восприятие изображения. По умолчанию программа настраивается на 3D-изображение. Атрибут GRAY структуры WINDOW устанавливает объемное изображение полей. Поля линейки инструментов всегда изображаются объемными, если не было запрета со стороны SET3DLOOK. Атрибут GRAY перестает действовать когда процедурой STE3DLOOK наложен запрет на трехмерное изображение.

SET3DLOOK(0) отменяет изображение в объеме, тогда как SET3DLOOK(1) - устанавливает. Значения отличные от 0 и 1 зарезервированные для будущих применений.

Пример:

MainWin APPLICATION('My Application'),SYSTEM,MAX,ICON('MyIcon.ICO'),STATUS,HVSCROLL,RESIZE

MENUBAR

MENU('&File'),USE(?FileMenu)

ITEM('&Open...'),USE(?OpenFile)

ITEM('&Close'),USE(?CloseFile),DISABLE

ITEM('Turn off 3D Look'),USE(?Toggle3D),CHECK

ITEM('E&xit'),USE(?MainExit)

END

END

END

CODE

OPEN(MainWin)

ACCEPT

CASE ACCEPTED()

OF ?Toggle3D

IF MainWin$?Toggle3D{PROP:text} = 'Turn off 3D Look' !Если 3D разрешено

SET3DLOOK(0) !то запретить

MainWin$?Toggle3D{PROP:text} = 'Turn on 3D Look' !и изменить текст

ELSE !Иначе

SET3DLOOK(1) !разрешить 3D

MainWin$?Toggle3D{PROP:text} = 'Turn off 3D Look' !и изменить текст

END

OF ?OpenFile

START(OpenFileProc)

OF ?MainExit

BREAK

END

END

CLOSE(MainWin)

 

SETCLIPBOARD (положить информацию в Windows-буфер обмена)

SETCLIPBOARD( строка )

SETCLIPBOARD Заносит информацию в буфер обмена системы Windows.

строка Строковая константа или переменная, содержимое которой помещается в буфер обмена Windows.Не может содержать встроенных пустых символов (ASCII 0). Это возможно только в формате CF_TEXT.

Процедура SETCLIPBOARD заносит содержимое строки в Windows-буфер обмена. Предыдущее содержимое буфера теряется.

Пример:

Que1 QUEUE

STRING(30)

END

Que2 QUEUE

STRING(30)

END

WinOne WINDOW,AT(0,0,160,400)

LIST,AT(120,0,20,20),USE(?List1),FROM(Que1),DRAGID('List1')

!Можно “потащить”, но нельзя “отпустить”

LIST,AT(120,120,20,20),USE(?List2),FROM(Que2),DROPID('List1')

!Можно “положить” из List1, но нельзя “потащить”

END

CODE

OPEN(WinOne)

ACCEPT

CASE EVENT()

OF EVENT:Drag !Если событие - попытка “взять”, то

IF DRAGID() !оценить успех попытки

SETCLIPBOARD(Que1) !и подготовить данные для передачи

END

OF EVENT:Drop !Если событие “положить” - успешно, то

Que2 = CLIPBOARD() !прочитать “положенную” информацию

ADD(Que2) !и добавить ее в список

END

END

Смотри также: CLIPBOARD

 

SETCLOCK (установить системное время)

SETCLOCK(время)

SETCLOCK Устанавливает системное время.

время Числовая константа, переменная или выражение представляющее стандартное время (выраженное в сотых долях секунды, истекших с полуночи плюс единица).

Оператор SЕТCLOCK устанавливает в операционной системе текущее время.

Пример:

SETCLOCK(1) !Установить время на полночь

SETCLOCK(6001) !Установить время на одну минуту после полуночи

Смотри также: Стандартное время, CLOCK

 

SETCOMMAND (задать параметры командной строки)

SETCOMMAND(командная строка)

SETCOMMAND Устанавливает параметры командной строки.

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

Оператор SETCOMMAND позволяет внутри программы задать параметры командной строки, которые затем можно прочитать с помощью процедуры COMMAND. SETCOMMAND устанавливает для любых ранее заданных в командной строке ключей те же самые значения. Для того, чтобы выключить ключ со слэшем спереди, нужно, задавая в параметре командная строка добавить после ключа знак равно (=).

С помощью SETCOMMAND нельзя установить системные переключатели, которые должны задаваться при загрузке программы. Указатель каталога для временных файлов (CLATMP=) может устанавливаться оператором SETCOMMAND.

Пример:

SETCOMMAND(' /N') !Добавить параметр /N

SETCOMMAND(' /N=') !Выключить параметр /N

Смотри также: COMMAND

 

SETCURSOR (временно изменить курсор мыши)

SETCURSOR( [курсор] )

SETCURSOR Определяет на время форму изображения курсора мыши.

курсор EQUATE, обозначающий стандартный курсор для мыши Windows, или строковая константа, называющая ресурс курсора, подключенный к проекту - имя файла .CUR с тильдой впереди (‘~Mycur.CUR’). Если пропущено - выключает временный курсор.

Оператор SETCURSOR устанавливает новую временную форму курсора мыши, пока не выполнится оператор SETCURSOR без параметров. Действие параметров атрибута CURSOR приостанавливается. Выполнение оператора SETCURSOR без параметра курсор восстанавливает действие атрибута CURSOR. В основном, SETCURSOR используется для изображения песочных часов, чтобы информировать пользователя о выполнении в данный момент “закулисных” действий, в ход выполнения которых он не может вмешаться.

Операторы EQUATE для курсора мыши стандарта Windows расположены в файле EQUATES.CLW. Представленный ниже список - фрагмент этого файла (полный перечень смотрите в файле EQUATES.CLW):

CURSOR:None Курсор отсутствует

CURSOR:Arrow Обычный оконный курсор - стрелка

CURSOR:IBeam Заглавная “I” формы стального двутавра

CURSOR:Wait Песочные часы

CURSOR:Cross Увеличенный знак “+”

CURSOR:UpArrow Вертикальная стрелка

CURSOR:Size Четырехглавая стрелка

CURSOR:Icon Пиктограмма

CURSOR:SizeNWSE Двунаправленная стрелка, отклоненная влево от вертикали

CURSOR:SizeNESW Двунаправленная стрелка, отклоненная вправо от вертикали

CURSOR:SizeWE Двунаправленная горизонтальная стрелка

CURSOR:SizeNS Двунаправленная вертикальная стрелка

Пример:

MainWin APPLICATION('My Application'),SYSTEM,MAX,ICON('MyIcon.ICO'),STATUS,HVSCROLL

MENUBAR

ITEM('Batch Update'),USE(?Batch)

END

END

CODE

OPEN(MainWin)

ACCEPT

CASE ACCEPTED()

OF ?Batch

SETCURSOR(CURSOR:Wait) !Включить курсор-песочные часы

BatchUpdate !и запросить процедуру обновления количества

SETCURSOR потом отключить песочные часы

END

END

 

SETDROPID (задать строку, возвращаемую DROPID)

SETDROPID( строка )

SETDROPID Задает значение, возвращаемое процедурой DROPID.

строка Строковая константа или переменная, значение которой возвратит процедура DROPID.

Процедура SETDROPID задает значение, возвращаемое DROPID. Это позволяет процедуре DROPID передавать данные процедуры “потащил-отпустил”. Если процедура “потащил-отпустил” совершается между полями разных Clarion-программ, то передачу данных возможно осуществить, используя данный механизм.

Пример:

Que1 QUEUE

STRING(30)

END

Que2 QUEUE

STRING(30)

END

WinOne WINDOW,AT(0,0,160,400)

LIST,AT(120,0,20,20),USE(?List1),FROM(Que1),DRAGID('List1')

!Можно “потащить”, но нельзя “отпустить”

LIST,AT(120,120,20,20),USE(?List2),FROM(Que2),DROPID('List1')

!Можно “положить” из List1 или окна File Manager системы Window,

!но нельзявзять

END

CODE

OPEN(WinOne)

ACCEPT

CASE EVENT()

OF EVENT:Drag !Если событие - попытка “взять”, то

IF DRAGID() !оценить успех попытки

SETDROPID(Que1) !и подготовить данные для передачи

END

OF EVENT:Drop !Если событие “положить” - успешно, то

Que2 = DROPID() !вернуть из List1 или File Manager то, что “положили”

ADD(Que2) !и добавить в список

END

END

Смотри также: DRAGID, DROPID

 

SETFONT (установить шрифт)

SETFONT( поле , [ начертание ] , [ размер ] , [ цвет ] , [ стиль ] ,[набор символов])

SETFONT( окно , [ начертание ] , [ размер ] , [ цвет ] , [ стиль ] ,[набор символов])

SETFONT Динамически устанавливает экранный шрифт поля или окна.

поле Номер или метка соответствия поля, для которого устанавливается шрифт. Нулевое значение параметра поле соответствует структуре WINDOW.

окно Метка структуры WINDOW, APPLICATION или REPORT, значение указателя-переменной типа &WINDOW, параметра-процедуры типа WINDOW или встроенная переменная TARGET.

начертание Строковая константа или переменная, в которой указано имя шрифта. Если параметр опущен, то используется системный шрифт.

размер Целочисленная константа или переменная, указывающая размер шрифта (в пунктах). Если параметр не указан, то принимается размер системного шрифта.

цвет Целочисленная константа или переменная типа LONG, в трех младших байтах которой указываются значения красной, зеленой и синей компонент цвета шрифта, либо символическое имя значения цвета стандарта Windows. Если параметр не указан, то устанавливается черный цвет.

стиль Целочисленная константа, константное выражение, символическое имя или переменная, определяющие толщину и стиль шрифта. Если параметр опущен, то принимается нормальная толщина шрифта.

набор символов Целочисленная переменная LONG указывающая значение набора символов.

Оператор SETFONT динамически устанавливает шрифт поля, замещая действие ранее указанного атрибута FONT. Если параметр поле равен нулю (0), то SETFONT задает шрифт для всех управляющих полей в окне. Как бы там ни было, это не действует на существующие поля - только на те, которые созданы (CREATEd) после того, как подействует выполнение SETFONT.

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

Параметром начертание можно задать имя любого шрифта зарегистрированного в системе Windows. В файле EQUATES.CLW находятся символические имена значений для стандартных стилей. Значение параметра стиль в диапазоне от 0 до 1000 определяет толщину шрифта. К этому значению можно прибавлять значения для наклона, подчеркивания и перечеркивания текста. Указанные символические имена находятся в файле EQUATES.CLW:

FONT:thin EQUATE(100)

FONT:regular EQUATE(400)

FONT:bold EQUATE(700)

FONT:italic EQUATE(01000H)

FONT:underline EQUATE(02000H)

FONT:strikeout EQUATE(04000H)

Использование в качестве первого параметра параметр окно, позволяет изменить шрифт окна или отчета как перед так и после их открытия. Если эта форма SETFONT используется перед открытием окна или отчета, атрибут FONT окна или отчета игнорируется ПОЛНОСТЬЮ. Вызывая SETFONT перед открытием окна или отчета, необходимо указание всех необходимых параметров шрифта, поскольку все установки шрифта для окна или отчета игнорируются, а не добавляются к параметрам указанным SETFONT.

Вызов функции SETFONT с параметром окно после открытия окна или отчета эквивалентно вызову SETFONT(0,…) с полем в качестве первого параметра, за исключением того, что окно или отчет не могут являться текущим объектом. Кроме того, не открытые окно или отчет не могут быть значением встроенной переменной TARGET. Поэтому вызов

SETFONT (TARGET, ...)

изменяет установки шрифта активного окна в текущем процессе. Если нет активного окна в текущем процессе, то установки шрифта неявно применяются к MDI-окну приложения (если существует), в противном случае просто игнорируется.

Пример:

SETFONT(1,'Arial',14,,FONT:thin+FONT:Italic) ! 14 пункт.,Arial,черный тонкий,italic

SETFONT(QuickWindow,'Arial',14,,FONT:thin+FONT:Italic) ! 14 пункт.,Arial,черный тонкий,italic

! целиком для всего окна

Смотри также: GETFONT

 

SETKEYCHAR (указание кода ASCII)

SETKEYCHAR(keychar)

SETKEYCHAR Устанавливает значение ASCII, возвращаемое процедурой KEYCHAR.

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

SETKEYCHAR устанавливает значение ASCII, возвращаемое процедурой KEYCHAR. Значение не помещается в буфер клавиатуры.

Пример:

SETKEYCHAR(VAL('A')) !Установление процедуры keychar для возвращения символа ‘A’

Смотри также: KEYCHAR

 

SETKEYCODE (назначить код клавиши)

SETKEYCODE(код клавиши)

SETKEYCODE Устанавливает код клавиши, который будет возвращен при вызове процедуры KEYCODE.

код клавиши Целочисленная константа или символическое имя кода клавиши.

Оператор SETKEYCODE устанавливает внутренний код клавиши, который будет возвращен при вызове процедуры KEYCODE. Код клавиши в буфер клавиатуры не заносится.

Пример:

SETKEYCODE(0800h) !Процедура KEYCODE возвратит 0800h

Смотри также: KEYCODE, Кодировка клавиш Clarion

 

SETLAYOUT (установить ориентацию окна)

SETLAYOUT( окно , ориентация )

SETLAYOUT Динамически устанавливает ориентацию окна или отчета.

окно Метка структуры WINDOW, APPLICATION или REPORT, значение указателя-переменной типа &WINDOW, параметра-процедуры типа WINDOW или встроенная переменная TARGET.

ориентация Байтовое значение или переменная указывающая ориентацию окна. Установка значения в ноль (0) устанавливает ориентацию слева направо, установка в единицу (1) – справа налево.

Процедура SETLAYOUT допустима только для окно и отчетов. Она позволяет изменить ориентацию окна или отчета как перед так и после их открытия.

Вызов SETLAYOUT эквивалентен window{PROP:Layout}=n, но немного более эффективен. Не открытые окно или отчет не могут быть значением встроенной переменной TARGET. Поэтому вызов

SETLAYOUT (TARGET, n)

изменяет ориентацию активного открытого окна в текущем процессе. Если нет активного окна в текущем процессе, то установка ориентации неявно применяются к MDI-окну приложения (если существует), в противном случае просто игнорируется.

Пример:

SETLAYOUT(QuickWindow,1) !Установить ориентацию окна справа налево

Смотри также: LAYOUT

 

SETNONULL (установить нефиктивное значение поля)

SETNONULL(поле)

SETNONULL(файл, поле)

SETNONULL Присваивает полю реальное значение (пробельное или нулевое).

поле Метка (включая префикс) поля в структуре FILE. Это может быть структура GROUP или RECORD.

файл Метка файла.

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

Теперь вы можете передавать в SETNONULL файл в качестве первого параметра. Это позволит передать указатели на поля (смотри пример ниже).

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

Пример:

Customer FILE,DRIVER('Clarion'),PRE(Cus) !Объявить структуру файла покупателей

AcctKey KEY(Cus:AcctNumber)

Record RECORD

AcctNumber LONG

OrderNumber LONG

Name STRING(20)

Addr STRING(20)

END

END

Header FILE,DRIVER('Clarion'),PRE(Hea) !Объявить структуру файла заголовков

AcctKey KEY(Hea:AcctNumber)

OrderKey KEY(Hea:OrderNumber)

Record RECORD

AcctNumber LONG

OrderNumber LONG

ShipToName STRING(20)

ShipToAddr STRING(20)

END

END

CODE

OPEN(Header)

OPEN(Customer)

SET(Hea:AcctKey)

LOOP

NEXT(Header)

IF ERRORCODE()

BREAK

END

Cus:AcctNumber = Hea:AcctNumber

GET(Customer,Cus:AcctKey) !Прочитать запись файла покупателей

IF ERRORCODE()

CLEAR(Cus:Record)

END

IF NULL(Hea:ShipToName) OR Hea:ShipToName = Cus:Name !Проверить адрес поставки

Hea:ShipToName = 'Same as Customer Address' !Пометить запись

SETNONULL(Hea:ShipToAddr) !и очистить “адрес поставки”

SETNONULL(Hea:ShipToCSZ)

END

PUT(Header) !Записать обратно запись файла заголовков

END

!Пример 2 – использование параметра файл

SwapNullState PROCEDURE(File F, ANY var)

CODE

IF NULL(f, var)

SETNONULL(f, var)

ELSE

SETNULL(f, var)

END

Смотри также: NULL, SETNULL, SETNULLS, GETNULLS

SETNULL (установить для поля фиктивное значение)

SETNULL(поле)

SETNULL(файл, поле)

SETNULL Назначает полю фиктивное значение.

поле Метка (включая префикс) поля в структуре FILE. Это может быть структура GROUP или RECORD.

файл Метка файла.

Оператор SETNULL присваивает полю в файле данных фиктивное значение. Если поле является структурой GROUP или RECORD, всем компонентам полей присваивается фиктивное значение. Поддержка фиктивных значений в файле данных целиком зависит от используемого файлового драйвера. Перед применением этого оператора файл должен быть открыт.

Теперь вы можете передавать в SETNULL файл в качестве первого параметра. Это позволит передать указатели на поля (смотри пример ниже).

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

Пример:

Customer FILE,DRIVER('Clarion'),PRE(Cus) !Объявить структуру файла покупателей

AcctKey KEY(Cus:AcctNumber)

Record RECORD

AcctNumber LONG

OrderNumber LONG

Name STRING(20)

Addr STRING(20)

CSZ STRING(35)

END

END

Header FILE,DRIVER('Clarion'),PRE(Hea) !Объявить структуру файла заголовков

AcctKey KEY(Hea:AcctNumber)

OrderKey KEY(Hea:OrderNumber)

Record RECORD

AcctNumber LONG

OrderNumber LONG

ShipToName STRING(20)

ShipToAddr STRING(20)

ShipToCSZ STRING(35)

END

END

CODE

OPEN(Header)

OPEN(Customer)

SET(Hea:AcctKey)

LOOP

NEXT(Header)

IF ERRORCODE()

BREAK

END

Cus:AcctNumber = Hea:AcctNumber

GET(Customer,Cus:AcctKey) !Прочитать запись файла покупателей

IF ERRORCODE()

CLEAR(Cus:Record)

END

IF NOT NULL(Hea:ShipToName) AND Hea:ShipToName = Cus:Name !Проверить адрес поставки

SETNULL(Hea:ShipToName) !и присвоить фиктивное значение

SETNULL(Hea:ShipToAddr) ! полю “адрес поставки”

SETNULL(Hea:ShipToCSZ)

END

PUT(Header) !Записать запись файла заголовков

END

!Пример 2 – использование параметра файл

SwapNullState PROCEDURE(File F, ANY var)

CODE

IF NULL(f, var)

SETNONULL(f, var)

ELSE

SETNULL(f, var)

END

Смотри также: NULL, SETNONULL, GETNULLS, SETNULLS

 

SETNULLS(установить фиктивное состояние столбца)

SETNULLS(таблица, фиктивное значение)

SETNULLS Устанавливает фиктивное состояние столбца в таблице.

таблица Метка файла.

фиктивное значение

Фиктивное значение присваиваемое таблице.

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

Выдаваемые сообщения об ошибках:

75 Invalid Column Type Descriptor – Указывает, что переданная строка слишком мала.

80 Function Not Supported (Функция не поддерживается)

Пример:

StorageString STRING(255)

Rec STRING(2048)

CODE

StorageString = GETNULLS(table) !Получить фиктивное состояние таблицы

Rec = table.record !Сохранить буфер записи

! Do Table Processing

Table.Record = Rec !Восстановить буфер записи

SETNULLS(table, StorageString) !Установить фиктивное состояние столбца таблицы

Смотри также: GETNULLS, NULL, SETNONULL

 

SETPATH (изменить текущий диск и каталог)

SETPATH(путь)

SETPATH Изменяет текущий диск и каталог.

путь Строковая константа или метка переменной типа SТRING, CSТRING или PSТRING, содержащей новую спецификацию диска и пути к каталогу.

Оператор SETPATH изменяет текущий диск и текущий каталог. Если параметр диск и путь содержит неправильную спецификацию, то выдается код ошибочной ситуации “Path Not Found” (путь не найден) и текущие диск и каталог не изменяются.

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

Выдаваемые сообщения об ошибках: 03 Path Not Found (путь не найден)

Пример:

SETPATH('C:\LEDGER') !Изменить текущий каталог

SETPATH(UserPath) !Перейти в каталог пользователя

Смотри также: PATH, SHORTPATH, LONGPATH, DIRECTORY

 

SETPENCOLOR (установить цвет линий)

SETPENCOLOR( [цвет] )

SETPENCOLOR Устанавливает цвет текущего пера.

цвет Целочисленная константа типа LONG ULONG, символическое имя, переменная, в трех младших байтах (байты 0,1 и 2) которых находятся красная, зеленая и синяя компоненты цвета или символическое имя для значения стандартного цвета Windows. Если параметр опущен, то выбирается цвет, установленный системой Windows для вывода текста в окно.

Процедура SETPENCOLOR устанавливает для всех графических процедур цвет текущего пера. По умолчанию - выбирается цвет, установленный системой Windows для вывода текста в окно.

Для каждого окна можно установить свой цвет текущего пера. Поэтому, для согласованного применения в нескольких окнах одного и того же пера (цвет которого устанавливается не по умолчанию) нужно в каждом окне произвести установку параметра цвета пера, используя оператор SETPENCOLOR.

Пример:

MDIChild WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!экранные объекты

END

CODE

OPEN(MDIChild)

SETPENCOLOR(000000FFh) !Установить синий цвет пера

ROUNDBOX(100,50,100,50,00FF0000h) !Красный прямоугольник со скругленными углами

!с синим контуром

Смотри также: PENCOLOR

 

SETPENSTYLE (установить тип линий)

SETPENSTYLE( [стиль] )

SETPENSTYLE Устанавливает тип линии для текущего пера.

стиль Целочисленная константа, символическое имя, переменная для указания типа линии. Если параметр опущен, то устанавливаемый тип - сплошная линия.

Процедура SETPENSTYLE устанавливает для всех графических процедур тип линии, вычерчиваемой текущим пером. Тип по умолчанию - сплошная линия.

Для каждого окна можно установить свой тип линии. Поэтому, для согласованного применения в нескольких окнах одного и того же пера (тип линии которого устанавливается не по умолчанию) нужно в каждом окне произвести установку параметра типа линии, используя оператор SETPENSTYLE.

В файле EQUATES.CLW есть операторы EQUATE для типов линий. Ниже приведена их представительная выборка (полный список смотри в EQUATES.CLW):

PEN:solid Сплошная линия

PEN:dash Штриховая линия

PEN:dot Пунктирная линия

PEN:dashdot Штрих-пунктирная линия

Пример:

MDIChild WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!экранные объекты

END

CODE

OPEN(MDIChild)

SETPENCOLOR(000000FFh) !Выбрать голубое перо

SETPENSTYLE(PEN:dash) !Выбрать пунктирную линию

ROUNDBOX(100,50,100,50,00FF0000h) !Красный прямоугольник со скругленными углами

!с синим пунктирным контуром

Смотри также: PENSTYLE

 

SETPENWIDTH (установить толщину линий)

SETPENWIDTH( [толщина] )

SETPENWIDTH Устанавливает толщину линии текущего пера.

толщина Целочисленное выражение, определяющее толщину линии. Толщина указывается в условных единицах при условии, что единица измерения не была переустановлена одним из атрибутов отчета THOUS, MM или POINTS. Если параметр опущен, то толщина (один пиксел) устанавливается по умолчанию.

Процедура SETPENWIDTH устанавливает для всех графических процедур толщину вычерчиваемой линии. Толщина по умолчанию - один пиксел; такая же толщина устанавливается когда параметр толщина равен 0.

Для каждого окна можно установить свою толщину линии. Поэтому, для согласованного применения в нескольких окнах одного и того же пера (толщина линии которого устанавливается не по умолчанию) нужно в каждом окне произвести установку параметра толщины линии, используя оператор SETPENWIDTH.

Пример:

MDIChild WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!window controls

END

CODE

OPEN(MDIChild)

SETPENCOLOR(000000FFh) !Выбрать голубое перо

SETPENSTYLE(PEN:dash) !Выбрать пунктирную линию

SETPENWIDTH(2) !толщиной в две условных единицы

BOX(100,50,100,50,00FF0000h) !Красный прямоугольник с тонким пунктирным контуром синего цвета

Смотри также: PENWIDTH

 

SETPOSITION (определить новое положение поля)

SETPOSITION( поле [,x ] [, y ] [, ширина ] [, высота ] )

SETPOSITION Динамически устанавливает положение и размер поля или окон APPLICATION, WINDOW.

поле Номер или метка соответствия поля, которое подвергается воздействию. Если параметр поле – нулевой (0), то воздействию подвергается окно.

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

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

ширина Целочисленная константа, выражение или переменная для указания ширины. Если параметр опущен, то ширина не изменяется.

высота Целочисленная константа, выражение или переменная для указания высоты. Если параметр опущен, то высота не изменяется.

Оператор SETPOSITION динамически устанавливает положение и размер управляющего поля или окон APPLICATION, WINDOW. Если какой-либо из параметров не указан, то соответствующее значение не изменяется.

Значения параметров x, y, ширина и высота указаны в условных единицах измерения. За условные единицы принимаются одна четверть усредненной ширины символа и одна восьмая его усредненной высоты. Ясно, что величина условной единицы зависит от установленного для окна шрифта по умолчанию. За основу измерений берется либо шрифт, указанный FONT-атрибутом окна, либо системный шрифт по умолчанию.

Использование оператора SETPOSITION приводит к более “плавному” изменению внешнего вида поля по сравнению с использованием выражения для свойства при изменении значения параметра атрибута AT. Причина в том, что SETPOSITION изменяет сразу все параметры. Имена свойств должны изменять каждый параметр индивидуально. Поскольку индивидуальное изменение параметра тотчас же ощущается зрительно, то это приводит к “скачкообразным” изменениям поля.

Пример:

CREATE(?Code4Entry,CREATE:entry,?Ctl:Code) !Создать поле

?Code4Entry{PROP:use} = 'Code4Entry' !Установить USE-переменную

?Code4Entry{PROP:text} = '@s10' !Установить шаблон ввода

GETPOSITION(?Ctl:Code,X,Y,Width,Height) !Считать положение Ctl:Code

SETPOSITION(?Code4Entry,X+Width+40,Y) !Сдвинуть вправо на 40

UNHIDE(?Code4Entry) !Вывести новое поле на экран

Смотри также: GETPOSITION, PROP:Pixels

 

SETTARGET (сделать окно или отчет текущим)

SETTARGET( [| объект | ] )

| , процесс |

| процесс , связка |

SETTARGET Назначает окно (или отчет) текущим для отображения графических образов и для операторов взаимодействия с окнами.

объект Метка структур APPLICATION, WINDOW, REPORT или указатель на любую из этих структур. Исполнение процесса всегда выводится из объекта, и никакие специально указанные параметры процесса не учитываются. Если параметр опущен, то используется последнее открытое и еще не закрытое окно указанного процесса.

процесс Номер исполняемого процесса, главная процедура которого содержит окно, которое будет установлено как объект. Если параметр опущен, то исполнение процесса выводится из понятия объекта.

связка Номер управляющего поля или метка соответствия полей REPORT (или управляющего параметра IMAGE в окне target), который служит для рисования графических примитивов (ARC, CHORD, и т.д.).

Процедура SETTARGET устанавливает структуру объект на который воздействуют установки свойств в процессе исполнения программы, а также объект воздействия операторов CREATE, SETPOSITION, GETPOSITION, SETFONT, GETFONT, DISABLE, HIDE, CONTENTS, DISPLAY, ERASE и UPDATE. Совместное использование этих операторов с процедурой SETTARGET позволяет вносить изменения в изображение верхнего окна любого процесса. SETTARGET указывает структуру объекта для рисования с использованием примитивов графических процедур (ARC, CHORD, и т.д.).

Процедура SETTARGET устанавливает значение встроенной переменной TARGET (автоматически устанавливается при открытии окна), которая может быть использована операторами программы когда нужно указать метку текущего окна или отчета. Исполнение SETTARGET не приводит к запуску другого процесса, не происходит также подмены обработчика Windows-событий - ACCEPT-цикла. Процедура SETTARGET без параметров устанавливает в качестве объекта окно процесса, ACCEPT-цикл которого исполняется в данный момент.

Поскольку структура данных REPORT не может быть объектом по умолчанию, то SETTARGET должна быть выполнена до применения операторов вывода графики в окно REPORT. Чтобы показать графику в REPORT (или на IMAGE в окне) как отдельную связку, вы должны указать связку вторым параметром.

SETTARGET

Устанавливает объект в главное окно исполняемого процесса с активным в настоящий момент циклом ACCEPT.

SETTARGET(объект)

Устанавливает объект в указанное окно или отчет. Исполняемый процесс выводится из объекта.

SETTARGET(объект,процесс)

Устанавливает TARGET в указанное окно или отчет. Исполняемый процесс выводится из параметра объект и любой специально указанный параметр процесса игнорируется.

SETTARGET( , процесс)

Устанавливает TARGET в главное окно указанный исполняемый процесс.

SETTARGET(процесс, связка)

Устанавливает TARGET в указанное окно или отчет, и рисует графические примитивы в указанной связке (группе отчетов или управляющем параметре IMAGE).

Пример:

Report REPORT

HEADER,USE(?PageHeader)

END

Detail DETAIL

END

END

CODE

OPEN(Report)

SETTARGET(Report,?PageHeader) !Сделать отчет текущим объектом

TARGET{PROP:Landscape} = 1 !установить альбомный режим печати

ARC(100,50,100,50,0,900) !Нарисовать 90 градусную дугу от 3 до 12 часов, как

!как правую верхнюю часть эллипса

!на связке верхнего колонтитула страницы

SETTARGET !Вернуться к активному окну

Смотри также: START, THREAD, NOTIFY

 

SETTODAY (установить системную дату)

SETTODAY(дата)

SETTODAY Устанавливает системную дату.

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

Оператор SЕТTODAY устанавливает дату в операционной системе.

Пример:

SETTODAY(TODAY() + 1) !Установить дату на день вперед

Смотри также: Стандартная дата, DAY, MONTH, YEAR, TODAY, DATE

 

SHORTPATH (возвращает короткое имя файла)

SHORTPATH( [ длинное имя ] )

SHORTPATH Возвращает подходящее короткое имя файла для данного длинного имени.

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

Процедура SHORTPATH возвращает стандартное короткое имя файла, допустимое операционной системой, для данного длинного имени. Файл, заданный в длинном имени, должен существовать на диске. SHORTPATH теперь может использоваться в оценивании выражений оператором EVALUATE во время работы приложения и в шаблонах.

 

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

Пример:

MyFile STRING(64)

CODE

MyFile = SHORTPATH('c:\program files\my text file.txt') !c:\progra~1\mytext~1.txt

Смотри также: SETPATH, LONGPATH, PATH, DIRECTORY

 

SHOW (отобразить на экран)

SHOW( x ,y ,строка )

SHOW Выводит строку в текущее окно или документ.

x Целочисленное выражение для указания горизонтального положения начальной точки. Задается в условных единицах.

y Целочисленное выражение для указания вертикального положения начальной точки. Задается в условных единицах.

строка Строковая константа, переменная или выражение, содержащие отформатированный текст, предназначенный для вывода его в текущее окно или в документ.

SHOW выводит строку текста в текущее окно или в документ. Используемый при этом шрифт - текущий шрифт для окна или для документа.

 

Пример:

MDIChild WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!экранные объекты

END

CODE

OPEN(MDIChild)

DISPLAY

SHOW(100,100,FORMAT(TODAY(),@D3)) !Отобразить дату

SHOW(20,20,'Press Any Key to Continue') !Вывести сообщение

Смотри также: Текущий объект

 

SHUTDOWN (включить процедуру завершения)

SHUTDOWN([процедура])

SHUTDOWN Установить процедуру, к которой происходит обращение при завершении программы

процедура Метка оператора PROCEDURE. Если этот параметр опущен, то процесс завершения программы пользовательской процедурой не инициируется.

Оператор SHUTDOWN устанавливает процедуру, к которой происходит обращение при завершении программы. Процедура, установленная оператором SHUTDOWN, вызывается при нормальном завершении или при аварийном останове программы. Иногда при аварийном останове невозможно выполнить такую процедуру в зависимости от состояния системных ресурсов в момент аварии. Не вызывается эта процедура и при перезагрузке компьютера или сбое электропитания. Точно такого же эффекта как указанием процедуры в операторе SHUTDOWN, можно более безболезненно добиться, просто вызывая эту процедуру по событию EVENT:CloseDown в приложении.

Пример:

SHUTDOWN(CloseSys) !Установить CloseSys в качестве завершающей процедуры

Смотри также: HALT, RETURN

 

SIN (синус)

SIN(радиан)

SIN Возвращает синус.

радианы Числовая константа, переменная или выражение представляющая угол в радианах. Пи – это константа, которая представляет собой отношение длины окружности к радиусу круга. Здесь 2π радиан (или 360 градусов) в круге.

Процедура SIN возвращает значение тригонометрического синуса угла, измеренного в радианах. Синус угла представляет собой отношение длины противолежащего катета к длине гипотенузы.

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

Пример:

PI EQUATE(3.1415926535898) !Значение PI

Rad2Deg EQUATE(57.295779513082) !Число градусов в радиане

Deg2Rad EQUATE(0.0174532925199) !Число радиан в градусе

CODE

Angle = 45 * Deg2Rad !Преобразовать 45 градусов в радианы

SineAngle = SIN(Angle) !Получить синус угла в 45 градусов

Смотри также: TAN, ATAN, ASIN, COS, ACOS

 

SKIP (пропустить запись при последовательной обработке)

SKIP( структура, число )

SKIP Пропускает запись при последовательной обработке файла.

структура Метка объявления структуры FILE или VIEW.

число Числовая константа или переменная. Параметр число задает число записей, которое следует пропустить. Если значение числа положительное, то записи пропускаются в “прямой” последовательности (как если бы выполнялся оператор NEXT). Если же число отрицательное, то записи пропускаются в “обратной” последовательности (как если бы выполнялся оператор PREVIOUS).

Оператор SKIP используется для того, чтобы в процессе последовательной обработки файла пропускать записи. Этот оператор пропускает записи в последовательности, заданной оператором SET, изменяя указатель текущий записи на указанное число записей. Для пропуска записей оператор SKIP более эффективен, чем NEXT или PREVIOUS, потому что он не помещает данные из файла в буфер структуры RECORD. Если при пропуске записей оператором SKIP происходит выход за начало или конец файла, то функции EOF() или BOF() возвращают значение “истина”. Если последовательность обработки файла предварительно не была установлена оператором SET, то оператор SKIP выдает сообщение об ошибке 33 (Запись не доступна).

Выдаваемые сообщения об ошибках:

33 Record Not Available (Запись не доступна)

37 File Not Open (Файл не открыт)

Пример:

ViewOrder VIEW(Customer) !Объявить структуру VIEW

PROJECT(Cus:AcctNumber,Cus:Name)

JOIN(Hea:AcctKey,Cus:AcctNumber) !Соединить с файлом заголовков

PROJECT(Hea:OrderNumber)

JOIN(Dtl:OrderKey,Hea:OrderNumber) !Соединить с файлом накладных

PROJECT(Det:Item,Det:Quantity)

JOIN(Pro:ItemKey,Dtl:Item) !Соединить с файлом товаров

PROJECT(Pro:Description,Pro:Price)

END

END

END

END

SavOrderNo LONG

CODE

OPEN(Customer,22h)

OPEN((Header,22h)

OPEN(Detail,22h)

OPEN(Product,22h)

SET(Cus:AcctKey)

OPEN(ViewOrder) !Начало файла в последовательности ключа

LOOP !Обработать все записи

NEXT(ViewOrder) !прочитать запись

IF ERRORCODE() THEN BREAK END

IF Hea:OrderNumber <> SavOrderNo !проверить на первый элемент

!в последовательности

IF Hea:OrderStatus = 'Cancel' !Это не отмененный заказ?

SKIP(Items,Vew:ItemCount-1) !пропустить остаток элементов

CYCLE !! и обработать следующий заказ

END !Конец структур IF

END !Конец структур IF

DO ItemProcess !Обработать элемент

SavInvNo = Hea:OrderNUmber !Запомнить номер заказа

END !Конец цикла

Смотри также: SET, RESET, NEXT, PREVIOUS

 

SORT (упорядочить очередь)

SORT(очередь, | [+]ключ,...,[-]ключ] | )

| имя |

| функция |

SORT Упорядочивает элементы очереди.

очередь Метка структуры QUEUE или метка переданного параметра, представляющего собой структуру QUEUE.

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

ключ Метка поля, объявленного внутри структуры QUEUE. Если у очереди есть атрибут PRE, то параметр ключ должен включать в себя и префикс. Не может быть указателем-переменной.

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

функция Метка функции содержащая два параметра *GROUP или поименованной GROUP, передаваемой по адресу, и возвращающая значение типа SIGNED. Оба параметра должны иметь одинаковый тип параметров и не должны быть опущены. В прототипах не должно быть атрибутов RAW, C и PASCAL. Смотри Дополнительные сведения об очередях.

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

SORT(очередь, ключ)

Переупорядочивает очередь в последовательности, заданной параметром ключ. Может использоваться несколько параметров ключ (до 16-ти), разделенных запятыми, с необязательным знаком “+” или “-” спереди, означающим возрастающую или убывающую последовательность сортировки.

SORT(очередь, имя)

Переупорядочивает очередь в последовательности, заданной строкой имя. Строка имя должна содержать значения атрибутов NAME полей из структуры QUEUE, разделенных запятыми с необязательным знаком “+” или “-” спереди, означающим возрастающую или убывающую последовательность сортировки.

Выдаваемые сообщения об ошибках:

08 Insufficient Memory (Недостаточно памяти)

75 Invalid Field Type Descriptor (Неправильный описатель типа поля)

Пример:

Location QUEUE,PRE(Loc)

Name STRING(20),NAME('FirstField')

City STRING(10),NAME('SecondField')

State STRING(2)

Zip DECIMAL(5,0)

END

CODE

SORT(Location,Loc:State,Loc:City,Loc:Zip) !Сортировать по Zip коду внутри города в штате

SORT(Location,+Loc:State,-Loc:Zip) !Сортировать по убыванию Zip кода в штате

SORT(Location,'FirstField,-SecondField') !Сортировать по убыванию города внутри имени

**********************

!Пример использования SORT с параметром FUNCTION

PROGRAM

MAP

CaseInsensitive(*GROUP A, *GROUP B),SIGNED

end

Q QUEUE

Val STRING(5)

END

Window WINDOW('Test Sort'),AT(,,116,224),FONT('MS SansSerif',8,,FONT:regular),IMM,SYSTEM,GRAY,AUTO

BUTTON('Sort Case Sensitive'),AT(8,3,95,14),USE(?SortCase),LEFT,DEFAULT

BUTTON('Sort Case INSensitive'),AT(8,20,95,14),USE(?SortNoCase),LEFT

LIST,AT(6,37,101,179),USE(?List1),FORMAT('7L(2)|M~Val~@s5@'),FROM(Q)

END

CODE

Q.Val = 'aaaaa'; Add(Q)

Q.Val = 'AAAAA'; Add(Q)

Q.Val = 'ddddd'; Add(Q)

Q.Val = 'DDDDD'; Add(Q)

Q.Val = 'EEEEE'; Add(Q)

Q.Val = 'eeeee'; Add(Q)

Q.Val = 'qqqqq'; Add(Q)

Q.Val = 'QQQQQ'; Add(Q)

Q.Val = 'zzzzz'; Add(Q)

Q.Val = 'ZZZZZ'; Add(Q)

Q.Val = 'ggggg'; Add(Q)

Q.Val = 'GGGGG'; Add(Q)

OPEN(Window)

ACCEPT

CASE ACCEPTED()

OF ?SortCase ; SORT(Q, Q.Val)

OF ?SortNoCase ; SORT(Q, CaseInsensitive)

END

END

 

CaseInsensitive PROCEDURE(*GROUP A, *GROUP B)!,SIGNED

CODE

IF UPPER(A) = UPPER(B) THEN RETURN 0

ELSIF UPPER(A) > UPPER(B) THEN RETURN 1

ELSE RETURN -1

END

Смотри также: ADD, GET, PUT

 

SQL (использовать код SQL)

SQL(sql выражение)

SQL Определяет соответствующее SQL выражение, используемое для воздействия на записи в виртуальном файле.

sql выражение Строковое выражение содержащее допустимый SQL код.

SQL определяет допустимый оператор SQL для применения окружающих операторов FILTER, ORDER, JOIN, PROP:FILTER, PROP:ORDER или PROP:JOINEXPRESSION. Все что указано в sql выражении трактуется как чистый SQL код.

С оператором SQL, вы теперь можете использовать истинный SQL код, как критерий фильтра внутри IDE интерфейса. Например: В приглашении Record Filter введите - SQL(‘ваш SQL код фильтра’).

При использовании оператора SQL в виртуальном файле вы должны быть осведомлены о том, как генерируется оператор SELECT. По умолчанию, обработчик виртуального файла устанавливает псевдоним SQL для каждого файла во VIEW. Драйвер SQL генерирует оператор SQL, который использует псевдоним “A” для первого файла во VIEW, “B” – для второго и т.д. Если вы желаете использовать SQL, ваш фильтр должен быть совместим с предыдущими сгенерированными операторами SQL – т.е. вам нужно использовать A/B/и т.д. как файловые префиксы. Если это невозможно, вы можете использовать PROP:Alias для изменения этого поведения. Использование конфигурации по умолчанию для следующих команд SQL() в фильтре недопустимо, необходимо назначить псевдонимы перед открытием VIEW:

SQL(dbo.Employees.EmployeeID > 0)

! Неправильно – точка недопустимый символ в метке псевдонима

SQL(Employees.EmployeeID > 0)

! Используйте Employee{PROP:Alias} = '' или Employee{PROP:Alias} = 'Employees' перед открытием VIEW

SQL(Emp2:EmployeeID > 0) !Это недопустимый оператор SQL

Использование умолчальной конфигурации и подразумевая, что EmployeeID - поле первой таблицы в виртуальном файле, то эти операторы – допустимы.

SQL(A.EmployeeID > 0)

SQL(EmployeeID > 0)

Пример:

OrdFile FILE,DRIVER('ODBC'),PRE(Ord)

PrimaryKey KEY(Ord:OrdID),PRIMARY

Record RECORD

OrdID LONG

Customer LONG

PurchaseDate DATE

Info CSTRING(61)

END

END

MyView VIEW(AFile), FILTER('Ord:PurchaseDate = TODAY() AND ' & |

'SQL(A.Info LIKE "%Must deliver today%")'), ORDER('SQL(A.Customer)')

END

MyView{PROP:Filter} =

'SQL(A.Customer IN (SELECT CustID FROM Customers WHERE BadCustomer = 0))'

!Для шаблонов ABC генерируется код: SQL(ProductID > 5) введя в строку Record Filter

BRW1.SetFilter('(SQL(ProductID > 5))')

!Для шаблонов Clarion генерируется код:

BRW1::View:Browse{Prop:Filter} = 'SQL(ProductID > 5)'

!также допустимо смешивание кода SQL и Clarion указанного в строке Record Filter

! SQL(SupplierID > 7) AND SQL(ProductID > 5)

!или

! Pro:SupplierID > 7 AND SQL(ProductID > 5) - или они могут поменяться как

! SQL(ProductID > 5) AND Pro:SupplierID > 7

 

SQLCALLBACK (регистрировать или разрегистрировать SQLCallBackInterface)

SQLCALLBACK(структура, SQLCallBackInterface, [флаг])

SQLCALLBACK Регистрирует или разрегистрирует SQLCallBackInterface.

структура Метка FILE или VIEW.

SQLCallBackInterface

Метка интерфейса который реализует SQLCallBackInterface. Метод SQLCallbackInterface (исполняемый код) вызываемый перед оператором SQL передается на сервер SQL для выполнения.

флаг Целочисленная константа, переменная, метка соответствия или выражения которые указывают разрегистрировать или нет интерфейс ассоциированный с файлом или VIEW. Значение единица (1 или истина) разрегистрирует интерфейс. Если опущен, интерфейс регистрируется со структурой.

Метод SQLCallback регистрирует интерфейс сервера с указанной структурой. Методы зарегистрированного интерфейса вызываются всякий раз когда выполняется операция с файлом. Возможно зарегистрировать несколько интерфейсов со структурой.

Чтобы разрегистрировать интерфейс установите флаг в ИСТИНУ. Любые интерфейсы должны быть разрегистрированы перед удалением объекта, реализующий интерфейс.

Реализация: Эта функция поддерживается только драйверами SQL.

Пример:

PROGRAM

MAP

END

INCLUDE ('FILECB.INC'),ONCE

!Файл данных

People FILE,DRIVER('TOPSPEED'),PRE(PEO),CREATE,BINDABLE,THREAD

KeyId KEY(PEO:Id),NOCASE,OPT

KeyLastName KEY(PEO:LastName),DUP,NOCASE

Record RECORD,PRE()

Id LONG

FirstName STRING(30)

LastName STRING(30)

Gender LONG

END

END

!Файл данных

SQLFile FILE,DRIVER('MSSQL'),OWNER('(local),clarion,sa,;'),NAME('sptesttable')

Record RECORD

Id LONG

END

END

!Лог-файл

LogFile FILE,DRIVER('BASIC','/ALWAYSQUOTE=OFF /COMMA=1,1'),CREATE,NAME('logfile.txt')

Record RECORD

Operation STRING(200)

END

END

!Реализация FileCallback

FCB CLASS,IMPLEMENTS(FileCallBackInterface),IMPLEMENTS(SQLCallBackInterface)

END

CODE

CALLBACK(People,FCB.FileCallBackInterface) !Регистрировать интерфейс

SQLCALLBACK(SQLFile,FCB.SQLCallBackInterface) !Регистрировать интерфейс

CREATE(Logfile) !Создать лог-файл

OPEN(Logfile) !Открыть его

OPEN(People) !Открыть файл данных

SET(PEO:KeyId, PEO:KeyID) !Встать на указанное место

LOOP !и пройти его

NEXT(People) !пока есть данные

IF ERRORCODE() THEN BREAK END !конец файла

END

CLOSE(People) !Закрыть файл данных

SQLFile{PROP:SQL} = 'CREATE TABLE sptesttable (c INT)' !Создать таблицу SQL

OPEN(SQLFile) !Открыть таблицу SQL

SQLFile.Id=5

ADD(SQLFile) !Модифицировать таблицу SQL

SQLFile.Id=7

ADD(SQLFile) !Модифицировать таблицу SQL

SQLFile.Id=8

ADD(SQLFile) !Модифицировать таблицу SQL

CLOSE(SQLFile) !Закрыть SQL таблицу

CALLBACK(People,FCB.FileCallBackInterface, TRUE) !Разрегистрировать интерфейс

SQLCALLBACK(SQLFile,FCB.SQLCallBackInterface, TRUE) !Разрегистрировать интерфейс

!Этот метод вызывается перед каждой операцией с файлом данных. Лог-файл модифицируется

!с каждой выполняемой файловой операцией.

FCB.FileCallBackInterface.FunctionCalled |

PROCEDURE(SIGNED opCode, *Params Parameters, *CSTRING ErrCode, *CSTRING ErrMsg)

p LIKE(Params)

CODE

p = Parameters

CASE opCode

OF DriverOp:ADD

logFile.Operation = 'ADD(f)'

OF DriverOp:APPEND

logFile.Operation = 'APPEND(f)'

OF DriverOp:CLOSE

logFile.Operation = 'CLOSE(f)'

OF DriverOp:COPY

logFile.Operation = 'COPY(f,'''&CLIP(Parameters.Text)&''')'

OF DriverOp:CREATE

logFile.Operation = 'CREATE(f)'

OF DriverOp:DELETE

logFile.Operation = 'DELETE(f)'

OF DriverOp:NEXT

logFile.Operation = 'NEXT(f)'

OF DriverOp:OPEN

logFile.Operation = 'OPEN(f,'&Parameters.openMode&')'

OF DriverOp:PUT

logFile.Operation = 'PUT(f)'

OF DriverOp:SETkeykey

logFile.Operation = 'SET(k,k)'

END

ADD(logFile)

RETURN TRUE

!Этот метод вызывается после каждой операцией с файлом данных. Он просто возвращает ИСТИНУ !в соответствии с правилами FileCallBackInterface.

FCB.FileCallBackInterface.FunctionDone |

PROCEDURE(SIGNED opCode, Params Parameters, *CSTRING ErrCode, *CSTRING ErrMsg)

CODE

RETURN TRUE

!Этот метод вызывается только перед оперетором SQL передаваемым на сервер SQL

!для выполнения

FCB.SQLCallBackInterface.ExecutingCode |

PROCEDURE(CONST *CSTRING inStr, *BYTE Err, *CSTRING ErrCode, *CSTRING ErrMsg)

CODE

Err = FALSE

RETURN inStrPUT_re_write_record

 

SQRT (квадратный корень)

SQRT(выражение)

SQRT Вычисляет квадратный корень.

выражение Числовая константа, переменная или выражение. Если значение выражения меньше нуля, то процедура возвращает 0.

Процедура SQRТ выдает значение квадратного корня выражения. Если X представляет любое положительное действительное число, то квадратный корень от X - это число, которое при умножении само на себя дает в результате X.

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

Пример:

Length = SQRT(X^2 + Y^2) !Найти расстояние от точки 0,0 до X,Y (теорема Пифагора)

 

START (возвращает новый процесс)

START(процедура [, стек ] [, передаваемое значение ] )

START Начинает новый исполняемый процесс.

процедура Метка первой PROCEDURE вызова нового процесса. Описание процедуры не должно иметь входных параметров.

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

передаваемое значение

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

Процедура START начинает новый процесс посредством вызова процедуры и возвращает номер присвоенный этому новому процессу. Номер процесса используется процедурами (такими как SETTARGET) при их выполнении в других процессах. Для одной программы максимально доступное число исполняемых процессов теоретически бесконечно. Тем не менее, слово “бесконечно” означает, что число лимитировано не выполняемыми библиотеками Clarion, а установками окружения операционной системы, т.е. лимитом может быть количество доступной виртуальной памяти или числом запущенных процессов в системе или ограничением числа окно (включая оконные объекты) открытым одновременно в одном процессе и т.д.

Выполнение кода в последовательности запуска немедленно продлевается следующим за START выражением и длится, пока выражение ACCEPT не будет выполнено. Как только в последовательности запуска выполняется ACCEPT, запущенная процедура начинает исполнение своего кода в новой процессе, сохраняя контроль над ней до тех пор, пока не будет выполнено ACCEPT.

Для "безоконных" процессов START должен следовать сразу за RESUME.

Процедура может быть определена (прототипирована) для получения до трех параметров STRING или GROUP (обрабатываемых по значению), которые не могут быть пропущены. Значения, которые будут обработаны процедурой, перечисляются как параметры, передаваемые значение для выражения START, а не в списке параметров, относящемся к процедуре в выражении START. Такая процедура не может быть перегружаемой.

Для любой программы первым процессом считается код главной программы; номер такого процесса всегда равен 1. Таким образом, первый раз вызываемая процедура START возвращает наименьший номер - 2. Возвращаемый номер 0 всегда означает ошибку открытия процесса. Такое возможно либо при недостаточном для процесса объеме памяти, либо при попытке начать новый процесс когда система - модальная.

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

Пример:

MAP

NewProc1 PROCEDURE

NewProc2 PROCEDURE(STRING)

NewProc3 PROCEDURE(STRING,STRING)

NewProc4 PROCEDURE(STRING,STRING,STRING)

END

MainWin APPLICATION('My Application'),SYSTEM,MAX,ICON('MyIcon.ICO'),STATUS |

,HVSCROLL,RESIZE

MENUBAR

MENU('&File'),USE(?FileMenu)

ITEM('Selection &1...'),USE(?MenuSelection1)

ITEM('Selection &2...'),USE(?MenuSelection2)

ITEM('Selection &3...'),USE(?MenuSelection3)

ITEM('Selection &4...'),USE(?MenuSelection4)

ITEM('E&xit'),USE(?Exit)

END

END

END

SaveThread1 LONG !Объявление переменных сохранения номера процесса

SaveThread2 LONG

SaveThread3 LONG

SaveThread4 LONG

GroupName GROUP

F1 STRING(30)

F2 LONG

END

CODE

OPEN(MainWin) !Открытие ПРИЛОЖЕНИЯ

ACCEPT

CASE ACCEPTED()

OF ?MenuSelection1

!Начало процесса со стеком в 35К

SaveThread1 = START(NewProc1,35000)

OF ?MenuSelection2

!Начало процесса, обработка 1-ой части

SaveThread2 = START(NewProc2,35000,GroupName)

OF ?MenuSelection3

!Начало процесса, обработка 2-ой части

SaveThread3 = START(NewProc3,35000,'X','21')

OF ?MenuSelection4

!Начать новый процесс

SaveThread4 = START(NewProc4,35000,'X','21',GroupName)

OF ?Exit

RETURN

END

END

NewProc2 PROCEDURE(MyGroup)

LocalGroup GROUP(GroupName) !Объявление локальной группы такой же,

!как обработанная группа

END

CODE

LocalGroup = MyGroup !Получение обработанных данных

Смотри также: ACCEPT, THREAD, SETTARGET, POST, RESUME.

 

STATUS (получить состояние файла или окна/отчета)

STATUS(| файл |)

| окно |

STATUS Возвращает текущее состояние файла, окна или отчета.

файл Метка оператора FILE.

окно Метка структуры WINDOW, APPLICATION или REPORT или допустимой встроенной переменной TARGET, PRINTER или SYSTEM.

Если файл не открыт, процедура возвращает ноль (0), а если открыт, то она возвращает режим доступа к файлу. Если режим доступа на самом деле ноль (Только чтение/Доступ всем), то возвращается 40h (только чтение/нет запрета) см. оператор OPEN.

STATUS может быть также использован для проверки состояния структур WINDOW или REPORT. Если переданное окно или отчет существует и открыт, STATUS возвращает ноль (0). Если окно или отчет существует, но не открыт, то STATUS возвращает единицу (1). Если же переданный параметр не является допустимой структурой окна или отчета, STATUS возвращает два (2).

Чтобы упростить возвращаемые результаты при вызове STATUS(WINDOW), следующие объявления были добавлены в файл EQUATES.CLW:

WINDOW:OK EQUATE(0)

WINDOW:NotOpened EQUATE(1)

WINDOW:BadWindow EQUATE(2)

Встроенные переменные TARGET, PRINTER и SYSTEM могут быть переданы в качестве параметров в STATUS(WINDOW). Функция всегда возвращает WINDOW:OK если параметром является PRINTER или SYSTEM.

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

Пример:

IF STATUS(DataFile) % 16 = 0 !Открыто в режиме “только чтение”?

RETURN !выйти

ELSE !иначе

EXECUTE DiskAction !Записать на диск

ADD(DataFile)

PUT(DataFile)

DELETE(DataFile)

END

END

CASE STATUS(PassedLabel) !Проверить передаваемый параметр

OF WINDOW:OK !если допустимое окно открыто

CYCLE !продолжить

OF WINDOW:NotOpened !Если допустимое окно, но не открыто

OPEN(PassedLabel) !открыть

OF WINDOW:BadWindow !Недопустимое окно?

MESSAGE('Invalid Window','Note:') !выйти из процедуры

RETURN

END

Смотри также: OPEN, EXISTS

 

STOP (приостановить выполнение программы)

STOP( [ сообщение ] )

STOP Приостановить выполнение программы и раскрыть окно с сообщением.

сообщение Необязательное строковое выражение (до 64 Кбайт), которое выводится в окне сообщения.

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

Пример:

PswdScreen WINDOW

STRING(' Please Enter the Password '),AT(5,5)

ENTRY(@10),AT(20,5),USE(Password),PASSWORD

END

CODE

OPEN(PswdScreen) !Вывести запрос на ввод пароля

ACCEPT !и ввести его с клавиатуры

CASE ACCEPTED

OF ?Password)

IF Password <> 'PayMe$moRe' !Пароль верен?

STOP('Incorrect Password Entered -- Access Denied -- Retry?')

X# += 1

IF X# > 3 !Дать 3 попытки

HALT(0,'Incorrect password') !Отвергнуть пользователя

END

END

END

END

Смотри также: HALT

 

STREAM (включить буферизацию)

STREAM(файл)

STREAM Выключает автоматический сброс буферов на диск.

файл Метка структуры FILE.

Некоторые файловые системы записывают буферы операционной системы при каждой операции записи в файл сохраняя файл “логически закрытым” (например, драйвера Clarion и TopSpeed делают это по умолчанию). Оператор STREAM выключает этот механизм автоматической записи буферов. Буферизация выключается при закрытии файла, когда буферы автоматически записываются на диск, или при выполнении оператора FLUSH.

STREAM и FLUSH на самом деле однопользовательский тип пакетной обработки, но вы можете использовать их в сетевом окружении. В некоторых файловых системах при открытии файла для многопользовательского доступа STREAM и FLUSH просто игнорируются, в то время как в других системах возможно создание “тупиковой” ситуации между рабочими станциями при модификации файла несколькими пользователями. LOGOUT выполняет аналогичную операцию в многопользовательских средах и намного безопаснее.

Поддержка этого оператора зависит от файловой системы и описывается в документации по соответствующему файловому драйверу.

Пример:

STREAM(History) !Использовать буферизацию DOS

SET(Current) !Встать на начало файла Current

LOOP

NEXT(Current)

IF ERRORCODE() THEN BREAK END

His:Record = Cur:Record

ADD(History)

END

FLUSH(History) !Конец буферизации, записать буферы

Смотри также: FLUSH, LOGOUT, BUFFER

 

STRPOS (получить значение совпавшей позиции)

STRPOS( первое, второе [, режим ] )

STRPOS Возвращает начальную позицию подстроки, основываясь на переданных параметрах.

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

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

режим Целочисленная константа или метка соответствия, которая указывает является ли метод сравнения чувствительным к регистру. Если ЛОЖЬ (0), метод чувствителен к регистру. Если ИСТИНА (1), метод не чувствителен к регистру. По умолчанию регистр чувствителен.

Процедура STRPOS возвращает начальную позицию совпадения первого и второго параметров при сравнении указанным режимом. Следующий режим, представленный значением метки соответствия, указанном в файле EQUATES.CLW, поддерживается STRPOS:

Match:Regular

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

Операторы регулярных выражений

Регулярные выражения используются для описания шаблонов в тексте. Следующие символы являются операторами регулярных выражений (или метасимволы) для повышения производительности и универсальности регулярных выражений.

^ Символ ^ соответствует началу строки или начальной линии внутри строки. Например:

^@chapter

соответствует "@chapter" в начале строки.

$ Символ доллара означает тоже самое что и символ ^, но только для конца строки или линии внутри строки. Например:

p$

соответствует записи оканчивающейся на p.

. Точка соответствует любому одиночному символу за исключением новой линии. Например:

.P

соответствует любому одиночному символу следующим за P в строке. Используя конкатенацию мы можем создать регулярное выражение подобно 'U.A', которое соответствует любой трехсимвольной последовательности, начинающейся с 'U' и заканчивающейся 'A'.

[...] Это так называемый набор символов. Он соответствует любому из символов, заключенному в квадратные скобки. Например:

[MVX]

соответствует любому из символов M, V или X в строке. Диапазон символов указан использованием дефиса между первым и последним символом и заключается целиком в квадратные скобки. Например:

[0-9]

соответствует любой цифре. Для указания для соответствия символа '-', набирайте как '---', тогда диапазон будет соответствовать только символу '-'. Вы можете также указать '-' как первый или последний символ набора. Чтобы указать для соответствия символ '^', расположите его в любом месте кроме первой позиции набора символов. Чтобы указать ']', расположите его первым в наборе символов. Например:

[]d^]

соответствует одному из ']', 'd' или '^'.

[^ ...]

Это дополненный набор символов. Первым символом после [ должен быть символ ^. Это соответствует любому символу за исключением указанных в квадратных скобках (или новой линии). Например:

[^0-9]

соответствует любому символу за исключением цифр.

| Вертикальная черта является оператором чередования и используется для указания альтернатив. Например:

^P|[0-9]

соответствует любой строке которая соответствует либо ^P либо [0-9]. Это означает соответствие любой строке содержащей цифры или начинающейся с P. Чередование относится к предельно возможным регулярным выражениям с любой стороны.

Пробелы не допускается использовать между строками и операторами чередования.

{...}

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

* Звездочка означает, что предшествующее регулярное выражение будет повторяться столько раз, сколько необходимо для того, чтобы найти соответствие. Например:

ph*

применяет символ * к предшествующему символу h и ищет соответствие символу p сопровожденному любым количеством символов h. Это также соответствует символу p, даже если символ h отсутствует. Символ * повторяет наименее возможное предшествующее выражение (применяйте круглые скобки, если нужно повторять большее выражение). Это находит наибольшее число повторений насколько возможно. Например:

(c[ad][ad]*r x)

соответствует строке формы (car x), (cdr x), (cadr x) и так далее.

+ Знак плюс подобен звездочке, но предшествующее выражение должно сочетаться хотя бы один раз. Это означает, что:

wh+y

должно соответствовать "why" и "whhy", но не "wy," несмотря на то, что wh*y найдет соответствие во всех трех строках. Это более простой способ записи последнего * примера:

(c[ad]+r x)

? Знак вопроса подобен *, но предшествующее выражение должно встречаться только раз или не встречаться вовсе. Например:

fe?d

будет соответствовать fed и fd, но ничему больше.

\ Обратный слеш используется для подавления специального значения символа при сопоставлении. Например:

\$

соответствует символу $.

В регулярных выражения операторы *, +, и ? имеют высший приоритет, затем следует конкатенация и наконец символ |.

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

Пример:

ListHave1 STRING('IN,OH,KY,TN,PA')

ListHave2 STRING('WI,MN,IA,SD,ND')

StatesWanted STRING('NJ|NY|PA|DE')

CODE

X = STRPOS(ListHave1,StatesWanted,True) !X = 13

Y = STRPOS(ListHave2,StatesWanted,True) !Y = 0

X = STRPOS('Fireworks on the fourth', '{{4|Four}th', True) !X = 18

X = STRPOS('Fireworks on the fourth', '{{4|Four}th', False) !X = 0 Чувствителен к регистру

X = STRPOS('July 4th fireworks', '{{4|four}th', True) !X = 6

Смотри также: MATCH

 

SUB (получить подстроку)

SUB(строка,позиция,длина)

SUB Возвращает часть строки.

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

позиция Целочисленная константа, переменная или выражение. Будучи положительной указывает положение символа относительно начала строки. Отрицательное же значение указывает положение символа относительно конца строки (т.е. значение -3 указывает на 3-й символ от конца строки).

длина Числовая константа, переменная или выражение, задающее число возвращаемых символов.

Процедура SUB возвращает подстроку заданной длины из строки начиная с указанной позиции.

Процедура SUB родственна операции “части строк” с переменными STRING, CSTRING и PSTRING. SUB менее гибка и эффективна, чем “части строк”, но более “безопасна”, так как проверяет выход за границы строки.

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

Для того чтобы взять “часть” строки, номера начального и конечного символов в этой части разделяются двоеточием и помещаются в квадратных скобках ([ ]) как индексы неявно объявленного массива. Номера символов могут быть целочисленными константами, переменными или выражениями. Если используются переменные, то между именами переменных и двоеточием должен быть, по крайней мере, один пробел, чтобы избежать путаницы с префиксами.

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

Пример:

!SUB('ABCDEFGHI',1,1) возвращает 'A'

!SUB('ABCDEFGHI',-1,1) возвращает 'I'

!SUB('ABCDEFGHI',4,3) возвращает 'DEF'

!Получит расширение файла используя процедуру SUB

Extension = SUB(FileName,INSTRING('.',FileName,1,1)+1,3)

!Та же операция, но используя “части строк”

Extension = FileName[(INSTRING('.',FileName,1,1)+1) : (INSTRING('.',FileName,1,1)+3)]

Смотри также: INSTRING, STRING, CSTRING, PSTRING, Части строк

 

SUSPEND (приостановить выполнение процесса)

SUSPEND(номер процесса, режим)

SUSPEND Приостанавливает выполнение процесса.

номер процесса Числовая константа, переменная или выражение, которое вычисляется как целое значение со знаком (SIGNED).

режим Числовая константа, переменная или выражение, которое вычисляется как целое значение со знаком (SIGNED).

Оператор SUSPEND приостанавливает процесс, указанный параметром номер процесса. Если номер процесса является номером активного процесса, его выполнение приостанавливается, а счетчик остановок увеличивается. Каждый следующий оператор SUSPEND выполняемый к тому же активному процессу, увеличивает счетчик остановок на единицу. Следовательно, приостановленный процесс данным числом операторов SUSPEND может быть возобновлен только когда число остановок будет равно числу возобновлений, выполняемых оператором RESUME.

Параметр режим управляет поддержкой сообщений, обеспечиваемые SUSPEND. Если режим установлен в ИСТИНУ (1), SUSPEND не выводит сообщение, если определил, что приостановка процесса, который ему предписывается приостановить, небезопасна. Если же параметр режим установлен в ЛОЖЬ, то в случае небезопасной приостановки процесса, сообщение будет выведено.

SUSPEND возвращает ИСТИНУ (1), если процесс был приостановлен и ЛОЖЬ (0) – в противном случае.

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

Например, вызов внутренней модальной функции SendMessage (вызов Windows API) послужит причиной вызова процесса (MDI-окна родителя), чтобы приостановить активность, пока вызванный процесс (порожденное MDI-окно) возвращается с вызова. Если вызванный процесс останавливается, мы получим зависание программы.

Приостановка процесса, который уже не активен, игнорируется.

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

Пример:

!Номер приостановленного процесса сохраняется в переменной

IF NOT SUSPEND(ThreadNumVariable,1) !Блокирование встроенной функции сообщения,

!используется другое

MESSAGE('Thread could not be suspended')

END

Смотри также: RESUME

TAN (тангенс)

TAN(радиан)

TAN Возвращает тангенс.

радианы Числовая константа, переменная или выражение представляющая угол в радианах. Пи – это константа, которая представляет собой отношение длины окружности к радиусу круга. Здесь 2π радиана (или 360 градусов) в круге.

Процедура TAN возвращает значение тригонометрического тангенса угла, измеренного в радианах. Тангенс угла представляет собой отношение длины противолежащего катета к длине прилежащего катета.

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

Пример:

PI EQUATE(3.1415926535898) !Значение PI

Rad2Deg EQUATE(57.295779513082) !Число градусов в радиане

Deg2Rad EQUATE(0.0174532925199) !Число радиан в градусе

CODE

Angle = 45 * Deg2Rad !Преобразовать 45 градусов в радианы

TangentAngle = TAN(Angle) !Получить тангенс угла в 45 градусов

Смотри также: ATAN, SIN, ASIN, COS, ACOS

 

THREAD (выдать номер текущего процесса)

THREAD( )

Процедура THREAD возвращает номер текущего процесса. Номер процесса используется процедурами и встроенными процедурами при их выполнении в других процессах (такими как SETTARGET)

Для одной программы максимально доступное число исполняемых процессов теоретически бесконечно. Тем не менее, слово “бесконечно” означает что число лимитировано не выполняемыми библиотеками Clarion, а установками окружения операционной системы, т.е. лимитом может быть количество доступной виртуальной памяти или числом запущенных процессов в системе или ограничением числа окно (включая оконные объекты) открытым одновременно в одном процессе и т.д. Поэтому THREAD всегда возвращает значение лежащее в диапазоне от единицы (1) до верхнего предела SIGNED (2 147 483 647).

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

Пример:

MainWin APPLICATION('My Application'),SYSTEM,MAX,ICON('MyIcon.ICO'),STATUS |

,HVSCROLL,RESIZE

MENUBAR

MENU('&File'),USE(?FileMenu)

ITEM('Selection &1...'),USE(?MenuSelection1)

ITEM('Selection &2...'),USE(?MenuSelection2)

END

END

END

SaveThread LONG !Объявить переменную, хранящую номер процесса

SaveThread1 LONG !Объявить переменную, хранящую номер процесса

SaveThread2 LONG !Объявить переменную, хранящую номер процесса

CODE

SaveThread = THREAD() !Сохранить номер процесса

OPEN(MainWin) !Открыть APPLICATION

ACCEPT !Обработчик глобальных событий

CASE ACCEPTED()

OF ?MenuSelection1

SaveThread1 = START(NewProc1) !Запустить новый процесс

OF ?MenuSelection2

SaveThread2 = START(NewProc2) !Запустить новый процесс

OF ?Exit

RETURN

END

END

Смотри также: START

 

THREADLOCKED (текущее состояние внешней обработки сообщений)

THREADLOCKED()

Процедура THREADLOCKED возвращает текущее состояние внешней обработки сообщений. Если возвращается ноль (0), то она разблокирована, а если единица (1), то заблокирована.

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

Пример:

X# = THREADLOCKED() !Возвращает 1

UNLOCKTHREAD !Разблокировать внешнюю обработку

X# = THREADLOCKED() !возвращает 0

MyLibraryCodeWithMessageLoop !Вызвать процедуру со свой обработкой сообщений

LOCKTHREAD !Заблокировать

Смотри также: ACCEPT, LOCKTHREAD, UNLOCKTHREAD

 

TIE (соединить строковое значение с ASTRING)

TIE([признак] [,индекс] [,значение])

TIE Соединить строковое значение с ASTRING.

признак Строковая константа или метка ранее объявленного признака ASTRING.

индекс Числовая константа или переменная, определяющие значение индекса для ASTRING. Значение индекса может быть любым ненулевым значением LONG.

значение Числовая константа или переменная. Значение может быть любым ненулевым значением LONG.

Оператор TIE соединяет значение в конкретный признак или индекс. Уникальный индекс может быть установлен динамически либо опущен либо установлен в ноль. Если индекс установлен динамически, TIE возвратит сгенерированный номер индекса.

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

Пример:

PROGRAM

MAP

END

INCLUDE('EQUATES.CLW')

COLOR EQUATE(1)

SIDES EQUATE(2)

AS1 ASTRING

CODE

AS1 = 'SHAPE' !Объявить признак строки ASTRING

TIE('SHAPE',COLOR,COLOR:RED) !Соединить COLOR:RED с COLOR для ASTRING SHAPE

TIE(AS1,SIDES,3) !Соединить 3 с SIDES для ASTRING SHAPE

IF TIED('SHAPE',SIDES) = 3 AND | !Если значение соединенное с SIDES = 3

TIED(AS1,COLOR) = COLOR:RED !и соединено с COLOR=COLOR:RED

MESSAGE('Shape is a red triangle')

END

Смотри также: TIED, UNTIE

 

TIED(получить значение соединенное с ASTRING)

TIED(признак, индекс)

TIED Извлекает значение строки, которая была ранее соединена с признаком ASTRING.

признак Строковая константа или метка, ранее объявленная как признак ASTRING.

index Числовая константа или переменная определяющая значение индекса ASTRING. Значение индекса может быть любым ненулевым значением LONG.

Оператор TIED извлекает значение, которое ранее было соединено с конкретным признаком ASTRING или индексом. Если значение не соединено возвращается 0.

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

Пример:

PROGRAM

MAP

END

INCLUDE('EQUATES.CLW')

COLOR EQUATE(1)

SIDES EQUATE(2)

AS1 ASTRING

CODE

AS1 = 'SHAPE'

TIE('SHAPE',COLOR,COLOR:RED)

TIE(AS1,SIDES,3)

IF TIED('SHAPE',SIDES) = 3

AND TIED(AS1,COLOR) = COLOR:RED

MESSAGE('Shape is a red triangle')

END

Смотри также: TIE, UNTIE

TODAY (получить системную дату)

TODAY( )

Процедура TODAY возвращает текущую дату из операционной системы в виде стандартной даты. Диапазон возможных значений с 1 января 1801 г. (стандартная дата 4) по 31 декабря 2099 г. (стандартная дата 109 211).

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

Пример:

OrderDate = TODAY() !Присвоить переменной системную дату

Смотри также: Стандартная дата, DAY, MONTH, YEAR, SETTODAY, DATE

 

TYPE (вывести строку на экран)

TYPE(строка)

TYPE Выводит строку в текущее окно или документ.

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

TYPE выводит строку текста в текущее окно или в документ. Вывод строки в окне или документе начинается с текущего положения курсора, если есть пространство для этого, и, если нет, продолжается со следующей строки. Используемый при этом шрифт - текущий шрифт для окна или для документа. Перед выводом строки оператором TYPE для установки курсора можно воспользоваться оператором SHOW.

Пример:

MDIChild WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL

!экранные объекты

END

CODE

OPEN(MDIChild)

DISPLAY

TYPE(Cus:Notes) !Вывести на экран поле примечаний

Смотри также: Текущий объект

 

UNFIXFORMAT (изменить состояние динамического файла в незафиксированное)

UNFIXFORMAT( файл )

UNFIXFORMAT Изменяет состояние динамического файла в нефиксированное.

файл Метка структуры FILE, которая должна быть указателем-переменной.

UNFIXFORMAT изменяет состояние динамического файла, который ранее был зафиксирован в незафиксированное состояние. Это позволяет в дальнейшем изменять состояние файла.

UNFIXFORMAT установит ERRORCODE в NoDriverSupport, если переданный файл не был создан используя NEW(файл). Также выдаются следующие ошибки:

Errorcode Мнемоническое имя Причина

80 NoDriverSupport Переданный файл не был создан используя NEW(файл)

47 InvalidFileErr Недопустимая структура

Если выдается код 47, оператор FILEERRORCODE может быть использован для получения дополнительной информации. Смотри Дополнительно о ErrorCode 47 для получения дополнительной информации.

Смотри также: FIXFORMAT

 

UNHIDE (отобразить спрятанное поле)

UNHIDE( [ первое поле ] [, последнее поле ] )

UNHIDE Отображает ранее спрятанное поле.

первое поле Номер или метка соответствия поля или первое поля в группе полей. Если параметр опущен, то по умолчанию равен 0.

последнее поле Номер или метка соответствия последнего поля в группе полей.

Оператор UNHIDE вновь активизирует поле или группу полей, спрятанных оператором HIDE. Восстановленные поля вновь появляются на экране.

Пример:

CODE

OPEN(Screen)

HIDE(?Control2) !Скрыть поле Control2

IF Ctl:Password = 'Supervisor'

UNHIDE(?Control2) !Восстановить Control2

END

Смотри также: HIDE, ENABLE, DISABLE

 

UNLOAD (выгрузить вызванную библиотеку DLL из памяти)

UNLOAD( файл )

UNLOAD Выгрузить стандартные Windows .DLL ранее загруженные процедурой CALL.

файл Строковая константа, переменная или выражение, содержащие имя (включая расширение) той .DLL которую следует выгрузить. Может включать полный путь.

Процедура UNLOAD выгружает файл .DLL загруженный процедурой CALL.

Пример:

Win1 WINDOW

BUTTON('Load DLL'),USE(?DLLButton)

END

CODE

OPEN(Win1)

ACCEPT

CASE EVENT()

OF EVENT:Accepted

IF ACCEPTED() = ?DLLButton

!Вызывать процедуру в CUSTOM.DLL и оставить DLL в памяти:

X# = CALL('CUSTOM.DLL','EntryPoint',1)

IF X# THEN STOP(X#) END !Проверить успешное выполнение

END

OF EVENT:CloseWindow

UNLOAD('CUSTOM.DLL') !Выгрузить CUSTOM.DLL

END

END

!Обработка

Смотри также: CALL

 

UNLOCK (разблокировать файл данных)

UNLOCK(файл)

UNLOCK Разблокирует ранее заблокированный файл данных.

файл Метка структуры FILE.

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

Пример:

LOOP !Цикл для исключения взаимной блокировки

LOCK(Master,1) !В течение 1 секунды пытаться заблокировать файл Master.

IF ERRORCODE() = 32 !Если кто-то уже сделал это

CYCLE !попытаться еще раз

END

LOCK(Detail,1) !В течение 1 секунды пытаться заблокировать файл

IF ERRORCODE() = 32 !Если кто-то уже сделал это

UNLOCK(Master) !разблокировать файл Master

CYCLE !попытаться еще раз

END

BREAK !Попытаться повторить все сначала

END

Смотри также: LOCK

UNLOCKTHREAD (разблокировать обработку сообщений)

UNLOCKTHREAD

Оператор UNLOCKTHREAD позволяет программе на языке Clarion обратиться к сторонней программе или процедуре интерфейса прикладных программ (API), которая содержит свою собственную обработку сообщений (подобную циклу ACCEPT).

Обычно, циклы ACCEPT в программе, написанной на языке Clarion, выполняются по очереди (даже в 32-х битных программах), поэтому не возникает проблемы одновременного доступа к данным. Переключение процессов происходит только при выполнении оператора ACCEPT и, таким образом, в любой момент может выполняться только один процесс. Однако, если текущий исполняемый процесс обратится к внешней процедуре (включая и процедуры API), которая, например, открывает окно и пока окно открыто обрабатывает сообщения, то другим процессам должна быть предоставлена возможность параллельно обрабатывать свои собственные сообщения. Это разрешается выполнением оператора UNLOCKTHREAD перед обращением к такой внешней процедуре. А после возврата от нее управления нужно выполнить оператор LOCKTHREAD.

Поскольку UNLOCKTHREAD позволяет другим процессам прерывать текуший исполняемый процесс, важно чтобы между операторами UNLOCKTHREAD и LOCKTHREAD не было обращений к библиотечным процедурам исполняемой системы Clarion. Это означает, что НЕЛЬЗЯ обращаться к процедурам языка Clarion. Также нельзя выполнять операции с данными типа STRING, CSTRING, PSTRING, DECIMAL и PDECIMAL. Единственным исключением является передача переменной типа STRING, CSTRING, PSTRING в качестве параметра типа ROW во внешнюю (не на языке Clarion) процедуру. Несоблюдение этих ограничений может привести к порче данных другого исполняемого процесса или другим непредсказуемым последствиям.

С помощью процедуры THREADLOCKED() можно определить является ли данный процесс “разблокированным” или нет.

Пример:

UNLOCKTHREAD !Разблокировать процесс

MyLibraryCodeWithMessageLoop !Обратиться к процедуре со своим циклом обработки сообщений

LOCKTHREAD !заблокировать процесс

Смотри также: ACCEPT, LOCKTHREAD, THREADLOCKED

 

UNQUOTE (удалить из строки специальные символы)

UNQUOTE( значение )

UNQUOTE Сокращает данные строки, убирает одинарные сдвоенные кавычки(‘’), непарные левые угловые (<<) и фигурные скобки ({{).

значение Строковая константа или переменная, содержащие свойства для грамматического разбора.

Процедура UNQUOTE возвращает строку, содержащую в своем значении все сдвоенные одинарные кавычки(‘’), двойные левые непарные угловые скобки (<<) и непарные левые фигурные скобки ({{) (возвращаются одиночные символы из перечисленных).

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

Пример:

stringvar1 STRING('<250>')

stringvar2 STRING('<<display text>')

stringvar3 STRING(30)

CODE

stringvar3 = 'label{{PROP:text} = value'

 

MESSAGE(UNQUOTE(stringvar1)) !возвращает акцентированный символ u

MESSAGE(UNQUOTE(stringvar2)) !возвращает '<display text>'

MESSAGE(UNQUOTE(stringvar3)) !возвращает 'label{PROP:text} = value'

Смотри также: QUOTE

 

UNREGISTER (разрегистрирует обработчик событий)

UNREGISTER( [событие ] [, обработчик ] [, объект ] [,окно] [,поле] )

UNREGISTER Разрегистрирует процедуру обработки событий.

событий Целочисленная константа, переменная, выражение или метка соответствия, содержащая номер события. Значение в диапазоне от 400h до 0FFFh является событием, определенное пользователем. Если опущено, разрегистрируются все события.

обработчик Переменная LONG или выражение, содержащее возвращенное процедурой ADDRESS для процедуры обработки событий. Если опущено, разрегистрируются все обработчики.

объект Целочисленная константа LONG, переменная или выражение, содержащее любое 32-х битное уникальное значение для идентификации указанного обработчика. Это обычно значение, возвращаемое ADDRESS(SELF) когда обработчик является методом класса.

окно Метка WINDOW или REPORT чье событие следует обработать. Если опущено, подразумевается текущая структура WINDOW или REPORT.

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

UNREGISTER разрегистрирует ранее зарегистрированную процедуру обработки событий процедурой REGISTER.

Может быть также объявлена как UNREGISTEREVENT.

Пример:

WindowResizeClass.Kill PROCEDURE

CODE

UNREGISTER(EVENT:Sized,ADDRESS(SELF.TakeResize),ADDRESS(SELF))

!Other code follows

WindowResizeClass.TakeResize PROCEDURE

ReturnValue BYTE

CODE

ReturnValue = Level:Benign

RETURN(ReturnValue)

Смотри также: REGISTER, ACCEPT, EVENT

 

UNTIE(развязать значение строки с ASTRING)

UNTIE([признак],[индекс])

UNTIE Удаляет значение, ранее связанное процедурой TIED для ASTRING.

признак Метка ранее объявленного признака ASTRING. Если опущен, используются все ранее объявленные признаки ASTRING.

индекс Числовая константа или переменная определяющее значение индекса ранее объявленной ASTRING. Значение индекса – LONG и может быть больше нуля. Если опущен, то используются все индексы.

Оператор UNTIE развязывает значение строки, которое ранее было связано с конкретным признаком ASTRING и индексом.

Пример:

PROGRAM

MAP

END

INCLUDE('EQUATES.CLW')

COLOR EQUATE(1)

SIDES EQUATE(2)

AS1 ASTRING

CODE

AS1 = 'SHAPE' !Объявляет признак строки ASTRING

TIE('SHAPE',COLOR,COLOR:RED) !Связывает COLOR:RED с COLOR для ASTRING SHAPE

TIE(AS1,SIDES,3) !Связывает 3 с SIDES для ASTRING SHAPE

(некоторый код)

UNTIE(AS1, SIDES)

Смотри также: TIE, TIED

 

UPDATE (запись с экрана в USE-переменную)

UPDATE( [первое поле] [,последнее поле] )

UPDATE Заносит содержимое поля в его USE-переменную.

первое поле Номер или метка соответствия поля или первого поля в группе полей.

последнее поле Номер или метка соответствия последнего поля в группе полей.

Оператор UPDATE записывает отображенное на экране значение поля в его USE-переменную. Значение, отображенное на экране, помещается в переменную, которую определяет USE-атрибут поля.

Оператор ACCEPT автоматически обновляет USE-переменные, когда каждое поле становится объектом его воздействия. Однако, не все события (например, нажатие одной из ALERT-клавиш) автоматически обновляют USE-переменные. Приходится прибегать к помощи оператора UPDATE.

UPDATE

Обновляет все поля экрана.

UPDATE(первое поле)

Обновляет USE-переменную указанного поля значением с экрана.

UPDATE(первое поле, последнее поле)

Обновляет USE-переменные группы полей значениями с экрана.

Пример:

UPDATE(?) !Обновить текущее поле

UPDATE !Обновить все поля

UPDATE(?Address) !Обновить поле ?Adress

UPDATE(3,7) !Обновить поля с 3-го по 7-е

UPDATE(?Name,?Zip) !Обновить поля с Name по Zip

UPDATE(?City,?City+2) !Обновить City и два последующих поля

Смотри также: Метки соответствия полей, DISPLAY, CHANGE

 

UPPER (преобразовать в прописные буквы)

UPPER(строка)

UPPER Преобразует символы строки в прописные.

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

Процедура UPPER возвращает строку, в которой все буквы прописные.

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

Пример:

!UPPER('abc') возвращает 'ABC'

Name = UPPER(Name) !Записать имя прописными буквами

Смотри также: LOWER, ISUPPER, ISLOWER

 

VAL (получить код символа АSСII)

VAL(символ)

VAL Возвращает код символа АSСII.

символ Строка в один байт, содержащая ANSI символ.

Процедура VAL возвращает ASCII код заданного символа.

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

Пример:

!VAL('A') возвращает 65

!VAL('z') возвращает 122

CharVal = VAL(StrChar) !Получить код ASCII символа в строке

Смотри также: CHR

 

WATCH (автоматическая проверка совместного использования)

WATCH( структура )

WATCH Включает автоматическую проверку совместного использования базы данных по оптимистической стратегии.

структура Метка объявления файла или VIEW.

Оператор WATCH включает автоматическую проверку файловым драйвером совместного использования базы данных для последующих операторов GET, REGET, NEXT или PREVIOUS в многопользовательской среде по оптимистической стратегии. WATCH завершается, когда контролируемая им запись записывается в файл оператором PUT, или другие операторы GET, NEXT, PREVIOUS или REGET выполняются в той же структуре без первоначального выполнения другого оператора WATCH.

Обычно файловый драйвер сохраняет копию значений полей, прочитанных из каждого файла при успешном выполнении операторов GET, NEXT и PREVIOUS или REGET. При записи оператором PUT обратно в файл, поля на диске сравниваются с первоначально выбранными данными. Оператором PUT выдается сообщение об ошибке 89 Record Changed By Another Station (Запись изменена другой рабочей станцией), если запись была изменена другим пользователем.

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

<FieldName> | WATCH

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

Пример:

SET(Itm:InvoiceKey) !Встать на начало файла

LOOP !Обработать все записи

WATCH(Items) !Включить проверку совместного использования

NEXT(Items) !прочитать запись

IF ERRORCODE() THEN BREAK.

DO ItemProcess !обработать элемент

PUT(Items) !и записать его обратно

IF ERRORCODE() = RecordChangedErr !Если изменена другой рабочей станцией

PREVIOUS(Items) !Прочитать измененную запись

ELSE

STOP(ERROR()) !Прекратить выполнение при любой ошибке

END

END

Смотри также: NEXT, PREVIOUS, GET, REGET, HOLD

 

WHAT (выделяет поле из группы)

WHAT( группа, номер [,измерение] )

WHAT Возвращает определенное поле из структуры группы.

группа Метка объявления GROUP, RECORD, CLASS или QUEUE.

номер Целочисленное выражение, специфицирующее порядковый номер поля в группе.

измерение Необязательный номер элемента массива, если используется.

Оператор WHAT возвращает номер поля структуры группы . Обычно он назначается переменной ANY. Если номер указанного поля является полем массива, то WHAT возвращает указатель элемент массива номера поля.

Если поле с порядковой позицией равной второму переданному параметру определено как тип ANY или имеет атрибут DIM, возвращаемое значение может использоваться только операциях “присвоения указателей” (&=). Любая попытка доступа к этому полю приведет к ошибке времени исполнения.

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

Пример:

MyGroup GROUP

F1 LONG(3) !Поле номер 1

F2 SHORT !Поле номер 2

F3 STRING(30) !Поле номер 3

InGroup GROUP !Поле номер 4

F1 LONG !Поле номер 5

F2 SHORT(2) !Поле номер 6

F3 STRING(30),DIM(2) !Поле номер 7

F4 LONG,DIM(3,3) !Поле номер 8

F5 ANY

END

END

CurrentField ANY

CODE

CurrentField &= WHAT(MyGroup,1) !Возвращается содержимое MyGroup.F1 (3)

CurrentField &= WHAT(MyGroup,6) !Возвращается содержимое MyGroup.Ingroup.F2 (2)

CurrentField &= WHAT(MyGroup,7) !Возвращается содержимое MyGroup.Ingroup.F3[1]

IF CurrentField &= RefVar !ПРАВИЛЬНО

CurrentField = 2 !НЕПРАВИЛЬНО – выдастся ошибка времени выполнения

END

CurrentField &= WHAT(MyGroup,8,3) !Возвращается содержимое MyGroup.Ingroup.F4[1,3]

CurrentField &= WHAT(MyGroup,8,5) !Возвращается содержимое MyGroup.Ingroup.F4[2,2]

!Для сравнения строк, возвращаемое поле должно быть помещено в рабочее поле:

CurrentField &= WHAT(MyGroup,8,7) !Возвращается содержимое MyGroup.Ingroup.F4[3,1]

IF CurrentField = 'xyz'

!что-нибудь сделать

END

Смотри также: ANY, WHERE, WHO, ISSTRING, GROUP, RECORD, CLASS, QUEUE

 

WHERE (возвращает позицию поля в группе)

WHERE( группа, поле )

WHERE Возвращает позицию полей в структуре GROUP, RECORD, CLASS или QUEUE.

группа Метка объявления GROUP, RECORD, CLASS или QUEUE.

поле Метка поля в объявлении группы.

Оператор WHERE возвращает порядковую позицию определенного поля в структуре группы.

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

Пример:

MyGroup GROUP

F1 LONG !Поле номер 1

F2 SHORT !Поле номер 2

F3 STRING(30) !Поле номер 3

InGroup GROUP !Поле номер 4

F1 LONG !Поле номер 5

F2 SHORT !Поле номер 6

F3 STRING(30) !Поле номер 7

END

END

CurrentField LONG

CODE

CurrentField = WHERE(MyGroup,MyGroup.F1) !WHERE возвращает 1

CurrentField = WHERE(MyGroup,MyGroup.Ingroup.F2) !WHERE возвращает 6

CurrentField = WHERE(MyGroup.Ingroup,MyGroup.Ingroup.F2) !WHERE возвращает 2

Смотри также: WHAT, WHO, ISSTRING, GROUP, RECORD, CLASS, QUEUE

 

WHO (получить имя поля из группы)

WHO( группа, номер )

WHO Возвращает строку, содержащую имя указанного поля из структуры группы.

группа Метка объявления GROUP, RECORD, CLASS или QUEUE с атрибутом BINDABLE.

номер Целочисленное выражение указывающее порядковую позицию поля в группе.

Оператор WHO возвращает строку содержащее имя указанного номера поля из структуры группы.

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

Пример:

MyGroup GROUP

F1 LONG !Поле номер 1

F2 SHORT !Поле номер 2

F3 STRING(30) !Поле номер 3

InGroup GROUP !Поле номер 4

F4 LONG !Поле номер 5

F5 SHORT !Поле номер 6

F6 STRING(30),NAME('CustomName') !Поле номер 7

END

END

CurrentField STRING(30)

CODE

CurrentField = WHO(MyGroup,1) !Возвращает "F1"

CurrentField = WHO(MyGroup,6) !Возвращает "F5"

CurrentField = WHO(MyGroup,7) !Возвращает "CustomName"

Смотри также: WHAT, WHERE, GROUP, RECORD, CLASS, QUEUE, BINDABLE

 

YEAR (получить год)

YEAR(год)

YEAR Возвращает год.

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

Процедура YEAR вычисляет четырехзначный, для заданной стандартной даты, год (от 1801 до 9999).

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

Пример:

IF YEAR(LastOrd) < YEAR(TODAY()) !Если последняя дата покупки не в этом году

DO StartNewYear !начать подсчет итогов для нового года

END

Смотри также: Стандартная дата, DAY, MONTH, TODAY, DATE

YIELD (разрешить обработку событий)

YIELD

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

YIELD применяют для исключения ситуации, когда продолжительная пакетная обработка данных в Clarion-программе приводит к “блокировке” исполнения остальных программ. Такая “согласованная многозадачность” (“cooperative multi-tasking”) гарантирует мирное сосуществование Windows-программ разработчика с другими приложениями системы Windows.

В Clarion-программе только оператор YIELD - через таймерные события EVENT:Timer - передает управление другим процессам. Это дает возможность реализовать “фоновую” процедуру в отдельном процессе, используя атрибут TIMER для осуществления продолжительной пакетной обработки данных, что позволяет пользователю продолжить выполнение других задач в программе, не ожидая завершения пакетной обработки. Это стандартное поведение Windows при обработке фоновых задач в приложении.

Приводимый пример иллюстрирует два подхода в осуществлении пакетной обработки данных: ожидание завершения обработки и фоновое выполнение. Оператор YIELD необходим только в процедуре WaitForProcess, поскольку управление целиком сосредотачивается в ней. Фоновое выполнение, используя событие EVENT:Timer, не нуждается в операторе YIELD, т. к. цикл ACCEPT автоматически реализует согласованную многозадачность с другими Windows-программами.

Пример:

StartProcess PROCEDURE

Win WINDOW('Choose a Batch Process'),MDI

BUTTON('Full Control'),USE(?FullControl)

BUTTON('Background'),USE(?Background)

BUTTON('Close'),USE(?Close)

END

CODE

OPEN(Win)

ACCEPT

CASE ACCEPTED()

OF ?FullControl

DISABLE(FIRSTFIELD(),LASTFIELD()) !Блокировка всех кнопок

WaitForProcess !и вызов проц. пакетной обработки

ENABLE(FIRSTFIELD(),LASTFIELD()) !Разрешение кнопок по завершению пакетной обработки

OF ?Background

START(BackgroundProcess) !Запуск процесса с пакетной обработкой

OF ?Close

BREAK

END

END

WaitForProcess PROCEDURE !Полностью управляемая пакетная обработка

CODE

SETCURSOR(CURSOR:Wait) !Уведомление: идет пакетная обработка

SET(File) !Установка пакетной обработки

LOOP

NEXT(File)

IF ERRORCODE() THEN BREAK END

!Программный код пакетной обработки

YIELD !Уступить управление другим программам и

!событию EVENT:Timer.ГЛАВА 8 ОПЕРАТОРЫ РАБОТЫ

END

SETCURSOR !Восстановить курсор

BackgroundProcess PROCEDURE !Фоновая пакетная обработка

Win WINDOW('Batch Processing...'),TIMER(1),MDI

BUTTON('Cancel'),STD(STD:Close)

END

CODE

OPEN(Win)

SET(File) !Установить пакетную обработку

ACCEPT

CASE EVENT()

OF EVENT:CloseWindow

BREAK

OF EVENT:Timer !Обработка записей по разрешению от таймера

LOOP 3 TIMES

NEXT(File)

IF ERRORCODE()

POST(EVENT:CloseWindow)

BREAK

END

!Программный код пакетной обработки

END

END

END

Смотри также: ACCEPT, TIMER


Знаете ли Вы, что диаграмма деятельности, Activity diagram - это методология объектно-ориентированного проектирования, предназначенная для детализации особенностей алгоритмической и логической организации системы. При этом каждое действие расчленяется на фундаментальные процессы. На диаграмме деятельности управление осуществляется:
- либо через потоки управления (явно);
- либо через определяемые потоки данных (неявно).

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

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


Рыцари теории эфира
 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