к оглавлению

Приложение C. Динамические свойства Clarion

Полный список свойств

PROP:AcceptAll

Свойство WINDOW которое возвращает единицу (1), если включен режим “AcceptAll” (безостановочный режим), и 0 – если нет. Кроме того, это свойство можно использовать для переключения этого режима. Обычно безостановочный режим включает оператор SELECT без параметров. Это режим редактирования полей, в котором все объекты в окне обрабатываются в последовательности переключения клавищей TAB, путем генерации для каждого объекта события EVENT:Accepted. Это позволяет выполнить процедуры проверки данных для всех полей, включая те, которые пользователь не трогал. Когда встречается одно из следующих условий, безостановочный режим немедленно выключается:

SELECT(?)

Window{PROP:AcceptAll} = 0

Объект с атрибутом REQ имеет значение ноль или пробел.

Оператором SELECT(?) выбирается тот же самый объект, который пользователь редактировал. Обычно это означает, что в этом поле содержатся неверные данные и пользователь должен повторить ввод данных. Оператор Window{PROP:AcceptAll} = 0 выключает безостановочный режим. Присвоение значения этому свойству можно использовать для включения/выключения режима AcceptAll. Когда объект с атрибутом REQ имеет значение ноль или пробел, безостановочный режим выключается и выделяется поле, в котором пользователь должен повторить ввод (безо всяких дополнительных нажатий клавиши TAB). Когда успешно обработаны все поля, для окна генерируется событие EVENT:Completed.

Пример:

Window WINDOW,PRE(Scr)

ENTRY(@N3),USE(Ctl:Code)

ENTRY(@S30),USE(Ctl:Name),REQ

BUTTON('OK'),USE(?OkButton),KEY(EnterKey)

BUTTON('Cancel'),USE(?CanxButton),KEY(EscKey)

END

CODE

OPEN(Window)

ACCEPT

IF EVENT() = EVENT:Completed THEN BREAK. ! Выключить режим AcceptAll

CASE ACCEPTED()

OF ?Ctl:Code

IF Ctl:Code > 150 !Если введены неверные данные

BEEP ! оповестить пользователя и

SELECT(?) ! ввести данные вновь

END

OF ?OkButton

Window{PROP:AcceptAll} = 1 !Включить режим AcceptAll

END

END !Конец цикла ACCEPT и структуры CASE ACCEPTED

 

PROP:Active

Свойство WINDOW или SYSTEM. Если текущий объект WINDOW, возвращает 1, если данное окно активно, и пробел, если нет. Установите 1 для того, чтобы сделать это верхнее в данном исполняемом процессе окно активным.

Если использовано изменение SYSTEM, SYSTEM{Prop:Active} возвращает номер активного процесса.

Пример:

CODE

OPEN(Window)

X# = START(AnotherThread) ! Начать другой процесс

ACCEPT

CASE EVENT()

OF EVENT:LoseFocus ! Когда данное окно теряет фокус

IF Y# <> X# ! проверить: это первое переключение фокуса?

Window{PROP:Active} = 1 ! и вернуть фокус на данный процесс

Y# = X# ! затем пометить, что переключение фокуса было

END

END

END

AnyActiveThread PROCEDURE !позволить любой вызывающей процедуре знать,

ActiveThread LONG,AUTO !что процесс активный.

CODE

ActiveThread = SYSTEM{PROP:Active}

RETURN CHOOSE(ActiveThread = THREAD(), 0, ActiveThread)

PROP:AlwaysDrop

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

Пример:

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

COMBO(@S20),AT(0,0,20,220),USE(MyCombo),FROM(Que),DROP(5)

END

CODE

OPEN(MDIChild)

?MyCombo{PROP:AlwaysDrop} = 0 !Установить поведение выпадающего списка подобно окну

 

PROP:AppInstance

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

Пример:

PROGRAM

HInstance LONG

CODE

OPEN(AppFrame)

HInstance = SYSTEM{PROP:AppInstance} !Получить идентификационный номер экземпляра

! .EXE файла для дальнейшего использования

ACCEPT

END

 

PROP:AssertHook

Свойство встроенной переменной SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры ASSERT. Эквивалентно {PROP:LibHook,8}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры ASSERT перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре ASSERT (STRING filename,UNSIGNED LineNumber). (ТОЛЬКО ДЛЯ ЗАПИСИ)

Смотри PROP:AssertHook2 для примера кода

 

PROP:AssertHook2

Свойство встроенной переменной SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры ASSERT. Эквивалентно {PROP:LibHook,13}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры ASSERT перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре ASSERT (UNSIGNED LineNumber, STRING filename, STRING message). (ТОЛЬКО ДЛЯ ЗАПИСИ)

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

Пример:

PROGRAM

MAP

AssertMy1 PROCEDURE(STRING filename,UNSIGNED LineNumber)

AssertMy2 PROCEDURE(UNSIGNED LineNumber, STRING filename, STRING message)

END

PRAGMA('define(zero_divide => on'))

CODE

SYSTEM{prop:asserthook} = ADDRESS(AssertMy1)

SYSTEM{prop:asserthook2} = ADDRESS(AssertMy2)

assert(0)

assert(0,'i am a message')

AssertMy1 PROCEDURE(STRING filename,UNSIGNED LineNumber)

CODE

AssertMy2(LineNumber, FileName,'')

AssertMy2 PROCEDURE(UNSIGNED LineNumber, STRING filename, STRING message)

l long

CODE

SYSTEM{prop:asserthook} = 0 !остановить рекурсивные вызовы в обработчик assert

SYSTEM{prop:asserthook2} = 0 !остановить рекурсивные вызовы в обработчик assert

IF MESSAGE('Assert 1|filename=' & CLIP(filename) & '|line=' & LineNumber & |

'|Message=' & CLIP(message) & '|Do you want me to GPF?',|

'ASSERT', ICON:Exclamation, BUTTON:Yes + BUTTON:No)

l = l / l ! деление на 0 - причина GPF

END

 

PROP:AutoPaper

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

Пример:

PROGRAM

CODE

OPEN(AppFrame)

SYSTEM{PROP:AutoPaper} = '' !Выключить механизма выбора наиболее подходящей бумаги

ACCEPT

END

 

PROP:BreakVar

Устанавливает переменную для структуры BREAK внутри отчета.

Пример:

Report REPORT,AT(1000,2000,6000,7000),PRE(RPT),FONT('Arial',10,,FONT:regular),THOUS

Break1 BREAK(ORD:CustNumber),USE(?Break1)

Break2 BREAK(DTL:OrderNumber),USE(?Break2)

HEADER,AT(,,,2167)

END

detail DETAIL,AT(,,,385)

END

FOOTER,PAGEAFTER(-1)

END

END

FOOTER,PAGEAFTER(-1),AT(,,,1385)

END

END

FOOTER,AT(1000,9000,6000,1000)

END

END

CODE

OPEN(Report)

Report$?Break1{PROP:BreakVar} = ORD:CustName !Изменить значение break-переменной для Break1.764 CLARION 4д ОПИСАНИЕ ЯЗЫКА

PROP:Buffer

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

Значение по умолчанию равно нулю (0) и выводит изображение напрямую на экран. Это наиболее быстрый вариант и не вызывает издержки памяти, но в некоторых случаях может вызвать мерцание экрана.

Присвоение свойству единицы (1) выделяет постоянный буфер для окна. Это довольно быстро, но вызывает наибольшие издержки памяти.

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

Пример:

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

END

CODE

OPEN(WinView)

WinView{PROP:Buffer} = 1 !Постоянное обновление буфера для окна

 

PROP:Checked

Возвращается текущий статус отображения элемента управления CHECK – взведен (1) или не взведен (‘’). (ТОЛЬКО ДЛЯ ЧТЕНИЯ). PROP:Checked также используется с пунктом меню, который имеет атрибут CHECK.

Пример:

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

CHECK('Check Me'),AT(20,0,20,20),USE(CheckVar)

END

CODE

OPEN(WinView)

IF ?CheckVar{PROP:Checked} = TRUE !Выставлен ли флажок?

!Произвести какие-нибудь действия

END

ACCEPT

END

 

PROP:Child и PROP:ChildIndex

Множественное свойство PROP:Child, которое возвращает номер (напр. номер метки соответствия) дочернего элемента управления внутри родительской структуры (типа SHEET, TAB, OPTION или GROUP). (ТОЛЬКО ДЛЯ ЧТЕНИЯ). Этот номер (индекс массива в свойстве) представляет из себя положение элемента управления в порядке следования внутри родительской структуры. Если номер элемента управления выходит за границы диапазона, то возвращается пустая строка (‘’). ?Sheet{Prop:Child,Choice(?Sheet)} является эквивалентом ?Sheet{Prop:ChoiceFEQ}.

Множественное свойство PROP:ChildIndex, которое возвращает положение всех дочерних элементов управления в порядке следования внутри родительской структуры (такой, как SHEET, TAB, OPTION или GROUP). (ТОЛЬКО ДЛЯ ЧТЕНИЯ). Этот номер представляет из себя номер элемента управления внутри родительской структуры. Если значение номера выходит за границы диапазона, то возвращается пустая строка (‘’).

PROP:ChildIndex обычно используется с метками соответствия полей дочерних элементов. Используйте свойство PROP:Parent, чтобы определить метку соответствия родительского элемента.

Пример:

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

OPTION('Option 1'),USE(OptVar1),KEY(F10Key),HLP('Option1Help')

RADIO('Radio 1'),AT(0,0,20,20),USE(?R1)

RADIO('Radio 2'),AT(20,0,20,20),USE(?R2)

END

END

CODE

OPEN(WinView)

LOOP X# = 1 TO 99

Y# = ?OptVar1{PROP:Child,X#} !Получить номерам полей в OPTION

IF NOT Y# THEN BREAK.

Z# = ?OptVar1{PROP:ChildIndex,Y#} !Получить порядковую позиции полей в OPTION

MESSAGE('Radio ' & Z# & ' is field number ' & Y#)

END

ACCEPT

END

!Пример использования с обектом SHEET

SHEET,AT(5,177,133,123),USE(?Sheet1)

TAB('Tab Alpha'),USE(?TabAlpha)

END

TAB('Tab Bravo'),USE(?TabBravo)

END

TAB('Tab Charlie'),USE(?TabCharlie)

END

END

 

?Sheet1{PROP:Child,Nth}

!возвращает соответствие поля в N-м листе структуры SHEET.

TabFeq = ?Sheet1{PROP:Child,2}

!эквивалентно

TabFeq=?TabBravo

SELECT(?TabBravo)

!эквивалентно

SELECT(?Sheet1{PROP:Child,2})

?Sheet1{PROP:Child,CHOICE(?Sheet1)}

!эквивалентно

?Sheet1{PROP:ChoiceFEQ}

!получить метку соответствия последнего листа:

LastFEQ = ?Sheet1{PROP:Child,(?Sheet1{Prop:NumTabs})}

!получить метку соответствия первого листа

?Sheet1{Prop:Child, 1 }

!Существует ли не скрыт ли следующий лист в структуре sheet?

IF CHOICE(?Sheet1) < ?Sheet1{Prop:NumTabs} AND

(?Sheet1{PROP:Child,CHOICE(?Sheet1)+1}){PROP:Hide} <> TRUE

Смотри также: PROP:Parent

 

PROP:ChoiceFeq

Возвращает или устанавливает номер выбранного в данный момент поля TAB в структуре SHEET или кнопки RADIO в структуре OPTION.

Пример:

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

OPTION('Option 1'),USE(OptVar1),KEY(F10Key),HLP('Option1Help')

RADIO('Radio 1'),AT(0,0,20,20),USE(?R1)

RADIO('Radio 2'),AT(20,0,20,20),USE(?R2)

END

END

CODE

OPEN(WinView)

?OptVar1{PROP:ChoiceFeq} = ?R1 !Выбрать первую кнопку

ACCEPT

END

Смотри также: PROP:NumTabs, PROP:Child, PROP:ChildIndex, PROP:Parent

 

PROP:ClientHandle

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

Пример:

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL

END

MessageText CSTRING('You cannot exit the program from this window ')

MessageCaption CSTRING('No EVENT:CloseDown Allowed ')

TextAddr LONG

CaptionAddr LONG

RetVal SHORT

CODE

OPEN(WinView)

ACCEPT

CASE EVENT()

OF EVENT:CloseDown

TextAddr = ADDRESS(MessageText)

CaptionAddr = ADDRESS(MessageCaption)

RetVal = MessageBox(WinView{PROP:ClientHandle},TextAddr,CaptionAddr,MB_OK)

!Обращение к функции интерфейса прикладного программирования

!Windows с использованием идентификационный номер клиента

CYCLE !Запретить завершение программы из данного окна

END

END

 

PROP:ClientHeight

Свойство APPLICATION или WINDOW, которое возвращает высоту области окна клиента для того, чтобы использовать в обращениях на низком уровне интерфейса прикладного программирования API, где это требуется. Используется только для чтения.

 

PROP:ClientWidth

Свойство APPLICATION или WINDOW, которое возвращает ширину области окна клиента для того, чтобы использовать в обращениях на низком уровне интерфейса прикладного программирования API, где это требуется. Используется только для чтения.

 

PROP:ClientWndProc

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

Пример:

PROGRAM

MAP

Main

SubClassFunc(UNSIGNED hWnd,SIGNED wMsg,UNSIGNED wParam,LONG lParam),LONG,PASCAL

MODULE('win32') !Библиотека Windows

CallWindowProc(LONG,UNSIGNED,SIGNED,UNSIGNED,LONG),LONG,PASCAL,NAME('CallWindowProcA')

END

END

SavedProc LONG

PT GROUP,PRE(PT)

X SHORT

Y SHORT

END

CODE

Main

Main PROCEDURE

WinView WINDOW('View'),AT(0,0,320,200),HVSCROLL,MAX,TIMER(1)

STRING('X Pos'),AT(1,1,,),USE(?String1)

STRING(@n3),AT(24,1,,),USE(PT:X)

STRING('Y Pos'),AT(44,1,,),USE(?String2)

STRING(@n3),AT(68,1,,),USE(PT:Y)

BUTTON('Close'),AT(240,180,60,20),USE(?Close)

END

CODE

OPEN(WinView)

SavedProc = WinView{PROP:ClientWndProc} !Запомнить эту процедуру

WinView{PROP:ClientWndProc} = ADDRESS(SubClassFunc) !Изменить на процедуру подкласса

ACCEPT

CASE ACCEPTED()

OF ?Close

BREAK

END

END

SubClassFunc PROCEDURE(hWnd,wMsg,wParam,lParam) !Процедура подкласса

WM_MOUSEMOVE EQUATE(0200H) ! для отслеживания перемещения мыши

CODE ! в клиентской части окна

CASE wMsg

OF WM_MOUSEMOVE

PT:X = MOUSEX()

PT:Y = MOUSEY()

END

RETURN(CallWindowProc(SavedProc,hWnd,wMsg,wParam,lParam))

!Передать управление

! запомненной процедуре

PROP:ClientX

Свойство APPLICATION или WINDOW, которое возвращает горизонтальную позицию левого верхнего угла области окна клиента. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

 

PROP:ClientY

Свойство APPLICATION или WINDOW, которое возвращает вертикальную позицию левого верхнего угла области окна клиента. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

 

PROP:ClipBits

Свойство поля IMAGE, которое позволяет записать битовую карту изображения во внутренний буфер обмена (но не из него) Windows, если это свойство установлено в 1. Во внутреннем буфере обмена могут сохраняться в виде битовой карты только изображения типа .BMP, .PCX, и .GIF.

Пример:

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL

IMAGE(),AT(0,0,,),USE(?Image)

BUTTON('Save Picture'),AT(80,180,60,20),USE(?SavePic)

BUTTON('New Picture'),AT(160,180,60,20),USE(?NewPic)

END

FileName STRING(64) !Переменная для указания имени файла

CODE

OPEN(WinView)

DISABLE(?LastPic)

IF NOT FILEDIALOG('Choose File to View',FileName,'BitMap|*.BMP|PCX|*.PCX',0)

RETURN !Выйти, если файл не выбран

END

?Image{PROP:Text} = FileName

ACCEPT

CASE ACCEPTED()

OF ?NewPic

IF NOT FILEDIALOG('Choose File to View',FileName,'BitMap|*.BMP|PCX|*.PCX',0)

BREAK !Выйти, если файл не выбран

END

?Image{PROP:Text} = FileName

OF ?SavePic

?Image{PROP:ClipBits} = 1 !Поместить изображение в буфер обмена

ENABLE(?LastPic) ! активизировать кнопку Last Picture

END

END

 

PROP:ColorDialogHook

Свойство системной встроенной переменной SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры COLORDIALOG. Эквивалентно {PROP:LibHook,1}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры COLORDIALOG перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре COLORDIALOG, который можно обнаружить в файле BUILTINGS.CLW. (ТОЛЬКО ДЛЯ ЗАПИСИ)

 

PROP:ColorHighByte

Свойство системной встроенной переменной SYSTEM, которая определяет старший байт RGB DWORD, используя

SYSTEM{PROP:ColorHighByte} = n.

Установка значения n в ноль включает сглаживание цветов в режиме 256 цветов. Установка в 2 (по умолчанию) устанавливает систему в отображение однотонных цветов.

 

PROP:CustomColor

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

Синтаксис:

color = SYSTEM {PROP:CustomColor, n}

SYSTEM {PROP:CustomColor, n} = color

n должно быть целым значением в диапазоне между 1 и 16.

Это свойство возвращает значение RGB n-го элемента списка Пользовательских Цветов, содержащихся в стандартном диалоге выбора цвета. Если n-ый элемент не установлен, возвращается значение 0FFFFFFh (белый цвет).

Установка значения этого свойства устанавливает n-ый элемент списка Пользовательских цветов в стандартном диалоге выбора цветов для указания значения RGB.

 

PROP:DDEMode

Свойство системной встроенной переменной SYSTEM, которая позволяет устанавливать нормальное DDE событийное поведение. По умолчанию равно 0, вследствие чего все DDE события посылаются окну, открывшему DDE канал. Если же это свойство равняется единице (1), то все DDE события будут посланы верхнему окну текущего процесса.

Пример:

DDERetVal STRING(20)

WinOne WINDOW,AT(0,0,160,400)

ENTRY(@s20),USE(DDERetVal)

END

MyServer LONG

CODE

OPEN(WinOne)

SYSTEM{PROP:DDEMode} = 1 !Посылать события верхнему окну текущего процесса

MyServer = DDESERVER('MyApp','DataEntered') !Открыть в качестве сервера

ACCEPT

END

 

PROP:DDETimeOut

Свойство системной встроенной переменной SYSTEM, которая позволяет устанавливать и получать DDE тайм-аут, используемый для всех DDE команд. Это значение исчисляется в сотых долях секунды и по умолчанию равно 500.

Пример:

DDERetVal STRING(20)

WinOne WINDOW,AT(0,0,160,400)

ENTRY(@s20),USE(DDERetVal)

END

MyServer LONG

CODE

OPEN(WinOne)

SYSTEM{PROP:DDETimeOut} = 12000 !! Установить тайм-аут равным двум минутам

MyServer = DDESERVER('MyApp','DataEntered') !Открыть в качестве сервера

ACCEPT

CASE EVENT()

OF EVENT:DDErequest !Единожды востребованные данные

DDEWRITE(MyServer,DDE:manual,'DataEntered',DDERetVal)

!Единожды обеспечить данными

END

END

 

PROP:DeferMove

Свойство встроенной переменной SYSTEM, с помощью которого изменение размеров и/или перемещение экранного объекта откладывается до тех пор, пока не будет завершен цикл ACCEPT или свойство SYSTEM{PROP:DeferMove} не будет установлено в 0. Тем самым отменяется немедленное присвоение значений свойствам, связанным с расположением и размерами и все изменения размеров выполняются библиотечной процедурой за раз (исключая возможные временные наложения объектов друг на друга). Абсолютная величина числа, присваиваемого свойству SYSTEM{PROP:DeferMove} определяет число откладываемых изменений размеров, для которых заранее выделяется память (этот объем автоматически расширяется, но менее эффективно и может привести к аварии). Присвоение положительного числа означает автоматический сброс этого свойства в 0 при выполнении следующего цикла ACCEPT, в то время как присвоенное отрицательное число продолжает действовать до тех пор пока свойство явно не будет установлено в 0.

Для многопоточных приложений установка SYSTEM{PROP:DeferMove} в ненулевое значение инициирует отложенное перемещение только для текущего процесса.

 

PROP:DeferMove игнорируется, если свойство PROP:LazyDisplay установлено в ноль (0).

Пример:

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL

IMAGE(),AT(0,0,,),USE(?Image)

BUTTON('New Picture'),AT(160,180,60,20),USE(?NewPic)

BUTTON('Close'),AT(80,180,60,20),USE(?Close)

END

FileName STRING(64) !Переменная содержащая имя файла

ImageWidth SHORT

ImageHeight SHORT

CODE

OPEN(WinView)

DISABLE(?LastPic)

IF NOT FILEDIALOG('Choose File to View',FileName,'BitMap|*.BMP|PCX|*.PCX',0)

RETURN !Выйти, если не выбрано никакого файла

END

?Image{PROP:Text} = FileName

ACCEPT

CASE ACCEPTED()

OF ?NewPic

IF NOT FILEDIALOG('Choose File to View',FileName,'BitMap|*.BMP|PCX|*.PCX',0)

BREAK !Выйти, если не выбрано никакого файла

END

?Image{PROP:Text} = FileName

SYSTEM{PROP:DeferMove} = 4 !Отложить перемещение и изменение размеров

ImageWidth = ?Image{PROP:Width} !1 перемещение

ImageHeight = ?Image{PROP:Height} !2 перемещения

IF ImageWidth > 320

?Image{PROP:Width} = 320

?Image{PROP:XPos} = 0

ELSE

?Image{PROP:XPos} = (320 - ImageWidth) / 2 !Центрировать по горизонтали

END

IF ImageHeight > 180

?Image{PROP:Height} = 180

?Image{PROP:YPos} = 0

ELSE

?Image{PROP:YPos} = (180 - ImageHeight) / 2 !Центрировать по вертикали

END

OF ?Close

BREAK

END

END !Перемещение и изменение размеров произойдет по окончании цикла ACCEPT

 

PROP:Edit

Свойство объекта LIST, которое задает метку соответствия объекта для того, чтобы выполнить редактирование “по месту” в колонке окна списка. Это свойство является массивом, в котором каждый элемент представляет номер колонки, в которой выполняется редактирование. Когда элемент не равен нулю, то поле редактирования не скрыто и способно перемещаться и изменять размеры поверх текущей строки в колонке, что дает возможность пользователю вводить данные. Чтобы скрыть поле редактирования, присвойте свойству ноль (0).

Пример:

Q QUEUE

f1 STRING(15)

f2 STRING(15)

END

Win1 WINDOW('List Edit In Place'),AT(0,1,308,172),SYSTEM

LIST,AT(6,6,120,90),USE(?List),COLUMN,FORMAT('60L@s15@60L@s15@'), |

FROM(Q),ALRT(EnterKey)

END

?EditEntry EQUATE(100)

CODE

OPEN(Win1)

CREATE(?EditEntry,CREATE:Entry)

SELECT(?List,1)

ACCEPT

CASE FIELD()

OF ?List

CASE EVENT()

OF EVENT:AlertKey

IF KEYCODE() = EnterKey

SETKEYCODE(MouseLeft2)

POST(EVENT:Accepted,?List)

END

OF EVENT:NewSelection

IF ?List{PROP:edit,?List{PROP:column}}

GET(Q,CHOICE())

END

OF EVENT:Accepted

IF KEYCODE() = MouseLeft2

GET(Q,CHOICE())

?EditEntry{PROP:text} = ?List{PROPLIST:picture,?List{PROP:column}}

CASE ?List{PROP:column}

OF 1

?EditEntry{PROP:use} = Q.F1

OF 2

?EditEntry{PROP:use} = Q.F2

END

?List{PROP:edit,?List{PROP:column}} = ?EditEntry

. .

OF ?EditEntry

CASE EVENT()

OF EVENT:Selected

?EditEntry{PROP:Touched} = 1

OF EVENT:Accepted

PUT(Q)

?List{PROP:edit,?List{PROP:column}} = 0

. . .

 

PROP:Enabled

Возвращает пустую строку, если объект недоступен или из-за того, что он сам деактивирован оператором DISABLE, или он входит в состав деактивированного объекта (OPTION, GROUP, MENU, SHEET или TAB). Это свойство можно только опрашивать.

Пример:

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

SHEET,AT(0,0,320,175),USE(SelectedTab)

TAB('Tab One'),USE(?TabOne)

PROMPT('Enter Data:'),AT(100,100,20,20),USE(?P1)

ENTRY(@S8),AT(100,140,32,20),USE(E1)

PROMPT('Enter More Data:'),AT(100,200,20,20),USE(?P2)

ENTRY(@S8),AT(100,240,32,20),USE(E2)

END

TAB('Tab Two'),USE(?TabTwo)

PROMPT('Enter Data:'),AT(100,100,20,20),USE(?P3)

ENTRY(@S8),AT(100,140,32,20),USE(E3)

PROMPT('Enter More Data:'),AT(100,200,20,20),USE(?P4)

ENTRY(@S8),AT(100,240,32,20),USE(E4)

END

END

BUTTON('Ok'),AT(100,180,20,20),USE(?Ok)

BUTTON('Cancel'),AT(200,180,20,20),USE(?Cancel)

END

CODE

OPEN(MDIChild)

ACCEPT

CASE EVENT()

OF EVENT:Completed

BREAK

END

CASE FIELD()

OF ?Ok

CASE EVENT()

OF EVENT:Accepted

SELECT

END

OF ?E3

CASE EVENT()

OF EVENT:Accepted

IF ?E3{PROP:Enabled} AND MDIChild{PROP:AcceptAll}

!Проверить видимость объекта во время безостановочного режима

E3 = UPPER(E3) !Преобразовать введенные данные в верхний регистр

DISPLAY(?E3) ! и вывести данные большими буквами

END

END

OF ?Cancel

CASE EVENT()

OF EVENT:Accepted

BREAK

END

END

END

 

PROP:EventsWaiting

Свойство окна, которое возвращает значение, указывающее на то, остались ли на окне какие-нибудь ожидающие обработки события. Используется в основном Internet Connect для того, чтобы узнать, когда следует форматировать HTML страницу. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример:

IF TARGET{PROP:EventsWaiting} !Проверка на наличие ожидающих обработки событий

!!Произвести какие-нибудь действия

END

 

PROP:ExeVersion

Свойство, относящееся к встроенной переменной SYSTEM, которое возвращает номер версии EXE-файла, созданного системой Clarion for Windows. Это номер версии Clarion for Windows, в которой компилировался данный EXE-файла, даже если библиотека исполняющей системы от более нового релиза (см. свойство PROP:LibVersion). Это свойство впервые появилось в Clarion for Windows релиз 1501, поэтому для EXE модулей более старых версий оно возвращает пробел (READ-ONLY).

Пример:

MESSAGE('Compiled in CW release ' & SYSTEM{PROP:ExeVersion})

 

PROP:FatalErrorHook

Свойство системной встроенной переменной SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры. Эквивалентно {PROP:LibHook,9}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо внутренней процедуры перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать прототипу внутренней (STRING message,UNSIGNED ErrorNumber). (ТОЛЬКО ДЛЯ ЗАПИСИ)

 

PROP:FileDialogHook

Свойство системной встроенной переменной SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры FILEDIALOG. Эквивалентно {PROP:LibHook,2}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры FILEDIALOG перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре FILEDIALOG, обнаруженной в файле BUILTINGS.CLW (ТОЛЬКО ДЛЯ ЗАПИСИ)

 

PROP:FlushPageNumFunc

Свойство REPORT, которое устанавливает функцию обратного вызова во время “сбрасывания” просмотренных страниц. Функция обратного вызова возвращает номер следующей страницы, которая должна быть “сброшена”. Эта функция должна быть ПРОЦЕДУРОЙ, которая принимает единственный параметр LONG и возвращающая LONG.

Чтобы это включить, ADDRESS вашей обратной функции должен быть присвоен свойству FlushPageNumFunc. Чтобы выключить, присвойте ему ноль (0).

Когда ядро печати сбрасывает страницы не принтер, как результат выполнения Report{PROP:FlushPreview}, для извлечения номера следующей страницы для печати вызывается функция обратного вызова. Параметром передаваемый функции обратного вызова является номер последней напечатанной страницы или 0 перед печатью первой страницы. Если функция обратного вызова возвращает значение, выходящее за предел диапазона числа страниц в отчете, ядро печати останавливает печать и удаляет все записи из очереди предпростмотра.

Свойство PROP:FlushPageNumFunc может возвращать один и тот же номер страницы много раз перед закрытием отчета. Как только отчет закрыт, ядро печати удаляет созданные метафайлы.

Пример:

MAP

PageNum (LONG), LONG

END

CODE

OPEN (Report)

!Report processing code here

Report{PROP:FlushPageNumFunc} = ADDRESS(PageNum)

Report{PROP:FlushPreview} = TRUE

Report{PROP:FlushPageNumFunc} = 0

PageNum PROCEDURE (LONG LastPage)

CODE

IF LastPage = 0

RETURN 1

ELSE

RETURN LastPage + 2 ! Печать только нечетных страниц

END

 

PROP:FlushPreview

Выводит метафайлы, в которых в соответствии с атрибутом PREVIEW временно хранится отчет, на принтер (0 = выключено, иначе - включено, при открытии отчета всегда устанавливается в 0).

Пример:

SomeReport PROCEDURE

WMFQue QUEUE !Очередь, содержащая имена метафайлов

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)

IF ERRORCODE() THEN BREAK.

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) !Проверить, не конец ли отчета

CYCLE

END

GET(WMFQue,NextEntry) !Взять следующий элемент очереди

?ImageField{PROP:text} = WMFQue !Загрузить следующую страницу

DISPLAY ! И вывести ее

OF ?PrintReport

Report{PROP:FlushPreview} = 1 !Вывести файлы на принтер

BREAK ! и выйти из процедуры

OF ?ExitReport

BREAK !Выйти из процедуры

END

END

CLOSE(Report)

CLOSE(Window)

RETURN ! Вернуться в вызвавшую процедуру

! автоматически закрыв окно и отчет

! освободив память очереди, и автоматически

! удалив временные метафайлы

 

PROP:Follows

Изменяет порядок выбора полей клавишей TAB в рамках родительского объекта, в котором они находятся. Данный объект следует за объектом, номер которого задается в этом свойстве. Таким образом должен быть задан существующий элемент управления в пределах родительской структуры (окно (window), группа выбора (option), группа (group), меню (menu), отчет (report), детальная секция отчета (detail) и т.д.). Установка PROP:Follows на элементе управления REGION будет игнорирована, поскольку REGION не состоит в списке “перескакивания” Windows. (ТОЛЬКО ДЛЯ ЗАПИСИ)

Пример:

WinView WINDOW('View Report'),AT(0,0,320,200),MDI,MAX,HVSCROLL

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(WinView)

!Обычно за кнопкой Просмотр отчета следует кнопка Печать отчета

?PrintReport{PROP:Follows} = ?ExitReport

!Теперь кнопка Печать отчета следует за кнопкой Выход

ACCEPT

END

Смотри также: PROP:NextField

 

PROP:FontDialogHook

Свойство системной встроенной переменной SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры FONTDIALOG. Эквивалентно {PROP:LibHook,3}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры FONTDIALOGA перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре FONTDIALOGA, содержащийся в файле BUILTINS.CLW. (ТОЛЬКО ДЛЯ ЗАПИСИ)

 

PROP:HaltHook

Свойство системной встроенной переменной SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры HALT. Эквивалентно {PROP:LibHook,5}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры HALT перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре HALT, содержащийся в файле BUILTINS.CLW. (ТОЛЬКО ДЛЯ ЗАПИСИ)

 

PROP:Handle

Возвращает идентификатор окна или объекта для использования в низкоуровневых обращениях к функциям интерфейса прикладного программирования Windows API, которые требуют указания этого идентификатора. Оно также может быть использовано при присвоении идентификатора одного BLOB другому.

Пример:

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL

END

MessageText CSTRING('You cannot exit the program from this window ')

MessageCaption CSTRING('No EVENT:CloseDown Allowed ')

TextAddress LONG

CaptionAddress LONG

RetVal SHORT

CODE

OPEN(WinView)

ACCEPT

CASE EVENT()

OF EVENT:CloseDown

TextAddress = ADDRESS(MessageText)

CaptionAddress = ADDRESS(MessageCaption)

RetVal = MessageBox(WinView{PROP:Handle},TextAddress,CaptionAddress,MB_OK)

!В обращении к функции Windows API используется идентификатор окна

CYCLE !Запретить завершение программы из этого окна

END

END

 

PROP:HeaderHeight

Возвращает высоту заголовка объекта управления LIST или COMBO. Высота измеряется в условных единицах (если не установлено свойство PROP:Pixels). (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример:

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

LIST,AT(0,0,220,220),USE(?L1),FROM(Que),IMM,FORMAT('60L~Header Text~')

END

CODE

OPEN(MDIChild)

X# = ?L1{PROP:HeaderHeight} !Получить высоту заголовка в условных единицах

 

PROP:HscrollPos

Возвращает положение “бегунка” на горизонтальной линейке скроллинга (от 0 до 255) в окне, полях IMAGE, TEXT, LIST и COMBO, имеющих атрибут HSCROLL. Установка этого свойства приводит к тому, что происходит прокрутка содержимого окна или объекта в горизонтальном направлении.

Пример:

Que QUEUE

F1 STRING(50)

F2 STRING(50)

F3 STRING(50)

END

WinView WINDOW('View'),AT(,,340,200),SYSTEM,CENTER

LIST,AT(20,0,300,200),USE(?List),FROM(Que),IMM,HVSCROLL |

FORMAT('80L#1#80L#2#80L#3#')

END

CODE

OPEN(WinView)

DO BuildListQue

ACCEPT

CASE FIELD()

OF ?List

CASE EVENT()

OF EVENT:ScrollDrag

CASE (?List{PROP:HscrollPos} % 200) + 1

OF 1

?List{PROP:Format} = '80L#1#80L#2#80L#3#'

OF 2

?List{PROP:Format} = '80L#2#80L#3#80L#1#'

OF 3

?List{PROP:Format} = '80L#3#80L#1#80L#2#'

END

DISPLAY

. . .

FREE(Que)

BuildListQue ROUTINE

LOOP 15 TIMES

Que.F1 = 'F1F1F1F1'

Que.F2 = 'F2F2F2F2'

Que.F3 = 'F3F3F3F3'

ADD(Que)

END

 

PROP:IconList

Массив, который устанавливает или возвращает иконки, отображаемые в Окне списка (LIST), для которого такая возможность предусмотрена (обычно это древовидный список). Если имя присваиваемого файла иконки содержит в конце число в квадратных скобках, то это означает, что данный файл содержит несколько иконок. Заключенное же в скобках число определяет ту иконку, которую следует применить (отсчет начинается с нуля). Если имени файла иконки предшествует тильда (~), пристыкованная к нему (~IconFile.ICO), то это указывает на то, что файл был помещен в проект в качестве ресурса и на диске отсутствует.

Пример:

PROGRAM

MAP

RandomAlphaData PROCEDURE(*STRING Field)

END

TreeDemo QUEUE,PRE() !Очередь, данные из которой выводятся в окне

FName STRING(20)

ColorNFG LONG !Цвет переднего плана для нормального поля FName

ColorNBG LONG !Цвет фона для нормального поля FName

ColorSFG LONG !Цвет переднего плана для выбранного поля FName

ColorSBG LONG !Цвет фона для выбранного поля FName

IconField LONG !Номер пиктограммы для поля FName

TreeLevel LONG !Уровень вложенности

LName STRING(20)

Init STRING(4)

END

Win WINDOW('List Box'),AT(0,0,374,314),FONT('Tahoma',8,,FONT:regular,CHARSET:ANSI),|

SYSTEM,GRAY,DOUBLE

LIST,AT(3,4,369,306),USE(?Show),HVSCROLL,COLOR(,COLOR:Black,0E7E7E7H),|

FORMAT('121L(2)|M*IT~First Name~149L(2)|M~Last Name~16C(2)|M~Initials~'), |

FROM(TreeDemo),GRID(0E7E7E7H)

END

x long

CODE

LOOP x = 1 to 20

RandomAlphaData(FName)

ColorNFG = COLOR:Black !Назначить цвета для поля FNAME

ColorNBG = 0F0FFFFH

ColorSFG = COLOR:White

ColorSBG = COLOR:Silver

IconField = ((x-1) % 4) + 1 !Назначить номер пиктограммы

TreeLevel = ((x-1) % 4) + 1 !Назначить уровень вложенности

RandomAlphaData(LName)

RandomAlphaData(Init)

ADD(TreeDemo)

END

OPEN(Win)

?Show{prop:lineheight} = 10

?Show{PROP:iconlist,1} = ICON:VCRback !Icon 1 = <

?Show{PROP:iconlist,2} = ICON:VCRrewind !Icon 2 = <<

?Show{PROP:iconlist,3} = 'VCRdown.ico' !Icon 3 = > не связана с проектом

?Show{PROP:iconlist,4} = '~VCRnext.ico' !Icon 4 = >>связана с проектом

ACCEPT

END

RandomAlphaData PROCEDURE(*STRING Field)

CODE

y# = RANDOM(1,SIZE(Field)) !Произвольный размер

LOOP x# = 1 to y# !Занести каждый символ

Field[x#] = CHR(RANDOM(97,122)) !случайной буквой с нижним регистром

END

 

PROP:ImageBits

Свойство поля типа IMAGE, который позволяет перемещать изображение в виде битового массива в (из) memo-поле(я). Любое отображаемое в экранном поле изображение может храниться memo-поле. PROP:ImageBlob подобным образом оперирует и с BLOB.

Пример:

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL

IMAGE(),AT(0,0,,),USE(?Image)

BUTTON('Save Picture'),AT(80,180,60,20),USE(?SavePic)

BUTTON('New Picture'),AT(160,180,60,20),USE(?NewPic)

BUTTON('Last Picture'),AT(240,180,60,20),USE(?LastPic)

END

SomeFile FILE,DRIVER('Clarion'),PRE(Fil) !Файл с memo-полем

MyMemo MEMO(65520),BINARY

Rec RECORD

F1 LONG

. .

FileName STRING(64) !Переменная, в которой содержится имя файла

CODE

OPEN(SomeFile)

OPEN(WinView)

DISABLE(?LastPic)

IF NOT FILEDIALOG('Choose File to View',FileName,'BitMap|*.BMP|PCX|*.PCX',0)

RETURN !Выйти, если никакой файл не выбран

END

?Image{PROP:Text} = FileName

ACCEPT

CASE ACCEPTED()

OF ?NewPic

IF NOT FILEDIALOG('Choose File to View',FileName,'BitMap|*.BMP|PCX|*.PCX',0)

BREAK !Выйти, если никакой файл не выбран

END

?Image{PROP:Text} = FileName

OF ?SavePic

Fil:MyMemo = ?Image{PROP:ImageBits} !Поместить изображение в memo-поле

ADD(SomeFile) ! и сохранить его в файле на диске

ENABLE(?LastPic) ! активизировать кнопку Last Picture

OF ?LastPic

?Image{PROP:ImageBits} = Fil:MyMemo !Вывести последнее сохраненное memo-поле

END

END

 

PROP:ImageBlob

Свойство поля IMAGE, который позволяет изображение, отображаемое в поле перемещать в/из поле типа BLOB. Любое отображаемое в экранном поле изображение может храниться поле BLOB. PROP:ImageBits подобным образом оперирует и с MEMO. Большинство изображений хранится в двоичном формате по умолчанию (за исключением PCX и GIF), в то время как PROP:PrintMode устанавливает хранение с собственном формате.

 

PROP:ImageInstance

Свойство SYSTEM, которое возвращает HINSTANCE активного EXE/DLL с внедренными файлами изображений. Что касается ресурсов изображений/курсоров: библиотека времени исполнения ищет их не только в исполняемой программе, которая содержит значение PROP:ImageInstance, но и в EXE или DLL откуда был запущен текущий активный процесс окна.

 

PROP:InitAStringHook

Свойство встроенной переменной SYSTEM, которое позволяет установить процедуру для автоматической инициализации значений TIE для присвоения конкретного значения во время первого показа ASTRING. Эквивалентно {PROP:LibHook,14}. Присвойте значение ADDRESS в процедуру InitAString и библиотечная функция вызовет ее для присвоения первого значения ASTRING. Присвоение ноля приостановит вызов библиотечной функцией процедуры InitAString. (ТОЛЬКО ДЛЯ ЗАПИСИ)

 

PROP:Interface

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

 

PROP:InToolbar

Переключаемый атрибут, который показывает, находится ли данный элемент управления внутри структуры TOOLBAR. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример:

WinView WINDOW('View'),AT(0,0,,),MDI,MAX,HVSCROLL,SYSTEM,RESIZE

TOOLBAR

BUTTON('Save Picture'),AT(80,180,60,20),USE(?SavePic)

END

LIST,AT(6,6,120,90),USE(?List),FORMAT('120L'),FROM(Q),IMM

END

CODE

OPEN(WinView)

IF ?SavePic{PROP:InToolbar} = TRUE

!DO Something

END

ACCEPT

END

 

PROP:IPRequestCount

IPRequestCount является свойством чтения/записи используемым исключительно SoftVelocity IP Driver, который устанавливает число запросов, посылаемых серверу в одном MRP (Multiple Request Packet). Сервер затем выполнит указанное число операторов и вернет результат клиенту в пакете MRP. Если свойство установлено в -1, текущий пакет отправиться немедленно. Если свойство установлено в ноль, текущий пакет сбрасывается и серверу ничего не отправляется.

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

Синтаксис:

структура{PROP:IPRequestCount} = число

структура метка FILE или VIEW

число число запросов отправленное серверу в одном MRP. Максимальное значение 1000000.

Пример:

myfile{PROP:IPRequestCount} = 20 ! создать пакет с 20-ю запросами

NEXT(myfile) ! отправить пакет серверу с 20-ю операторами NEXT

nRecNum = myfile{PROP:IPRequestCount} ! получить число записей в пакете MRP

 

PROP:Items

Возвращает или устанавливает число элементов списка отображаемых в окне списка или комбинированном окне списка.

Пример:

Que QUEUE

STRING(30)

END

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL,SYSTEM

LIST,AT(6,6,120,90),USE(?List),FORMAT('120L'),FROM(Q),IMM

END

CODE

OPEN(WinView)

SET(SomeFile)

LOOP ?List(PROP:Items} TIMES !Заполнить очередь до предельного числа отображаемых элементов

NEXT(SomeFile)

Que = Fil:Record

ADD(Que)

END

ACCEPT

END

 

PROP:LazyDisplay

Свойство SYSTEM, которое выключает (если установлено в 1) и включает (если установлено в 0, что делается по умолчанию) возможность полной перерисовки окна перед выполнением оператора, следующего за оператором DISPLAY. PROP:LazyDisplay = 1 устанавливает ощутимо более быструю работу с видеоизображением, поскольку перерисовка окна происходит по окончании цикла ACCEPT, если отсутствуют ожидающие сообщения. Эта установка может существенно увеличить производительность некоторых приложений, но может также отрицательно влиять на его внешний вид.

Пример:

WinView APPLICATION('MyApp'),AT(0,0,320,200),MAX,HVSCROLL,SYSTEM

END

CODE

OPEN(WinView)

SYSTEM{PROP:LazyDisplay} = 1 !Запретить дополнительные перерисовки окон

! на протяжении всего приложения

ACCEPT

END

 

PROP:LFNSupport

ЗАМЕЧАНИЕ: Это свойство не поддерживается этим релизом.

Свойство системной встроенной переменной SYSTEM, которое в 16-битных программах возвращает единицу (1), если операционная система поддерживает длинные имена файлов, и пустую строку (‘’) -если нет. Все 32-битные операционные системы обеспечивают поддержку длинных имен файлов. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример:

IF SYSTEM{PROP:LFNSupport} = TRUE

MESSAGE('Long Filenames are supported')

ELSE

MESSAGE('Long Filenames are NOT supported')

END

 

PROP:LibHook

Множественное свойство системной встроенной переменной SYSTEM, которая определяет для некоторых внутренних процедур Clarion перекрывающие их процедуры. Для каждой из таких процедур назначается адрес (ADDRESS) перекрывающей процедуры, и тогда выполняемая библиотека при работе программы вызовет вместо процедуры из библиотеки Clarion перекрывающую ее процедуру. Прототип перекрывающей процедуры должен в точности соответствовать внутренней процедуре Clarion как объявлено в Builtins.clw. Эти свойства были реализованы для упрощения в Internet Connect. (ТОЛЬКО ДЛЯ ЗАПИСИ)

{PROP:Libhook, 1} PROP:ColorDialogHook

{PROP:Libhook, 2} PROP:FileDialogHook

{PROP:Libhook, 3} PROP:FontDialogHook

{PROP:Libhook, 4} PROP:PrinterDialogHook

{PROP:Libhook, 5} PROP:HaltHook

{PROP:Libhook, 6} PROP:MessageHook

{PROP:Libhook, 7} PROP:StopHook

{PROP:Libhook, 8} PROP:AssertHook

{PROP:Libhook, 9} PROP:FatalErrorHook

{PROP:Libhook, 12} PROP:SystemPropHook

{PROP:Libhook, 13} PROP:AssertHook2

{PROP:Libhook, 14} PROP:InitAStringHook

{PROP:Libhook, 15) PROP:UnlockThreadHook

{PROP:Libhook, 16) PROP:LockThreadHook

{PROP:Libhook, 17) PROP:ThreadLockedHook

 

PROP:LibVersion

Свойство встроенной переменной SYSTEM, которое возвращает номер версии библиотеки исполняемой системы Clarion for Windows (.DLL) загруженной в данный момент для исполняемого в данный момент EXE. модуля. Это не одно и тоже, что версия Clarion for Windows, в которой компилировался данный EXE. модуль (см. PROP:ExeVersion). Это свойство впервые появилось в Clarion for Windows релиз 1501, поэтому для EXE модулей более старых версий PROP:ExeVersion возвращает пробел (ТОЛЬКО ДЛЯ ЧТЕНИЯ).

Пример:

MESSAGE('Runtime DLL from release ' & SYSTEM{PROP:LibVersion})

 

PROP:Line и PROP:LineCount

PROP:Line является множеством, каждый элемент которого содержит строку (линию) текста в поле TEXT. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

PROP:LineCount возвращает число строк (линий) текста в поле TEXT или общее число записей в источнике окна списка. Также применяется, если источник записей не является очередью. Если же источник является очередью, возвращает значение равное RECORDS(очередь). (ТОЛЬКО ЧТЕНИЕ)

Пример:

LineCount SHORT

MemoLine STRING(80)

CustRpt REPORT,AT(1000,1000,6500,9000),THOUS

Detail1 DETAIL,AT(0,0,6500,6000)

TEXT,AT(0,0,6500,6000),USE(Fil:MemoField)

END

Detail2 DETAIL,AT(0,0,6500,125)

STRING(@s80),AT(0,0,6500,125),USE(MemoLine)

END

END

CODE

OPEN(File)

SET(File)

OPEN(CustRpt)

LOOP

NEXT(File)

LineCount = CustRpt$?Fil:MemoField{PROP:LineCount}

LOOP X# = 1 TO LineCount

MemoLine = CustRpt$?Fil:MemoField{PROP:Line,X#}

PRINT(Detail2)

END

END

 

PROP:LineHeight

Устанавливает и возвращает высоту строки объекта управления LIST или COMBO. Ширина измеряется в условных единицах (если не установлено свойство PROP:Pixels). Для объекта TEXT оно возвращает высоту знакоместа шрифта для данного объекта (расстояние от верха одной строки текста до верха следующей строки) в установленных на данный момент единицах измерения. Для объекта типа TEXT это свойство ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример:

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

LIST,AT(0,0,220,220),USE(?L1),FROM(Que),IMM

END

CODE

OPEN(MDIChild)

?L1{PROP:LineHeight} = 8 !Установить высоту в 8 условных единиц

 

PROP:MaxHeight

PROP:MaxHeight устанавливает или возвращает максимально возможную высоту окна, изменяемых размеров.

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

Пример:

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL,SYSTEM,RESIZE,|

LIST,AT(6,6,120,90),USE(?List),FORMAT('120L'),FROM(Q),IMM

END

CODE

OPEN(WinView)

WinView{PROP:MaxHeight} = 200 !Установить границы за пределы которых пользователь

WinView{PROP:MaxWidth} = 320 ! не может раздвинуть окно

WinView{PROP:MinHeight} = 90

WinView{PROP:MinWidth} = 120

ACCEPT

END

 

PROP:MaxWidth

PROP:MaxWidth устанавливает или возвращает максимально возможную ширину окна, изменяемых размеров.

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

Пример:

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL,SYSTEM,RESIZE,|

LIST,AT(6,6,120,90),USE(?List),FORMAT('120L'),FROM(Q),IMM

END

CODE

OPEN(WinView)

WinView{PROP:MaxHeight} = 200 !Установить границы за пределы которых пользователь

WinView{PROP:MaxWidth} = 320 ! не может раздвинуть окно

WinView{PROP:MinHeight} = 90

WinView{PROP:MinWidth} = 120

ACCEPT

END

 

PROP:MenuBar

Свойство окна, используемое для получения Метки соответствия поля оконного меню. Это свойство только для чтения.

Пример:

MenubarFEQ = MyWindowLabel{PROP:Menubar} !получить метку соответствия меню

 

PROP:MessageHook

Свойство системной встроенной переменной SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры MESSAGE. Эквивалентно {PROP:LibHook,6}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры MESSAGE перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре MESSAGE, содержащийся в файле BUILTINS.CLW. (ТОЛЬКО ДЛЯ ЗАПИСИ)

 

PROP:MinHeight

PROP:MinHeight устанавливает или возвращает минимально возможную высоту окна, изменяемых размеров.

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

Пример:

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL,SYSTEM,RESIZE,|

LIST,AT(6,6,120,90),USE(?List),FORMAT('120L'),FROM(Q),IMM

END

CODE

OPEN(WinView)

WinView{PROP:MaxHeight} = 200 !Установить границы за пределы которых пользователь

WinView{PROP:MaxWidth} = 320 ! не может раздвинуть окно

WinView{PROP:MinHeight} = 90

WinView{PROP:MinWidth} = 120

ACCEPT

END

 

PROP:MinWidth

PROP:MinWidth устанавливает или возвращает минимально возможную ширину окна, изменяемых размеров. Также устанавливает минимальную ширину листов (TAB) в SHEET.

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

Пример:

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL,SYSTEM,RESIZE|

LIST,AT(6,6,120,90),USE(?List),FORMAT('120L'),FROM(Q),IMM

END

CODE

OPEN(WinView)

WinView{PROP:MaxHeight} = 200 !Установить границы за пределы которых пользователь

WinView{PROP:MaxWidth} = 320 ! не может раздвинуть окно

WinView{PROP:MinHeight} = 90

WinView{PROP:MinWidth} = 120

ACCEPT

END

 

PROP:NextField

Множественное свойство, возвращающее номер следующего элемента управления в последовательности их размещения на окне или в отчете. (ТОЛЬКО ДЛЯ ЧТЕНИЯ) Возвращаемый номер соответствует элементу управления, номер которого следует после элемента массива, относящегося к текущему элементу управления. Порядок, в котором PROP:NextField возвращает номера полей, неопределен. Если номер элемента управления стоит в списке последним, PROP:NextField возвращает ноль. Это свойство предоставляет возможность легко организовать цикл по всем элементам управления на окне или в отчете, независимо от того, имеют ли эти элементы управления атрибуты USE, или нет.

Пример:

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL

IMAGE(),AT(0,0,,),USE(?Image)

BUTTON('Save Picture'),AT(80,180,60,20),USE(?SavePic)

BUTTON('New Picture'),AT(160,180,60,20),USE(?NewPic)

BUTTON('Last Picture'),AT(240,180,60,20),USE(?LastPic)

END

ThisField SHORT(0)

CODE

OPEN(WinView)

LOOP

ThisField = WinView{PROP:NextField,ThisField} !Обработка каждого поля

IF ThisField

ThisField{PROP:FontName} = 'Arial' !Изменить шрифт

ThisField{PROP:FontSize} = 10

ELSE

BREAK !Прервать по окончании

. .

ACCEPT

END

Смотри также: PROP:Follows

PROP:NextPageNo

Свойство, которое устанавливает или возвращает номер следующей страницы отчета.

Имейте ввиду, что возвращаемый свойством NextPageNo номер страницы может еще быть не определен ядром печати. Эти особенности “страничной печати” (напр. WITHPRIOR/WITHNEXT) могут быть связаны с кэшированием печатаемых структур и задержки определения конца страницы. Чтобы быть уверенным в том, что получаемые вами страницы последние в кэше, используйте оператор ENDPAGE.

Номер следующей страницы может быть также переустановлен использованием атрибутов PAGEBEFORE или PAGEAFTER в структуре DETAIL.

Пример:

CustRpt REPORT,AT(1000,1000,6500,9000),THOUS

HEADER

STRING(@n3),USE(?Page),PAGENO

END

Detail DETAIL,AT(0,0,6500,1000)

STRING,AT(10,10),USE(Fil:Field)

END

END

CODE

OPEN(File)

SET(File)

OPEN(CustRpt)

LOOP

NEXT(File)

IF Fil:KeyField <> Sav:KeyField !Определить разрыв группы

Sav:KeyField = Fil:KeyField !Определить разрыв группы

ENDPAGE !Инициировать разрыв страницы

CustRpt{PROP:NextPageNo} = 1 !Каждая группа начинается на странице с номером 1

END

PRINT(Detail)

END

CLOSE(CustRpt)

CLOSE(File)

Смотри также: REPORT, ENDPAGE, PAGEBEFORE, PAGEAFTER

 

PROP:NextTabStop и PROP:PrevTabStop

PROP:NextTabStop возвращает следующее поле (метку соответствия поля) которое может иметь фокус и получать его нажатием клавиши Tab.

PROP:PrevTabStop возвращает предыдущее поле (метку соответствия поля) которое может иметь фокус и получать его нажатием клавиши ShiftTab.

Пример:

NextControlFEQ = window{PROP:NextTabStop} !получить следующее поле

PrevControlFEQ = window{PROP:PrevTabStop} !получить предыдущее поле

Window{PROP:NextTabStop} = ?List !Установить следующее поле

 

PROP:NoFrame

Свойство PROP:NoFrame допустимо для любых текущих объектов (BUTTON, CHECK, RADIO) содержащих изображение.

Если PROP:NoFrame установлено в ИСТИНУ, исполняемая библиотека времени исполнения не отображает прямоугольник на объекте имеющем фокус.

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

PROP:NoFrame не влияет на объекты не имеющим изображение.

Пример:

?Button {PROP:Icon} = 'Animated.GIF'

?Button {PROP:NoFrame} = TRUE

По умолчанию значение этого свойства установлено в ЛОЖЬ. Это свойство может быть установлено только во время исполнения программы.

 

PROP:NoHeight and PROP:NoWidth

PROP:NoHeight переключаемый атрибут, говорящий о том, была ли высота окна или элемента управления установлена по умолчанию (был ли пропущен в атрибуте AT параметр высоты). Установка этого свойства равным Истине (TRUE) эквивалентна переустановке высоты элемента управления на значение по умолчанию, задаваемое библиотекой (чего нельзя сделать с использованием PROP:Height).

PROP:NoWidth переключаемый атрибут, говорящий о том, была ли ширина окна или элемента управления установлена по умолчанию (был ли пропущен в атрибуте AT параметр ширины). Установка этого свойства равным Истине (TRUE) эквивалентна переустановке ширины элемента управления на значение по умолчанию, задаваемое библиотекой (чего нельзя сделать с использованием PROP:Width).

Пример:

WinView WINDOW('View'),AT(0,0,,),MDI,MAX,HVSCROLL,SYSTEM,RESIZE

LIST,AT(6,6,120,90),USE(?List),FORMAT('120L'),FROM(Q),IMM

END

CODE

OPEN(WinView)

IF WinView{PROP:NoHeight} = TRUE

WinView{PROP:Height} = 200 !Установить высоту

END

IF WinView{PROP:NoWidth} = TRUE

WinView{PROP:Width} = 320 !Установить ширину

END

ACCEPT

END

 

PROP:NoTips

Выключает (если установлена 1) или включает (если 0) подсказку (атрибут TIP) для системы, окна или поля в окне.

Пример:

WinView APPLICATION('MyApp'),AT(0,0,320,200),MAX,HVSCROLL,SYSTEM

END

CODE

OPEN(WinView)

SYSTEM{PROP:NoTips} = 1 !Выключить вывод инструментальной подсказки во всем приложении

ACCEPT

END

 

PROP:NumTabs

Возвращает число объектов TAB в структуре SHEET. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример:

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

SHEET,AT(0,0,320,175),USE(SelectedTab)

TAB('Tab One'),USE(?TabOne)

OPTION('Option 1'),USE(OptVar1),KEY(F10Key),HLP('Option1Help')

RADIO('Radio 1'),AT(20,0,20,20),USE(?R1)

RADIO('Radio 2'),AT(40,0,20,20),USE(?R2)

END

OPTION('Option 2'),USE(OptVar2),MSG('Option 2')

RADIO('Radio 3'),AT(60,0,20,20),USE(?R3)

RADIO('Radio 4'),AT(80,0,20,20),USE(?R4)

END

END

TAB('Tab Two'),USE(?TabTwo)

PROMPT('Enter Data:'),AT(100,100,20,20),USE(?P1)

ENTRY(@S8),AT(100,140,32,20),USE(E1)

PROMPT('Enter More Data:'),AT(100,200,20,20),USE(?P2)

ENTRY(@S8),AT(100,240,32,20),USE(E2)

END

TAB('Tab Three'),USE(?TabThree)

OPTION('Option 3'),USE(OptVar3)

RADIO('Radio 1'),AT(20,0,20,20),USE(?R5)

RADIO('Radio 2'),AT(40,0,20,20),USE(?R6)

END

OPTION('Option 4'),USE(OptVar4)

RADIO('Radio 3'),AT(60,0,20,20),USE(?R7)

RADIO('Radio 4'),AT(80,0,20,20),USE(?R8)

END

END

TAB('Tab Four'),USE(?TabFour)

PROMPT('Enter Data:'),AT(100,100,20,20),USE(?P3)

ENTRY(@S8),AT(100,140,32,20),USE(E3)

PROMPT('Enter More Data:'),AT(100,200,20,20),USE(?P4)

ENTRY(@S8),AT(100,240,32,20),USE(E4)

END

END

BUTTON('Ok'),AT(100,180,20,20),USE(?Ok)

BUTTON('Cancel'),AT(200,180,20,20),USE(?Cancel)

END

CODE

OPEN(MDIChild)

MESSAGE('Number of TABs: ' & ?SelectedTab{PROP:NumTabs})

MESSAGE('Number of rows of TABs: ' & ?SelectedTab{PROP:TabRows})

ACCEPT

END

Смотри также: PROP:Child, PROP:ChildIndex, PROP:ChoiceFEQ, PROP:Parent

PROP:Parent

Возвращает родительский элемент управления (такой, как OPTION, SHEET или GROUP, или DETAIL, TOOLBAR или MENUBAR ), в структуре которого содержится данный элемент управления. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример 1:

WinView WINDOW('MyApp'),AT(0,0,320,200),MAX,HVSCROLL,SYSTEM

END

OptionSelected STRING(6)

?OptionControl EQUATE(100) !Номер метки соответствия поля, используемой CREATE

?Radio1 EQUATE(101) !Номер метки соответствия поля, используемой CREATE

?Radio2 EQUATE(102) !Номер метки соответствия поля, используемой CREATE

CODE

OPEN(WinView)

CREATE(?OptionControl,CREATE:option) !Создать элемент управления OPTION

?OptionControl{PROP:use} = OptionSelected

?OptionControl{PROP:Text} = 'Pick one'

?OptionControl{PROP:Boxed} = TRUE

SETPOSITION(?OptionControl,10,10)

CREATE(?Radio1,CREATE:radio,?OptionControl) !Создать элемент управления RADIO

?Radio1{PROP:Text} = 'First'

SETPOSITION(?Radio1,12,20)

!Создать еще один, принадлежащий тому же родителю:

CREATE(?Radio2,CREATE:radio,?Radio1{PROP:Parent})

?Radio2{PROP:Text} = 'Second'

SETPOSITION(?Radio2,12,30)

UNHIDE(?OptionControl,?Radio2) !Отобразить новые элементы управления

ACCEPT

END

Пример 2:

!-----------------------------------------------------------------------

WinParent WINDOW('Caption'),AT(0,0,320,200),SYSTEM,GRAY,MDI

SHEET,AT(x,x,x,x), USE(?Sheet)

TAB('Tab 1'), USE(?Tab1)

PROMPT('Prompt1:'), AT(x,x,x,x), USE(?Prompt1)

ENTRY(@s20), AT(x,x,x,x), USE(Loc.Var)

END

END

BUTTON('Close'),AT(x,x,x,x), USE(?Close)

END

 

! ?Sheet{Prop:Parent} Принадлежит WinParent

! ?Tab1{Prop:Parent} Принадлежит ?Sheet

! ?Prompt1{Prop:Parent} Принадлежит ?Tab1

! ?Loc:Var{Prop:Parent} Принадлежит ?Tab1

! ?Close{Prop:Parent} Принадлежит WinParent

Смотри также: PROP:NumTabs, PROP:Child, PROP:ChildIndex, PROP:ChoiceFEQ

 

PROP:Pixels

Свойство окна, которое переключает единицы измерения линейных размеров между условными единицами и пикселами (не относится к печатным документам). После установки этого свойства все свойства и функции позиционирования (такие как GETPOSITION, SETPOSITION, MOUSEX, MOUSEY, PROP:Xpos, PROP:Ypos, PROP:Width и PROP:Height) возвращают и воспринимают координаты в пикселах, а не в условных единицах.

Пример:

WinView WINDOW('MyApp'),AT(0,0,320,200),MAX,HVSCROLL,SYSTEM

END

CODE

OPEN(WinView)

WinView{PROP:Pixels} = 1 !Изменить единицы измерения на пиксели

ACCEPT

!все свойства и функции позиционирования теперь возвращают пиксели

END

 

PROP:PrinterDialogHook

Свойство системной встроенной переменной SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры PRINTERDIALOG. Эквивалентно {PROP:LibHook,4}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры PRINTERDIALOG перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре PRINTERDIALOG, содержащейся в BUILTINS.CLW. (ТОЛЬКО ДЛЯ ЗАПИСИ)

 

PROP:PrintMode

Системное или принадлежащее элементу управления IMAGE свойство, которое указывает как PROP:ImageBlob хранит изображения в BLOB. Бит 0 указывает требуется ли информация о декодировании изображения. Бит 1 – требуется ли некодированная информация. Когда установлен в 3, то доступны и оригинальные данные и декодированные DIB данные, позволяющие PROP:ImageBlob хранить информацию в собственном формате (таком как JPG) в BLOB.

Пример:

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL

IMAGE(),AT(0,0,,),USE(?Image)

BUTTON('Save Picture'),AT(80,180,60,20),USE(?SavePic)

BUTTON('New Picture'),AT(160,180,60,20),USE(?NewPic)

BUTTON('Last Picture'),AT(240,180,60,20),USE(?LastPic)

END

SomeFile FILE,DRIVER('TopSpeed'),PRE(Fil) !Файл с полем memo

MyBlob BLOB,BINARY

Rec RECORD

F1 LONG

. .

FileName STRING(64) !Перменная с именем файла

CODE

OPEN(SomeFile); OPEN(WinView)

DISABLE(?LastPic)

IF NOT FILEDIALOG('File to View',FileName,'Images|*.BMP;*.PCX;*.JPG;*.WMF',0)

RETURN !Завершить если файл не найден

END

?Image{PROP:PrintMode} = 3 !Установить для хранения в собственном формате

?Image{PROP:Text} = FileName

ACCEPT

CASE ACCEPTED()

OF ?NewPic

IF NOT FILEDIALOG('File to View',FileName,'Images|*.BMP;*.PCX;*.JPG;*.WMF',0)

BREAK

END

?Image{PROP:Text} = FileName

OF ?SavePic

Fil:MyBlob{PROP:Handle} = ?Image{PROP:ImageBlob} !Поместить изображение в BLOB

ADD(SomeFile) ! и сохранить в файл на диске

ENABLE(?LastPic) ! активировать кнопку Last Picture

OF ?LastPic

?Image{PROP:ImageBlob} = Fil:MyBlob{PROP:Handle} !Записать последний сохраненный BLOB в файл

END

END

 

PROP:Progress

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

Пример:

BackgroundProcess PROCEDURE !Фоновая процедура

Win WINDOW('Batch Processing...'),AT(,,400,400),TIMER(1),MDI,CENTER

PROGRESS,AT(100,140,200,20),USE(?ProgressBar),RANGE(0,200)

BUTTON('Cancel'),AT(190,300,20,20),STD(STD:Close)

END

CODE

OPEN(Win)

OPEN(File)

?ProgressBar{PROP:rangehigh} = RECORDS(File)

SET(File) !Установить пакетную обработку

ACCEPT

CASE EVENT()

OF EVENT:CloseWindow

BREAK

OF EVENT:Timer !Обрабатывать записи когда таймер позволяет

ProgressVariable += 3 !Автоматическое обновление 1-го индикатора

LOOP 3 TIMES

NEXT(File)

IF ERRORCODE() THEN BREAK.

?ProgressBar{PROP:progress} = ?ProgressBar{PROP:progress} + 1

!Ручное обновление индикатора

!выполнение неких пакетных операций

. . .

CLOSE(File)

 

PROP:PropVscroll

Это свойство используется для того, чтобы определить как отображается “бегунок” вертикальной линейки прокрутки.

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

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

Это свойство доступно для объектов LIST и COMBO, а также для SYSTEM. Вновь созданные объекты LIST и COMBO наследуют текущее значение этого свойства из установок SYSTEM.

 

PROP:RejectCode

Свойство таких элементов управления, как ENTRY, TEXT, COMBO или SPIN, которое возвращает последнее значение REJECTCODE набора значений при EVENT:Rejected. Свойство PROP:RejectCode действует постоянно, в то время как процедура REJECTCODE возвращает корректное значение только в течение EVENT:Rejected.

Пример:

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

PROMPT('Enter Data:'),AT(100,100,20,20),USE(?P1)

ENTRY(@N8),AT(100,140,32,20),USE(E1)

BUTTON('Ok'),AT(100,180,20,20),USE(?Ok)

BUTTON('Cancel'),AT(200,180,20,20),USE(?Cancel)

END

CODE

OPEN(MDIChild)

ACCEPT

CASE EVENT()

OF EVENT:Completed

BREAK

END

CASE FIELD()

OF ?Ok

CASE EVENT()

OF EVENT:Accepted

SELECT

END

OF ?E1

CASE EVENT()

OF EVENT:Accepted

IF ?E1{PROP:RejectCode} <> 0 !Если имеет место отказ от поля,

SELECT(?) ! тут же принудить пользователя

CYCLE ! повторить ввод в это же поле

END

END

OF ?Cancel

CASE EVENT()

OF EVENT:Accepted

BREAK

END

END

END

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

PROP:ScreenText

Возвращает текст выводимый на экране в заданном поле.

Пример:

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL

SPIN(@n3),AT(0,0,320,180),USE(Fil:Field),RANGE(0,255)

END

CODE

OPEN(WinView)

ACCEPT

CASE FIELD()

OF ?Fil:Field

CASE EVENT()

OF EVENT:Rejected

MESSAGE(?Fil:Field{PROP:ScreenText} & ' is not in the range 0-255')

SELECT(?)

CYCLE

END

END

END

Смотри также: CONTENTS, CHANGE

PROP:SelStart (или PROP:Selected) и PROP:SelEnd

PROP:SelStart (также называется PROP:Selected) устанавливает или возвращает начальный символ (включительно) помечаемого блока в поле типа ENTRY или TEXT. Позиционирует курсор ввода данных слева от этого символа и устанавливает свойство PROP:SelEnd в ноль, чтобы обозначить, что блок еще не помечен. Оно также идентифицирует выделенный в данный момент элемент объекта LIST или COMBO (обычно записанное как PROP:Selected). Для полей COMBO, PROP:Selected должно применяться через PROP:ListFeq COMBO, а не напрямую к метке соответствия COMBO.

PROP:SelEnd устанавливает или возвращает конечный символ (включительно) помечаемого блока

в поле типа ENTRY или TEXT. Значение -1, специальное значение, которое указывает что выделение идет к концу текущего объекта с текстом.

Пример:

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL

ENTRY(@S30),AT(0,0,320,180),USE(Fil:Field),ALRT(F10Key)

LIST,AT(6,6,120,90),USE(?List),FORMAT('120L'),FROM(Q),IMM

END

CODE

OPEN(WinView)

ACCEPT

CASE ACCEPTED()

OF ?List

GET(Q,?List{PROP:Selected}) !Взять выделенный элемент из очереди

OF ?Fil:Field

SETCLIPBOARD(Fil:Field[?Fil:Field{PROP:SelStart} : ?Fil:Field{PROP:SelEnd}])

!Поместить выделенную строку в буфер обмена Windows

END

END

!Пример использующий объект COMBO в конфигурации EIP

CASE EVENT() ! Перехватить событие

OF EVENT:NewSelection ! Если событие является новым выбором

! и это ключ который нам нужен...

IF KEYCODE() <> UpKey AND KEYCODE() <> DownKey AND |

KEYCODE() <> PgDnKey AND KEYCODE() <> PgUpKey

UPDATE(SELF.FEQ)

Loc:Offset = SELF.FEQ{PROP:SelStart} - 1 ! вычислить где находится курсор

!в пункте поля

! Поместить введенный код в локальную переменную:

Loc:ItemCode = SUB(ItemList.Q.SON:ItemCode,1,Loc:Offset)

! Цикл по всем пунктам очереди:

LOOP Loc:LqRecordCount = 1 to RECORDS(LQ:Queue)

GET(LQ:Queue, Loc:LqRecordCount)

IF LEFT(LQ:ItemCode,LEN(CLIP(Loc:ItemCode))) = CLIP(Loc:ItemCode)

IF Loc:LqRecordCount > 1

Loc:LQ:Position = Loc:LqRecordCount - 1 ! Нужная запись находится

! перед той где мы находимся.

ELSE

Loc:LQ:Position = 1 ! В противном случае она первая..

END

END

! Position to the LIST COMBO control:

(SELF:FEQ{PROP:ListFeq}){PROP:Selected}=Loc:LQ:Position

CHANGE(SELF.FEQ, LQ:ItemCode) ! Изменить очередь чтобы отобразить ее

BREAK

END

END

END

Смотри также: PROP:ListFEQ

 

PROP:Size

Возвращает или устанавливает размер поля типа BLOB. Если BLOB-поле еще не содержит никаких данных, то перед помещением в него данных с использованием техники разрезания строки необходимо установить размер поля путем использования PROP:Size. Перед помещением же в BLOB-поле дополнительных данных, которые приведут к увеличению объема данных (используя технику разрезания строки), его размер должен быть переустановлен также путем использования PROP:Size.

Пример:

Names FILE,DRIVER('TopSpeed')

NbrKey KEY(Names:Number)

Notes BLOB !Может быть больше чем 64K

Rec RECORD

Name STRING(20)

Number SHORT

END

END

BlobSize LONG

BlobBuffer1 STRING(65520),STATIC !Строка максимального размера

BlobBuffer2 STRING(65520),STATIC !Строка максимального размера

WinView WINDOW('View BLOB Contents'),AT(0,0,320,200),SYSTEM

TEXT,AT(0,0,320,180),USE(BlobBuffer1),VSCROLL

TEXT,AT(0,190,320,180),USE(BlobBuffer2),VSCROLL,HIDE

END

CODE

OPEN(Names)

SET(Names)

NEXT(Names)

OPEN(WinView)

BlobSize = Names.Notes{PROP:Size} !Получить длину содержимого поля BLOB

IF BlobSize > 65520

BlobBuffer1 = Names.Notes[0 : 65519]

BlobBuffer2 = Names.Notes[65520 : BlobSize - 1]

WinView{PROP:Height} = 400

UNHIDE(?BlobBuffer2)

ELSE

BlobBuffer1 = Names.Notes[0 : BlobSize - 1]

END

ACCEPT

END

Смотри также: SIZE, Свойства структуры файла

 

PROP:SnapHeight и PROP:SnapWidth

PROP:SnapHeight устанавливает мгновенную высоту любого окна или панели инструментов когда оно(а) изменяет размеры. Когда изменяется положение панели инструментов с вертикального прижатия в горизонтальное, его размеры соответствуют значениям PROP:SnapHeight и PROPSnapWidth.

PROP:SnapWidth устанавливает мгновенную ширину любого окна или TOOLBOX когда оно(а) изменяет размеры. Когда изменяется положение TOOLBOX с вертикального прижатия в горизонтальное, его размеры соответствуют значениям PROP:SnapHeight и PROPSnapWidth.

Смотри также: DOCK, DOCKED, TOOLBOX

Пример:

PROGRAM

MAP

main

p1(STRING)

END

CODE

main

main PROCEDURE

window APPLICATION('SnapWidth & SnapHeight'),AT(,,262,243),STATUS,MAX,RESIZE

END

CODE

OPEN(window)

window{PROP:StatusText} = 'Drag the toolbar to any edge'

ACCEPT

IF EVENT()=Event:OpenWindow

START(p1,,system{PROP:target})

END

END

 

p1 PROCEDURE(w)

win &WINDOW

width SIGNED

height SIGNED

window WINDOW,AT(50,50,100,20),SYSTEM,TOOLBOX,GRAY,RESIZE,MDI,IMM

BUTTON,AT(80,2,15,15),USE(?Button4),ICON(ICON:Cut),FLAT

BUTTON,AT(31,2,15,15),USE(?Button2),ICON(ICON:Copy),FLAT

BUTTON,AT(55,2,15,15),USE(?Button3),ICON(ICON:Paste),FLAT

END

!**************************************************

! Используя SnapWidth и SnapHeight, установите возможные размеры "n" для TOOLBOX. В этом

! примере, когда toolbox прижато влево или вправо, оно принимает размер по Высоте

! Когда прижато вверх или вниз, оно принимает размер по Ширине.

!**************************************************

CODE

win &= (w)

OPEN(window, win)

WINDOW{PROP:docked} = Dock:Float

window{PROP:dock} = DOCK:ALL

window{PROP:snapwidth, 1} = 20 ! Вертикальный размер, т.е., когда становиться высоким

window{PROP:snapheight, 1} = 150

window{PROP:snapwidth, 2} = 100 ! Горизонтальный размер, т.е., когда становиться широким

window{PROP:snapheight, 2} = 20

window{PROP:snapwidth, 3} = 50 ! квадрат

window{PROP:snapheight, 3} = 50

ACCEPT

IF EVENT() = EVENT:sized

! здесь ручное репозиционирование кнопок

IF window{PROP:Width} = 20 ! это высокое?

?Button4{PROP:xpos} = 2

?Button4{PROP:ypos} = 53

?Button2{PROP:xpos} = 2

?Button2{PROP:ypos} = 19

?Button3{PROP:xpos} = 2

?Button3{PROP:ypos} = 36

ELSIF window{PROP:Width} = 100 ! это широкое?

?Button4{PROP:xpos} = 70

?Button4{PROP:ypos} = 2

?Button2{PROP:xpos} = 50

?Button2{PROP:ypos} = 2

?Button3{PROP:xpos} = 30

?Button3{PROP:ypos} = 2

ELSE !должно быть квадратным

?Button4{PROP:xpos} = 27

?Button4{PROP:ypos} = 27

?Button2{PROP:xpos} = 27

?Button2{PROP:ypos} = 10

?Button3{PROP:xpos} = 5

?Button3{PROP:ypos} = 27

END

END

END

 

PROP:StatusFont

Свойство SYSTEM или WINDOW, которое читает и записывает установки шрифта для линейки статуса. Это свойство используется в связке с PROP:FontName, PROP:FontSize, PROP:FontColor и PROP:FontStyle. Линейка статуса использует набор символов по умолчанию (значение свойства SYSTEM{PROP:CharSet}).

Пример:

! Шрифт Tahoma установлен как шрифт по умолчанию для линейки статуса

SYSTEM{PROP:FontName + PROP:StatusFont} = 'Tahoma'

! Когда это окно активно, для линейки статуса используется Tahoma 10

Window{PROP:FontSize + PROP:StatusFont} = 10

 

PROP:StopHook

Свойство системной встроенной переменной SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры STOP. Эквивалентно {PROP:LibHook,7}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры STOP перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре STOP, находящейся в файле BUILTINS.CLW. (ТОЛЬКО ДЛЯ ЗАПИСИ)

 

PROP:SystemPropHook

Свойство встроенной переменной SYSTEM, которое позволяет перехватить вызов SYSTEM{свойство}. Эквивалентно {PROP:LibHook,12}. Вам нужно передать адрес процедуры, прототип которой

PROCEDURE(SIGNED Property, BYTE DoingSet, BYTE *Done, STRING Value), STRING

Property равняется значению в фигурных скобках {}.

DoingSet устанавливается в ИСТИНУ (1) если вызывается SYSTEM{property} = 'value', или ЛОЖЬ (0)? если вызывается 'value = SYSTEM{property}'.

Done устанавливается в ИСТИНУ, если вы не хотите? чтобы система обрабатывала свойство.

Value указывает какое свойство устанавливается. Это только в случае, когда DoingSet ИСТИНА.

Процедура должна возвращать строку. Эта строка используется только когда DoingSet установлен в ЛОЖЬ и Done установлен в ИСТИНУ. В этом случае это то значение, которое устанавливается в строке 'value = SYSTEM{property}'.

 

PROP:TabRows

Возвращает число строк объектов TAB в структуре SHEET. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Смотри также: PROP:NumTabs

Пример:

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

SHEET,AT(0,0,320,175),USE(SelectedTab)

TAB('Tab One'),USE(?TabOne)

OPTION('Option 1'),USE(OptVar1),KEY(F10Key),HLP('Option1Help')

RADIO('Radio 1'),AT(20,0,20,20),USE(?R1)

RADIO('Radio 2'),AT(40,0,20,20),USE(?R2)

END

OPTION('Option 2'),USE(OptVar2),MSG('Option 2')

RADIO('Radio 3'),AT(60,0,20,20),USE(?R3)

RADIO('Radio 4'),AT(80,0,20,20),USE(?R4)

END

END

TAB('Tab Two'),USE(?TabTwo)

PROMPT('Enter Data:'),AT(100,100,20,20),USE(?P1)

ENTRY(@S8),AT(100,140,32,20),USE(E1)

PROMPT('Enter More Data:'),AT(100,200,20,20),USE(?P2)

ENTRY(@S8),AT(100,240,32,20),USE(E2)

END

TAB('Tab Three'),USE(?TabThree)

OPTION('Option 3'),USE(OptVar3)

RADIO('Radio 1'),AT(20,0,20,20),USE(?R5)

RADIO('Radio 2'),AT(40,0,20,20),USE(?R6)

END

OPTION('Option 4'),USE(OptVar4)

RADIO('Radio 3'),AT(60,0,20,20),USE(?R7)

RADIO('Radio 4'),AT(80,0,20,20),USE(?R8)

END

END

TAB('Tab Four'),USE(?TabFour)

PROMPT('Enter Data:'),AT(100,100,20,20),USE(?P3)

ENTRY(@S8),AT(100,140,32,20),USE(E3)

PROMPT('Enter More Data:'),AT(100,200,20,20),USE(?P4)

ENTRY(@S8),AT(100,240,32,20),USE(E4)

END

END

BUTTON('Ok'),AT(100,180,20,20),USE(?Ok)

BUTTON('Cancel'),AT(200,180,20,20),USE(?Cancel)

END

CODE

OPEN(MDIChild)

MESSAGE('Number of TABs: ' & ?SelectedTab{PROP:NumTabs})

MESSAGE('Number of rows of TABs: ' & ?SelectedTab{PROP:TabRows})

ACCEPT

END

 

PROP:Target

Свойство встроенной переменной SYSTEM, которое используется для манипуляций с текущим объектом. Это свойство может использоваться для получения или установки текущего объекта. Эквивалентно SETTARGET(target).

 

PROP:TempImage

Свойство элемента IMAGE, которое возвращает имя файла, созданного для хранения изображения. Применяется шаблонами Internet Connect templates) только для внутреннего использования.

 

PROP:TempImagePath

Множественное системное свойство, которое устанавливает или возвращает путь, по которому находятся временные файлы с изображениями, созданные с помощью PROP:PrintMode или PROP:TempImage. Эквивалентно {PROP:TempPath,2}. Применяется шаблонами Internet Connect templates только для внутреннего использования.

 

PROP:TempImageStatus

Свойство элемента управления IMAGE, которое говорит о том, был ли PROP:TempImage создан новый файл, или же переписан существующий. Применяется шаблонами Internet Connect templates только для внутреннего использования.

 

PROP:TempNameFunc

Свойство отчета, которое позволяет задавать ваши собственные названия метафайлов, генерируемых для предварительного просмотра отчета (атрибут PREVIEW), путем написания функции обратного вызова, определяющей имя метафайла для каждой страницы отчета. Функция обратного вызова должна быть представлять из себя процедуру, которая принимает один параметр SIGNED, а возвращает STRING.

Для его включения необходимо присвоить PROP:TempNameFunc адрес (ADDRESS) вашей функции обратного вызова. Чтобы выключить его, присвойте свойству значение нуля (0).

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

При использовании PROP:TempNameFunc, метафайлы на принтер с помощью PROP:FlushPreview посылаться-то будут, однако их автоматического удаления не произойдет (всякий раз по окончании использования их Вашей программой эти файлы необходимо удалять).

Пример:

MEMBER('MyApp')

MAP

PageNames PROCEDURE(SIGNED),STRING !Прототип функции обратного вызова

END

MyReport PROCEDURE

MyQueue QUEUE !Очередь предварительного просмотра

STRING(64)

END

Report REPORT,PREVIEW(MyQueue) !Объявление структуры отчета

END

CODE

OPEN(Report)

Report{PROP:TempNameFunc} = ADDRESS(PageNames) !Присвоение свойству адреса

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

! PageNames для получения используемого имени каждой страницы

!Здесь следует текст, содержащий обработку отчета

Report{PROP:TempNameFunc} = 0 !Присвоение свойству нуля для его выключения

Report{PROP:FlushPreview} = TRUE !Послать отчет на принтер, при этом

! !.WMF файлы все еще остаются на диске

PageNames PROCEDURE(PageNumber) !Функция обратного вызова для названий файлов

NameVar STRING(260),STATIC

PageFile FILE,DRIVER('DOS'),NAME(NameVar),CREATE

Rec RECORD

F1 LONG

. .

CODE

NameVar = PATH() & '\PAGE' & FORMAT(PageNumber,@n04) & '.WMF'

CREATE(PageFile)

RETURN(NameVar)

 

PROP:TempPagePath

Системное свойство, которое устанавливает или возвращает путь, по которому находятся временные файлы с изображениями страницы. Эквивалентно {PROP:TempPath,1}. Применяется шаблонами Internet Connect templates только для внутреннего использования.

 

PROP:TempPath

Множественное системное свойство SYSTEM, которое устанавливает или возвращает путь, по которому находятся временные файлы с изображениями страницы или временные файлы с изображениями, созданные с помощью PROP:PrintMode. Применяется шаблонами Internet Connect templates только для внутреннего использования.

 

PROP:ThemeActive

Возвращает Булево значение (ИСТИНА), если активна текущая тема Windows. Это свойство SYSTEM, ТОЛЬКО ДЛЯ ЧТЕНИЯ.

Пример:

IF SYSTEM{PROP:ThemeActive} = TRUE !Если тема является текущей

!получить новый размер шрифта и установить для текущего объекта

Do ProcessNewFontSize

END

 

PROP:Thread

Возвращает номер исполняемого процесса для окна. Если с помощью оператора SETTARGET установлена встроенная переменная TARGET, то для текущего исполняемого процесса этот номер не требуется. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример:

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL,SYSTEM

END

ToolboxThread BYTE

CODE

OPEN(WinView)

ToolboxThread = ToolboxWin{PROP:Thread} !Получить номер процесса для окна

ACCEPT

END

 

PROP:Threading

Свойство системной встроенной переменной SYSTEM, которое, будучи установленным в ноль (0), запрещает любое MDI поведение и превращает MDI приложение в SDI-приложение.

Пример:

PROGRAM

!Объявления данных

CODE

IF SomeCondition = TRUE

SYSTEM{PROP:Threading} = 0 !Установить SDI поведение

END

 

PROP:TipDelay и PROP:TipDisplay

PROP:TipDelay устанавливает длительность паузы перед выводом инструментальной подсказки (заданной атрибутом TIP) для переменной SYSTEM.

PROP:TipDisplay устанавливает длительность отображения инструментальной подсказки (заданной атрибутом TIP) для переменной SYSTEM.

Пример:

WinView APPLICATION('MyApp'),AT(0,0,320,200),MAX,HVSCROLL,SYSTEM

END

CODE

OPEN(WinView)

SYSTEM{PROP:TipDelay} = 50 !Пауза перед выводом в 1/2 секунды

SYSTEM{PROP:TipDisplay} = 500 !Время показа подсказки 5 секунд

ACCEPT

END

 

PROP:TipsFont

Свойство встроенной переменной SYSTEM, которое читает и записывает установки шрифта для “всплывающей подсказки”. Это свойство используется в связке с PROP:FontName, PROP:FontSize, PROP:FontColor и PROP:FontStyle. “Всплывающая подсказка” использует набор символов по умолчанию (значение свойства SYSTEM{PROP:CharSet}).

Пример:

SYSTEM {PROP:FontName + PROP:TipsFont} !установить/получить начертание шрифта

SYSTEM {PROP:FontSize + PROP:TipsFont} !установить/получить пазмер шрифта

SYSTEM {PROP:FontColor + PROP:TipsFont} !установить/получить цвет шрифта

SYSTEM {PROP:FontStyle + PROP:TipsFont} !установить/получить стиль шрифта

 

PROP:ToolBar

Свойство WINDOW используемое для получения Метки соответствия оконной линейки инструментов. Это свойство ТОЛЬКО ДЛЯ ЧТЕНИЯ.

Пример:

ToolbarFEQ = MyWindowLabel{PROP:Toolbar} !получить метку соответствия линейки инструментов

 

PROP:Touched

Когда свойство отлично от нуля, данные во владеющем фокусом ввода ENTRY, TEXT, SPIN или элементе управления COMBO были изменены пользователем с момента последнего возникновения события EVENT:Accepted. Автоматически переустанавливается в ноль при каждом событии EVENT:Accepted на элементе управления. Установка этого свойства (при EVENT:Selected) приводит к тому, что при возникновении события EVENT:Accepted происходит выполнение сгенерированного кода, осуществляющего проверку пригодности данных, перекрывая при этом стандартное для Windows поведение, причем простое нажатие клавиши TAB для перехода на другой элемент управления не приводит к возникновению события EVENT:Accepted.

Также может быть опрошено свойство PROP:Touched с целью определения, не изменилось ли содержание BLOB-поля с момента его последнего считывания с диска.

Пример:

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL

ENTRY(@S30),AT(0,0,320,180),USE(Fil:Field)

BUTTON('Ok'),AT(100,180,20,20),USE(?Ok)

BUTTON('Cancel'),AT(200,180,20,20),USE(?Cancel)

END

SaveCancelPos LONG,DIM(4)

CODE

OPEN(WinView)

SaveCancelPos[1] = ?Cancel{PROP:Xpos} !Сохранить область кнопки Cancel

SaveCancelPos[2] = ?Cancel{PROP:Xpos}+?Cancel{PROP:Width}

SaveCancelPos[3] = ?Cancel{PROP:Ypos}

SaveCancelPos[4] = ?Cancel{PROP:Ypos}+?Cancel{PROP:Height}

ACCEPT

CASE FIELD()

OF ?Fil:Field

CASE EVENT()

OF EVENT:Selected

?Fil:Field{PROP:Touched} = 1 !Инициировать возникновение события EVENT:Accepted

OF EVENT:Accepted

IF KEYCODE() = MouseLeft AND | !Проверить, нажал ли пользователь на кнопку Cancel

INRANGE(MOUSEX(),SaveCancelPos[1],SaveCancelPos[2]) AND |

INRANGE(MOUSEY(),SaveCancelPos[3],SaveCancelPos[4])

CYCLE !Пользователь нажал на кнопку Cancel

ELSE

!Обработать данные независимо от того, введены ли

! они пользователем или были в этих полях изначально

END

OF ?Ok

CASE EVENT()

OF EVENT:Accepted

!Записать данные на диск

END

OF ?Cancel

CASE EVENT()

OF EVENT:Accepted

!Не записывать данные на диск

END

END

END

 

PROP:Type

Содержит тип экранного объекта управления. Возможные значения в виде мнемонических имен CREATE:xxxx (перечисляются в файле EQUATES.CLW). Свойство используется только для чтения.

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

Пример:

MyField STRING(1)

?MyField EQUATE(100)

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL

END

CODE

OPEN(WinView)

IF UserChoice = 'CheckField'

CREATE(?MyField,CREATE:Check)

ELSE

CREATE(?MyField,CREATE:Entry)

END

?MyField{PROP:Use} = MyField

SETPOSITION(?MyField,10,10)

IF ?MyField{PROP:Type} = CREATE:Check !Проверить тип объекта

?MyField{PROP:TrueValue} = 'T'

?MyField{PROP:FalseValue} = 'F'

END

ACCEPT

END

 

PROP:UpsideDown

Меняет сразу атрибуты UP и DOWN, чтобы показать перевернутый текст на закладке (TAB) в структуре SHEET.

Пример:

WinView WINDOW('View'),AT(0,0,320,200),MDI,MAX,HVSCROLL

SHEET,AT(0,0,320,175),USE(SelectedTab),RIGHT,DOWN !Закладки, корешки которых

!расположены справа и текст на них читается сверху вниз

TAB('Tab One'),USE(?TabOne)

PROMPT('Enter Data:'),AT(100,100,20,20),USE(?P1)

ENTRY(@S8),AT(100,140,32,20),USE(E1)

PROMPT('Enter More Data:'),AT(100,200,20,20),USE(?P2)

ENTRY(@S8),AT(100,240,32,20),USE(E2)

END

PROMPT('Enter Data:'),AT(100,100,20,20),USE(?P3)

ENTRY(@S8),AT(100,140,32,20),USE(E3)

PROMPT('Enter More Data:'),AT(100,200,20,20),USE(?P4)

ENTRY(@S8),AT(100,240,32,20),USE(E4)

END

END

BUTTON('Ok'),AT(100,180,20,20),USE(?Ok)

BUTTON('Cancel'),AT(200,180,20,20),USE(?Cancel)

END

CODE

OPEN(WinView)

?SelectedTab{PROP:BELOW} = TRUE !Показывать корешки закладок внизу листа

?SelectedTab{PROP:UpsideDown} = TRUE !Перевернуть текст на закладках

ACCEPT

END

PROP:UseAddress

Возвращает адрес переменной ANY, которая указывает на USE-переменную поля. Это свойство для Чтения/Записи, но возвращаемое значение может использоваться только с правой стороны оператора присваивания в PROP:UseAddress (или для сравнения возвращаемых значений двух свойств PROP:UseAddress).

Пример:

Loc:Any ANY

FEQ2 ANY

Window WINDOW('Caption'),AT(,,260,100),GRAY

ENTRY(@s20),AT(57,23,60,10),USE(Loc:Any)

ENTRY(@s20),AT(57,50,60,10),USE(FEQ2)

END

X LONG

CODE

OPEN(Window)

ACCEPT

X = ?Loc:Any{PROP:UseAddress}

?Feq2{PROP:UseAddress} = X

BREAK

END

 

PROP:Visible

Возвращает пустую строку, если объект невидим на экране или из-за того, что он сам скрыт оператором HIDE, или он входит в состав скрытого объекта (OPTION, GROUP, MENU, SHEET или TAB), или он является неактивной страницей TAB. (ТОЛЬКО ДЛЯ ЧТЕНИЯ).

Пример:

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

SHEET,AT(0,0,320,175),USE(SelectedTab)

TAB('Tab One'),USE(?TabOne)

PROMPT('Enter Data:'),AT(100,100,20,20),USE(?P1)

ENTRY(@S8),AT(100,140,32,20),USE(E1)

PROMPT('Enter More Data:'),AT(100,200,20,20),USE(?P2)

ENTRY(@S8),AT(100,240,32,20),USE(E2)

END

TAB('Tab Two'),USE(?TabTwo)

PROMPT('Enter Data:'),AT(100,100,20,20),USE(?P3)

ENTRY(@S8),AT(100,140,32,20),USE(E3)

PROMPT('Enter More Data:'),AT(100,200,20,20),USE(?P4)

ENTRY(@S8),AT(100,240,32,20),USE(E4)

END

END

BUTTON('Ok'),AT(100,180,20,20),USE(?Ok)

BUTTON('Cancel'),AT(200,180,20,20),USE(?Cancel)

END

CODE

OPEN(MDIChild)

ACCEPT

CASE EVENT()

OF EVENT:Completed

BREAK

END

CASE FIELD()

OF ?Ok

CASE EVENT()

OF EVENT:Accepted

SELECT

END

OF ?E3

CASE EVENT()

OF EVENT:Accepted

E3 = UPPER(E3) !Преобразовать введенные данные в верхний регистр

IF ?E3{PROP:Visible} AND MDIChild{PROP:AcceptAll}

!Проверить видимость объекта во время безостановочного режима

DISPLAY(?E3) ! и вывести текст большими буквами

END

END

OF ?Cancel

CASE EVENT()

OF EVENT:Accepted

BREAK

END

END

END

 

PROP:VLBproc и PROP:VLBval

PROP:VLBProc устанавливает процедуру в качестве источника данных для “Виртуального окна списка” объектов LIST или COMBO без атрибута FROM. Эта процедура обеспечивает данными для отображения.

Прототип процедуры должен иметь три параметра:

VLBProc PROCEDURE(LONG,LONG,SHORT),STRING

где первый LONG является либо SELF (указывающий, что процедура является методом класса) либо установленным значением для PROP:VLBval. Второй LONG передает номер строки виртуального окна списка на который воздействует. Имеется три “специальных” значения для этого параметра, -1 запрашивает число записей для отображения в списке, -2 запрашивает число полей в номинальной Очереди (данные и поля цвета/древа/иконок) для отображения в списке, и -3 запрашивается, если есть любые изменения отображения. Параметр SHORT номер колонки виртуального списка на который воздействует.

PROP:VLBVal устанавливает объект источника для "Виртуального окна списка" управляющих объектов LIST или COMBO без атрибута FROM. Оно может быть любым 32-х битным уникальным значением для идентификации указанного окна списка, но обычно это значение возвращаемое ADDRESS(SELF) когда процедура PROP:VLBProc является методом класса.

Пример:

PROGRAM

MAP

Main

END

StripedListQ QUEUE,TYPE

S STRING(20)

END

StripedList CLASS,TYPE

Init PROCEDURE(WINDOW w, SIGNED feq, StripedListQ Q)

VLBproc PROCEDURE(LONG row, SHORT column),STRING,PRIVATE

!Required first parameter is implicit in a CLASS method

Q &StripedListQ,PRIVATE

ochanges LONG,PRIVATE

END

CODE

Main

StripedList.Init PROCEDURE(WINDOW w, SIGNED feq, StripedListQ Q)

CODE

SELF.Q &= Q

SELF.ochanges = CHANGES(Q)

w $ feq{PROP:VLBval} = ADDRESS(SELF) !Это должно быть присвоено сперва

w $ feq{PROP:VLBproc} = ADDRESS(SELF.VLBproc) ! затем это

StripedList.VLBproc PROCEDURE(LONG row, SHORT col) !Подразумевается первый обязательный параметр

nchanges LONG

CODE

CASE row

OF -1 ! Сколько строк?

RETURN RECORDS(SELF.Q)

OF -2 ! Сколько колонок?

RETURN 5 ! 1 данные, четыре поля цвета в “номинальной очереди”

OF -3 ! Это изменения

nchanges = CHANGES(SELF.Q)

IF nchanges <> SELF.ochanges THEN

SELF.ochanges = nchanges

RETURN 1

ELSE

RETURN 0

END

ELSE

GET(SELF.Q, row)

CASE col

OF 1 !Поле данных

RETURN WHAT(SELF.Q,1)

OF 3 !Поле цвета фона

RETURN CHOOSE(BAND(row,1), COLOR:none, 0c00000H)

ELSE !Все другие поля

RETURN COLOR:None ! использовать цвет по умолчанию

END

END

Main PROCEDURE

window WINDOW('Caption'),AT(,,153,103),GRAY,SYSTEM

LIST,AT(33,12,80,80),USE(?List1),FORMAT('20L*')

END

Q QUEUE(StripedListQ)

END

SL StripedList

i SIGNED

CODE

LOOP i = 1 TO 20

Q.s = 'Line ' & i

ADD(Q)

END

OPEN(window)

SL.Init(window, ?list1, Q)

ACCEPT

END

 

PROP:Vscroll

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

Когда вы указываете VSCROLL на поле LIST с атрибутом IMM, линейка вертикального скроллинга будет присутствовать всегда, даже когда список пуст. Когда пользователь щелкнет мышью, указывая на линейку скроллинга, то генерируется событие, но перемещения элементов в списке не происходит

(это должна сделать программа). Чтобы определить положение скроллинга списка, можно прочитать значение свойства PROP:VscrollPos (диапазон от 0 - начало списка, до 100 - конец списка).

 

PROP:VscrollPos

Возвращает положение “бегунка” на вертикальной полосе прокрутки. Возможные значения: от 0 до 255 на окне, элементах управления IMAGE или TEXT, имеющих атрибут VSCROLL.

На элементах управления LIST или COMBO с атрибутом VSCROLL от 0 до 100 (когда установлен атрибут IMM). Если атрибут IMM опущен, то диапазон от 0 до числа пунктов доступных для отображения в LIST или COMBO (как указано атрибутом FROM()) минус единица. Если указан FROM(очередь)? Тогда диапазон – от 0 до RECORDS(QUEUE) – 1. Если FROM('list'), то диапазон от нуля до числа пунктов в ‘list’ -1. Например, если указано FROM('Mr.|Mrs.|Ms.|Dr.'), то диапазон от 0 до 3, потому что всего 4 элемента в списке.

Значение PROP:VScrollPos с атрибутом IMM определяет точное число пунктов в списке или очереди, перед первым отображаемым пунктом. Например, если 5 элемент очереди отображается первым в списке, то значение PROP:VScrollPos равно 4.

Установка этого свойства приводит к прокрутке содержимого элемента управления или содержимого окна в вертикальном направлении (причем этот “бегунок” будет двигаться только в том случае, если у элементов управления LIST или COMBO имеется атрибут IMM).

Пример:

Que QUEUE

STRING(50)

END

WinView WINDOW('View'),AT(0,0,320,200),MDI,SYSTEM

LIST,AT(0,0,320,200),USE(?List),FROM(Que),IMM,VSCROLL

END

CODE

OPEN(WinView)

Fil:KeyField = 'A' ; DO BuildListQue

ACCEPT

CASE FIELD()

OF ?List

CASE EVENT()

OF EVENT:ScrollDrag

EXECUTE INT(?List{PROP:VscrollPos}/10) + 1

Fil:KeyField = 'A'

Fil:KeyField = 'C'

Fil:KeyField = 'E'

Fil:KeyField = 'G'

Fil:KeyField = 'K'

Fil:KeyField = 'M'

Fil:KeyField = 'P'

Fil:KeyField = 'S'

Fil:KeyField = 'V'

Fil:KeyField = 'Y'

END

DO BuildListQue

END

END

END

FREE(Que)

BuildListQue ROUTINE

FREE(Queue)

SET(Fil:SomeKey,Fil:SomeKey) !Встать по выбранному значению ключа

LOOP ?List{PROP:Items} TIMES !Обработать нужное число записей

NEXT(SomeFile) ; IF ERRORCODE() THEN BREAK. !Прерваться по концу файла

Que = Fil:KeyField !Присвоить значения полей файла полям очереди

ADD(Que) ! и добавить элемент в очередь

END

Смотри также: X and Y Origin

PROP:Watched

Свойство FILE, которое показывает, обрабатывается ли текущая запись другим пользователем. Возвращает 1, если запись обрабатывается, и пустую строку (‘’) - если нет. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример

FileName STRING(256)

Customer FILE,DRIVER('Clarion')

Record RECORD

Name STRING(20)

. .

CODE

OPEN(Customer)

SET(Customer)

LOOP

WATCH(Customer)

NEXT(Customer)

IF ERRORCODE() THEN BREAK.

IF Customer{PROP:Watched} <> ''

MESSAGE('Record watched')

END

END

 

PROP:WheelScroll

Свойство (чтение/запись) допустимо для объектов списка окна и комбинированного списка. Используется для регулировки чувствительности прокрутки колесом мыши. Если свойство установлено в значение меньше 1, то по умолчанию оно устанавливается в 1. Чем меньше значение свойства, тем больше строк прокрутит колесо мыши. Значение по умолчанию равно 40 (приблизительно 3 строки на каждую ступень прокрутки для стандартного драйвера мыши).

 

PROP:WindowsVersion

Возвращает строку содержащую версию Windows, в которой запущена программа.

Библиотечная функция возвращает следующую информацию:

Windows/Win32 <version> [<category> | <edition>] [ServicePack] Build Number

К настоящему моменту, значение вплоть до ServicePack, может быть одним из следующих:

Windows 95

Windows 95 OSR2

Windows 98

Windows 98 SE

Windows Me

Windows NT 3.5 WorkStation

Windows NT 4 WorkStation

Windows 2000 Professional

Windows XP Home Edition

Windows XP Professional

Windows XP Tablet PC Edition

Windows XP Media Center Edition

Windows NT 3.5 Server

Windows NT 3.5 Advanced Server

Windows NT 4 Server

Windows NT 4 Server, Enterprise Edition

Windows 2000 Advanced Server

Windows 2000 Small Business Server

Windows 2000 Datacenter Server

Windows Server 2003 Standard Edition

Windows Server 2003 Datacenter Edition

Windows Server 2003 Enterprise Edition

Windows Server 2003 Web Edition

Значения Service Pack присутствуют, если доступны.

Только для чтения. Только для SYSTEM.

Пример:

GLO:WindowsVersion = SYSTEM{PROP:WindowsVersion}

 

PROP:WndProc

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

Пример:

PROGRAM

MAP

Main PROCEDURE

SubClassFunc1 PROCEDURE(UNSIGNED,UNSIGNED,UNSIGNED,LONG),LONG,PASCAL

SubClassFunc2 PROCEDURE(UNSIGNED,UNSIGNED,UNSIGNED,LONG),LONG,PASCAL

MODULE('') !SoftVelocity Win Library

CallWindowProc PROCEDURE(LONG,UNSIGNED,SIGNED,UNSIGNED,LONG),LONG,PASCAL,NAME('CallWindowProcA')

END

END

SavedProc1 LONG

SavedProc2 LONG

WM_MOUSEMOVE EQUATE(0200H)

PT GROUP

X SIGNED

Y SIGNED

END

CODE

Main

Main PROCEDURE

WinView WINDOW('View'),AT(0,0,320,200),HVSCROLL,MAX,TIMER(1),STATUS

STRING('X Pos'),AT(1,1,,),USE(?String1)

STRING(@n3),AT(24,1,,),USE(PT:X)

STRING('Y Pos'),AT(44,1,,),USE(?String2)

STRING(@n3),AT(68,1,,),USE(PT:Y)

BUTTON('Close'),AT(240,180,60,20),USE(?Close)

END

CODE

OPEN(WinView)

SavedProc1 = WinView{PROP:WndProc} !Запомнить эту процедуру

WinView{PROP:WndProc} = ADDRESS(SubClassFunc1) !Заменить на процедуру подкласса

SavedProc2 = WinView{PROP:ClientWndProc} !Запомнить эту процедуру

WinView{PROP:ClientWndProc} = ADDRESS(SubClassFunc2) !Заменить на процедуру подкласса

ACCEPT

CASE ACCEPTED()

OF ?Close

BREAK

END

END

SubClassFunc1 PROCEDURE(hWnd,wMsg,wParam,lParam) !Процедура подкласса

CODE ! для отслеживания перемещений

!мыши только в

IF wMsg = WM_MOUSEMOVE ! в строке состояния окна

PT.X = MOUSEX() ; PT.Y = MOUSEY() !Присвоить позицию мыши

END

RETURN(CallWindowProc(SavedProc1,hWnd,wMsg,wParam,lParam))!Передать управление в SavedProc1

SubClassFunc2 PROCEDURE(hWnd,wMsg,wParam,lParam) !Процедура подкласса

CODE ! для отслеживания перемещений

IF wMsg = WM_MOUSEMOVE ! в клиентской части окна

PT.X = MOUSEX() ; PT.Y = MOUSEY() !Присвоить позицию мыши

END

RETURN(CallWindowProc(SavedProc2,hWnd,wMsg,wParam,lParam))!Передать управление в SavedProc2

 

PROP:Xorigin и PROP:YOrigin

(насколько прокручено окно ли поле)

Атрибуты полей SHEET, IMAGE или LIST (которые имеют горизонтальную и/или вертикальную полосы прокрутки), которые устанавливают или извлекают насколько прокручено поле. XORIGIN (PROP:XOrigin) указывает насколько было прокручено поле в направлении X. YORIGIN (PROP:YOrigin) указывает насколько поле было прокручено в направлении Y. Как показано в примере ниже, эти свойства допустимы и для WINDOW.

Это свойство возвращает значение, которое должна возвращать процедура CHOICE() для первой видимой строки данного оконного списка. Это свойство позволяет вам вычислить текущую позицию выделенной строки (напр. CHOICE(?List) - ?List{PROP:YOrigin} + 1)

Вы можете также установить это свойство используя следующий синтаксис:

?List {PROP:YOrigin} = n

где n самая верхняя видимая строка в прокручиваемом списке. Библиотечная функция затем отрегулирует полученное значение, чтобы показать как можно больше строк. Например, если

n + (?List{PROP:Items} - 1) > ?List{PROP:LineCount}, n изменится на ?List{PROP:LineCount} - (?List{PROP:Items} - 1)

Если n <= 0, n изменится на 1.

Пример:

PROGRAM

MAP

END

S STRING(20)

Window WINDOW('Caption'),AT(,,400,250),FONT('MS Sans Serif',8,,FONT:regular)|

,IMM,VSCROLL, STATUS,SYSTEM,GRAY,CENTER

ENTRY(@S20),AT(10,100),USE(S,,?S1),SCROLL

ENTRY(@S20),AT(10,500),USE(S,,?S2),SCROLL

ENTRY(@S20),AT(10,900),USE(S,,?S3),SCROLL

END

y1 UNSIGNED

y2 UNSIGNED

Wy1 UNSIGNED

Wy2 UNSIGNED

Control SIGNED

CODE

OPEN(Window)

ACCEPT

CASE EVENT()

OF EVENT:Selected

Control = SELECTED()

IF Control

y1 = Control {PROP:yPos}

y2 = y1 + Control {PROP:Height}

Wy1 = 0{PROP:YOrigin} !прочитать Yorigin

Wy2 = Wy1 + 0 {PROP:ClientHeight}

IF y1 < Wy1

0{PROP:YOrigin} = CHOOSE (y1 < 20, 0, y1 - 20)

ELSIF y2 > Wy2

0{PROP:YOrigin} = Wy1 + y2 - Wy2 + 20 !установить Yorigin

END

END

END

END

CLOSE(Window)

Смотри также: PROP:LineCount

Динамические свойства VIEW и FILE

PROP:Completed

Свойство оператора FILE, которое возвращает процент завершения процесса перестраивания при работе операторов BUILD или PACK, для которых было установлено свойство PROP:ProgressEvents. Если драйверу файла не известно, какая часть процесса BUILD или PACK была выполнена, это свойство возвращает ноль (0). (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

 

PROP:ConnectString

Свойство файла, использующего драйвер ODBC, который возвращает строку соединения (обычно хранящуюся в атрибуте OWNER), которая позволила бы завершить соединение. Если атрибут OWNER содержит только имя источника данных, то появляется окно подключения, чтобы запросить у пользователя остальную необходимую информацию перед выполнением соединения. Это окно подключение раскрывается каждый раз, когда происходить подключение. С помощью этого свойства разработчик может один раз ввести данные для окна соединения, затем установить атрибут OWNER таким образом, чтобы данные вводились из PROP:ConnectString, исключая явное подключение.

Пример:

OwnerString STRING(20)

Customer FILE,DRIVER('ODBC'),OWNER(OwnerString)

Record RECORD

Name STRING(20)

. .

CODE

OwnerString = 'DataSourceName'

OPEN(Customer)

OwnerString = Customer{PROP:ConnectString} !Взять всю строку подключения

MESSAGE(OwnerString) !Отобразить ее для будущего использования

 

PROP:CurrentKey

Свойство оператора FILE, возвращающее ссылку на текущий ключ или индекс, используемый для последовательной обработки файла, или же текущий ключ, построенный в процессе выполнения операторов BUILD или PACK (ТОЛЬКО ДЛЯ ЧТЕНИЯ). Может быть использовано только либо в качестве исходной стороны оператора ссылочного присвоения, либо в логическом выражении, сравнивающем возвращаемое значение с NULL. Возвращает значение NULL, если файл обрабатывается в порядке физического расположения записей в нем.

Пример:

KeyRef &KEY

Customer FILE,DRIVER('Clarion'), PRE(Cus)

NameKey KEY(Cus:Name),DUP

Record RECORD

Name STRING(20)

. .

CODE

OPEN(Customer)

SET(Customer)

KeyRef &= Customer{PROP:CurrentKey) !Возвращает NULL

IF Customer{PROP:CurrentKey) &= NULL !Сравнивает с NULL

MESSAGE('SET to record order')

END

SET(Cus:NameKey)

KeyRef &= Customer{PROP:CurrentKey) !Возвращает указатель на Cus:NameKey

 

PROP:DataPath

Свойство SYSTEM (чтение/запись), которое может быть использовано для установки каталога по умолчанию для файлов данных.

Поиск файлов, имена которых не содержат путей к ним (т.е. файлы без атрибута NAME или их имена содержат относительные пути), будет происходить в каталоге, указанном SYSTEM{PROP:DataPath}.

По умолчанию SYSTEM{PROP:DataPath} содержит каталог, с которого было запущено приложение. Это избавит разработчиков кодировать следующим образом:

GETINI(datadirectory)

file1name = datadirectory & 'file1'

file2name = datadirectory & 'file2'

file3name = datadirectory & 'file3'

 

PROP:Details

Свойство файла, которое переключает регистрацию буфера записи. Файл{PROP:Details}=1 включает регистрацию буфера записи и файл{PROP:Details}=0 – выключает.

Смотри также: PROP:Profile, PROP:Log

 

PROP:DriverLogsoutAlias

Свойство оператора FILE, которое возвращает значение, показывающее, позволяет ли файловый драйвер оператору LOGOUT называть и файл, и алиас на этот файл в одном и том же операторе (ТОЛЬКО ДЛЯ ЧТЕНИЯ).

Пример:

IF Customer{PROP:DriverLogsoutAlias} = '' !Тест для алиаса позволенный в LOGOUT

MESSAGE('Driver does not allow files and their aliases in LOGOUT')

END

 

PROP:DynamicFile

Свойство файла, которое возвращает ‘1’, если файл был создан использованием NEW(файл), в противном случае, возвращается пустая строка (‘’). (ТОЛЬКО ЧТЕНИЕ)

Этим файл идентифицируется как созданный из указателя, что подразумевает что файл является динамическим.

Пример:

IF Customer{PROP:DynamicFile} = 1 !Проверить, что файл был создан NEW

DISPOSE(Customer)

END

PROP:FetchSize

Свойство структуры FILE или VIEW, которое устанавливает или получает параметр размер_страницы (pagesize) для последнего выполненного оператора BUFFER.

Пример:

CODE

OPEN(MyFile)

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

! 2 страницы считывать вперед с интервалом в 5

MyFile{PROP:FetchSize} = 1 !Установить коэффициент выборки равным одной записи за раз

 

PROP:Field

Свойство VIEW, которое возвращает номер поля в файле для указанного номера поля во VIEW. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример:

KFile &FILE

Record &GROUP

CODE

KFile &= key{PROP:File}

MESSAGE(KFile{PROP:Label, key{PROP:Field, 1}}) !Возвращает метку компонента первого ключа

 

PROP:FieldsFile

Свойство VIEW, которое возвращает указатель на файл, содержащий указанный номер поля во VIEW. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример:

Header FILE,DRIVER('TopSpeed'),PRE(Hea)

OrderKey KEY(Hea:AcctNumber, Hea:OrderNumber)

Record RECORD

AcctNumber LONG

OrderNumber LONG

OrderDate LONG

. .

Detail FILE,DRIVER('TopSpeed'),PRE(Det)

OrderKey KEY(Det:AcctNumber,Det:OrderNumber)

Record RECORD

AcctNumber LONG

OrderNumber LONG

ItemNumber LONG

. .

AView VIEW(Header)

PROJECT(Hea:AcctNumber,Hea:OrderNumber,Hea:OrderDate)

JOIN(Det:OrderKey,Hea:AcctNumber,Hea:OrderNumber)

. .

!AView{PROP:Field,1} Возвращает 1, которое представляет собой Hea:AcctNumber

!AView{PROP:Field,2} Возвращает 2, которое представляет собой Hea:OrderNumber

!AView{PROP:Field,3} Возвращает 3, которое представляет собой Hea:OrderDate

!AView{PROP:Field,4} Возвращает 1, которое представляет собой Det:AcctNumber

!AView{PROP:Field,5} Возвращает 2, которое представляет собой Det:OrderNumber

!AView{PROP:Field,6} Возвращает 3, которое представляет собой Det:ItemNumber

!AView{PROP:FieldsFile,2} Возвращает указатель на Header File

!AView{PROP:FieldsFile,5} Возвращает указатель на Detail File

 

PROP:File

Множественное свойство VIEW-структуры. Каждый элемент массива возвращает ссылку на пронумерованный файл во VIEW-структуре. Эта ссылка может использоваться как исходная сторона оператора ссылочного присвоения. Файлы внутри VIEW-структуры нумеруются начиная с 1 (первичный файл во VIEW) и далее увеличиваются на единицу для каждого оператора JOIN в том порядке, в котором они расположены в пределах VIEW-структуры. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

PROP:File можно также использовать для получения имени ключевого файла из KEY.

Пример:

GetFileInfoFromKey PROCEDURE(*KEY key)

KFile &FILE

Record &GROUP

CODE

KFile &= key{PROP:File}

MESSAGE(KFile{PROP:Label, key{PROP:Field, 1}}) !Возвращает метку первого компонента ключа

 

PROP:Files

Свойство VIEW-структуры, которое возвращает общее количество содержащихся в ней файлов. Это количество равно общему числу структур JOIN плюс единица (первичный файл, определенный непосредственно в операторе VIEW). (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

view{PROP:files, N}

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

Пример 1:

AView VIEW(BaseFile) !Файл 1

JOIN(ParentFile,'BaseFile.parentID = ParentFile.ID') !Файл 2

JOIN(GrandParent.PrimaryKey, ParentFile.GrandParentID) !Файл 3

END

END

JOIN(OtherParent.PrimaryKey,BaseFile.OtherParentID) !Файл 4

END

END ! AView{PROP:Files} возвращает 4

! AView{PROP:File,1} возвращает указатель нa BaseFile

! AView{PROP:File,2} возвращает указатель нa Parent

! AView{PROP:File,3} возвращает указатель нa GrandParent

! AView{PROP:File,4} возвращает указатель нa OtherParent

FilesQ QUEUE

FileRef &FILE

END

CODE

LOOP X# = 1 TO AView{PROP:Files} !4 такта цикла

FilesQ.FileRef &= AView{PROP:File,X#} !Указатель на каждый файл в VIEW

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

ASSERT(~ERRORCODE()) !При отсутствии каких-либо ошибок

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

END

Пример 2:

v VIEW(PFile),ORDER('PFile:String1'),FILTER('PFile:ID = 3')

PROJECT(PFile:ID, PFile:String1)

JOIN(Child1:Keyname, PFile:ID) !Файл Child1 имеет 4 поля

JOIN(Child2:Keyname, Child1:ID) !Файл Child2 имеет 4 поля

JOIN(Child3, 'Child3:LinkField = Child2:ID')

PROJECT(Child3:String2)

END

END

JOIN(Child2Child1:KeyName, Child1:ID) !Файл Child2Child1 имеет 4 поля

END

END

END

v{PROP:Files, 0} возвратит 5

v{PROP:Files, 1} возвратит 4

v{PROP:Files, 2} возвратит 3

v{PROP:Files, 3} возвратит 1

v{PROP:Files, 4} возвратит 0

v{PROP:Files, 5} возвратит 0

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

PROP:FileSize

file{PROP:FileSize}

где file метка файла или свойство указывающее метку файла.

PROP:FileSize возвращает число байт в файле. BYTES() возвращает размер файла до первого доступа к записи, затем возвращает размер последней прочитанной записи. PROP:FileSize может быть использовано для получения полного размера файла после первого выполнения операторов GET/NEXT/ADD.

Пример:

ProcessClass.Reset PROCEDURE

CODE

SELF.RecordsProcessed = 0

IF ~SELF.StepMgr &= NULL

SELF.SetProgressLimits

ELSIF ~SELF.RecordsToProcess

SELF.Primary.Me.UseFile

SELF.RecordsToProcess = RECORDS(SELF.Primary.Me.File)

IF ~SELF.RecordsToProcess ! Записи не поддерживаются

SELF.FileSize = SELF.Primary.Me.File{PROP:FileSize}

END

END

SELF.ChildRead = 0

PARENT.Reset

 

PROP:FlushLog

меткафайла{PROP:FlushLog} = 0|1

или

Flush=1|0 (в файле WIN.INI)

Свойство FILE, которое отключит кэширование по умолчанию для протоколирования файла.

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

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

file{PROP:FlushLog} = TRUE

или добавив строчку

Flush=1

В раздел драйверов файла WIN.INI. Вы можете использовать утилиту трассировки, чтобы это делалось за вас.

file{PROP:FlushLog} = FALSE

выключает кэширование.

 

PROP:GlobalHelp

Свойство SYSTEM, которое будучи включенным, блокирует автоматическое закрытие файла .HLP когда окно, которое открывало файл .HLP, закрывается. Это сделает файл .HLP остающимся открытым до тех пор, пока пользователь не закроет его.

Пример:

SYSTEM{PROP:GlobalHelp} = TRUE !Блокирует автозакрытие файла HLP

 

PROP:Held

Свойство оператора FILE, которое возвращает значение, говорящее о том, захвачена ли текущая запись. Возвращается 1, если запись захвачена, и пустая строка (‘’) - если нет. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример:

FileName STRING(256)

Customer FILE,DRIVER('Clarion')

Record RECORD

Name STRING(20)

. .

CODE

OPEN(Customer)

SET(Customer)

LOOP

HOLD(Customer,1)

NEXT(Customer)

IF ERRORCODE() THEN BREAK.

IF Customer{PROP:Held} <> ''

MESSAGE('Record Held')

END

END

 

PROP:Log

Свойство оператора FILE, которое записывает строку в текущий файл протокола (определенный свойством PROP:Profile). Эта строка размещается в этом файле в отведенной ей строке. (ТОЛЬКО ДЛЯ ЗАПИСИ)

Пример:

FileName STRING(256)

Customer FILE,DRIVER('TopSpeed')

Record RECORD

Name STRING(20)

END

END

CODE

Customer{PROP:Profile} = 'CustLog.TXT'

!Включить режим протоколирования, файл: CustLog.TXT

OPEN(Customer)

Filename = Customer{PROP:Profile} !Получить имя текущего файла протокола

Customer{PROP:Log} = CLIP(FileName) & ' ' & |

FORMAT(TODAY(),@D2) & ' ' & |

FORMAT(CLOCK(),@T1)

!Записать строку текста в файл протокола

SET(Customer)

LOOP

NEXT(Customer) !Все действия по вводу и выводу из файла

IF ERRORCODE() THEN BREAK. ! протоколируются в файле CustLog.TXT

END

Customer{PROP:Profile} = '' !Выключить режим протоколирования

 

PROP:Logout

Свойство оператора FILE, которое назначает или возвращает уровень приоритета упомянутого файла в пределах транзакции. При этом PROP:Logout может использоваться для построения списка файлов в транзакции еще до того, как будет выполнен оператор LOGOUT(секунды), начинающий транзакцию. С помощью использования свойства PROP:Logout Вы можете добавлять в транзакцию большее количество файлов, чем позволяет ограниченное число параметров, допускаемых оператором LOGOUT. Если оператор LOGOUT вообще перечисляет какие-либо файлы, то все файлы, установленные ранее свойством PROP:Logout, из транзакции удаляются, и использоваться будут только те файлы, которые были перечислены в операторе LOGOUT.

Уровень приоритета указывает тот порядок, в котором файлы освобождаются из транзакции, причем файлы с меньшими номерами освобождаются прежде файлов с более высокими уровнями предпочтения. Если два файла имеют один и тот же уровень приоритета, они освобождаются в том же порядке, в котором они были добавлены к списку файлов транзакции. Присвоение положительного уровня приоритетов добавляет файл к транзакции, присвоение отрицательного уровня приоритетов - удаляет, присвоение нуля (0) не имеет никакого эффекта. Запросив значение свойства PROP:Logout, можно получить уровень приоритета, присвоенный файлу, при этом ноль (0) свидетельствует о том, что файл в транзакции не участвует.

Попытка использовать PROP:Logout для добавления файла в транзакцию, использующую различные драйвера файлов, приведет к возникновению ошибки ERRORCODE 48, расшифровывающуюся как “Невозможно начать транзакцию”.

Пример:

Customer FILE,DRIVER('TopSpeed')

Record RECORD

CustNumber LONG

Name STRING(20)

END

END

Orders FILE,DRIVER('TopSpeed')

Record RECORD

CustNumber LONG

OrderNumber LONG

OrderDate LONG

END

END

Items FILE,DRIVER('TopSpeed')

Record RECORD

OrderNumber LONG

ItemNumber LONG

END

END

CODE

Customer{PROP:Logout} = 1 !Добавить файл Customer к списку подключения и

!установить уровень приоритета равным 1

Items{PROP:Logout} = 2 !Добавить файл Items к списку подключения и

!установить уровень приоритета равным 2

Orders{PROP:Logout} = 1 !Добавить файл Orders к списку подключения и

!установить уровень приоритета равным 1

X# = Items{PROP:Logout} !Возвратить уровень приоритета файла Items (X# = 2)

Customer{PROP:Logout} = -1 !Удалить файл Customer из списка подключения

LOGOUT(1) !Начать транзакцию, в которой файлы расположены

! в следующем порядке: Orders, Items

! и очистить список подключений

X# = Items{PROP:Logout} !Возвращает 0 т.к.оператор LOGOUT очистил список подключений.

Items{PROP:Logout} = 1 !Добавить Items в список подключений (теперь одна таблица в файле есть)

COMMIT !Завершить транзакцию

 

Orders{PROP:Logout} = 1 !Добавить также Orders (теперь в списке 2 записи)

LOGOUT(1) !Начать транзакцию с Items и Orders, и очистить список

COMMIT !Завершить транзакцию

 

PROP:LogoutIsolationLevel

Свойство FILE, которое контролирует какой уровень изоляции используется в рамках транзакции. Уровень изоляции в вашей транзакции определяет как ваше приложение реагирует на изменение транзакции другими пользователями и следовательно, как долго ваша транзакция должна блокировать эти изменения.

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

Это свойство допустимо для всех файловых драйверов основанных на SQL (за исключением Oracle). По умолчанию равно 8.

PROP:LogoutIsolationLevel использует стандартный уровень изоляции ODBC. Это может не совпадать с собственным уровнем драйвера. Например, с Sybase's ASA, документированы уровни изоляции 0, 1, 2 и 3 и они соответствуют

ODBC уровень Sybase уровень

1 0

2 1

4 2

8 3

16 N/A

 

PROP:MaxStatements

Свойство FILE, позволяющее вам обнаружить, сколько операторов могут быть активны для перемещения перед новым соединением с базой данных. Это свойство может также установить максимальное количество операторов для перемещения перед новым соединением. Это свойство доступно для всех типов файлов SQL, кроме Oracle.

 

PROP:Profile

Свойство оператора FILE, которое размещает данные о регистрации (составляет протокол) всех вызовов файлов на ввод/вывод, а также ошибки, возвращенные файловым драйвером, в указанном текстовом файле. Задание имени файла в свойстве PROP:Profile включает режим протоколирования (в указанном файле), в то время как назначение пустой строки (‘’) - выключает. Запрашивание значения этого свойства приведет к возвращению имени текущего файла протокола, возвращенная же пустая строка (‘’) означает, что режим протоколирования выключен.

Пример:

filelabel{PROP:Profile} = 'tracelog.txt' !включить протоколирование

filelabel{PROP:Profile} = '' !выключить протоколирование

 

PROP:ProgressEvents

Свойство оператора FILE, которое генерирует события в открытом в настоящее время окне в течение выполнения операций BUILD или PACK (ТОЛЬКО ДЛЯ ЗАПИСИ). Это свойство зависит от конкретного типа файлового драйвера и на текущий момент поддерживаются только файлы Clarion и TopSpeed.

Присвоение нулевого значения (0) выключает генерацию событий для следующего выполняемого оператора BUILD или PACK, в то время как присвоение любого другого значения (диапазон возможных значений - от 1 до 100) включает. Выходящие за пределы диапазона значения расцениваются следующим образом: отрицательные числа рассматриваются как единица (1), любые же значения, которые больше ста (100), рассматриваются как сто (100). Чем больше присвоенное значение, тем большее количество событий генерируется, и, следовательно, тем медленнее работает оператор BUILD или PACK.

Генерируются следующие события: EVENT:BuildFile, EVENT:BuildKey и EVENT:BuildDone. Это свойство непригодно для того, чтобы выполнять любые запросы к строящемуся файлу, за исключением запрашивания его свойств, выполнения оператора NAME(файл) или CLOSE(файл) (который прерывает процесс работы и поэтому не рекомендуется). Установка в ответ на любое из сгенерированных событий (кроме EVENT:BuildDone) оператора CYCLE приводит к пропуску заданных действий.

Свойство PROP:CurrentKey может использоваться для получения ссылки на текущий построенный ключ, тогда PROP:Label может использоваться, для получения метки ключа, которая будет показана пользователю.

Свойство оператора FILE, которое возвращает процент завершения процесса перестраивания при работе операторов BUILD или PACK, для которых было установлено свойство PROP:ProgressEvents. Если драйверу файла не известно, какая часть процесса BUILD или PACK была выполнена, это свойство возвращает ноль (0). (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример:

PROGRAM

MAP

CheckError(), bool

END

Window WINDOW('Event:BuildDone Example'),AT(,,209,76),|

FONT('MS SansSerif',8,,FONT:regular,CHARSET:ANSI), |

CENTER,SYSTEM,GRAY,DOUBLE

BUTTON('Create file'),AT(3,5,57,22),USE(?Button:CreateFile)

BUTTON('Build File (With Events)'),AT(71,7,84,22),USE(?Button:Build)

END

MyTPS FILE, DRIVER('TOPSPEED'), CREATE, RECLAIM, NAME('MyTPS.tps'),PRE(MYT)

PK_IDKey KEY(MYT:ID), PRIMARY

K_DescKey KEY(MYT:Description), DUP, NOCASE

Record RECORD

ID LONG

Description CSTRING(256)

END

END

COUNT LONG, AUTO

CODE

OPEN(Window)

ACCEPT

CASE EVENT()

OF Event:Accepted

CASE FIELD()

OF ?Button:CreateFile

?Button:CreateFile{Prop:Disable} = TRUE

CREATE(MyTPS)

IF CheckError()

POST(Event:CloseWindow)

CYCLE

END

OPEN(MyTPS)

IF CheckError()

POST(Event:CloseWindow)

CYCLE

END

STREAM(MyTPS)

LOOP Count = 1 to 100

CLEAR(MyTPS)

MYT:ID = Count

MYT:Description = 'Desc#: ' & Count

APPEND(MyTPS)

IF CheckError() THEN BREAK.

END

FLUSH(MyTPS)

IF MESSAGE('Do you want to create a duplicate record?', 'Create duplicate',|

Icon:Question, Button:Yes + Button:No,Button:Yes) = Button:Yes

CLEAR(MyTPS)

MYT:ID = 1

MYT:Description = 'Desc#: ' & 1

APPEND(MyTPS)

END

CLOSE(MyTPS)

?Button:CreateFile{Prop:Disable} = FALSE

OF ?Button:Build

?Button:Build{Prop:Disable} = TRUE

MyTPS{Prop:ProgressEvents} = 100

SEND(MyTPS, 'FULLBUILD=on')

BUILD(MyTPS)

IF CheckError() THEN POST(Event:CloseWindow).

END

OF Event:BuildFile OROF Event:BuildKey

OF Event:BuildDone

IF CheckError()

MESSAGE('BUILD FAILED !', 'BUILD', Icon:Hand)

ELSE

MESSAGE('BUILD OK', 'BUILD', Icon:Asterisk)

END

?Button:Build{Prop:Disable} = FALSE

END

END

!------------------------------------------------

CheckError FUNCTION()

CODE

IF ERRORCODE()

MESSAGE(ERROR(), 'CheckError: ' & ERRORCODE(), Icon:Hand)

RETURN TRUE

END

RETURN FALSE

 

PROP:Record

Свойство файла, которое возвращает групповой указатель на буфер записи файла. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример:

Rec &GROUP

Customer FILE,DRIVER('TopSpeed')

Record RECORD

Name STRING(20)

. .

CODE

Rec &= Customer{PROP:Record}

 

PROP:SQLDriver

Свойство FILE, которое возвращает '1' если файловый драйвер принимает SQL, иначе возвращает пустую строку (''). (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример:

Customer FILE,DRIVER('Clarion'),PRE(CUS)

Record RECORD

Name STRING(20)

. .

SQLFlag BYTE

CODE

IF Customer{PROP:SQLDriver} THEN SQLFlag = TRUE.

 

PROP:StmtAttr

Свойство FILE, которое позволяет читать и устанавливать атрибуты операторов ODBC. Это эквивалентно вызову ODBC API функций SQLSetStmtOption или SQLGetStmtOption. Это свойство допустимо для всех файлов типа SQL, кроме Oracle.

Пример:

Customer{PROP:StmtAttr,7} = 3 ! Установить взаимозаменяемость строки проверки версии

 

PROP:SupportsOp

Свойство FILE, которое позволяет узнать, поддерживается ли указанная функция файловым драйвером. Возвращает 1, если операция поддерживается и 0, если нет. Допустимые функции поддерживаемые этим свойством DriverOp:xxxx, перечислены в файле EQUATES.CLW. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

 

PROP:SupportsType

Свойство FILE, которое позволяет узнать, поддерживается ли указанный тип файла файловым драйвером. Возвращает 1, если тип данных поддерживается и 0, если нет. Допустимые типы данных поддерживаемые этим свойством DataType:xxxx, перечислены в файле EQUATES.CLW. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример:

Customer FILE,DRIVER('Clarion')

Record RECORD

Id LONG

. .

Supported BYTE

CODE

Supported = Customer{PROP:SupportsType,DriverOp:CREATE} ! Возвращает 1

Supported = Customer{PROP:SupportsType,DriverOp:NULL} ! Возвращает 0

Supported = Customer{PROP:SupportsType,DataType:LONG} ! Возвращает 1

Supported = Customer{PROP:SupportsType,DataType:DATE} ! Возвращает 0

 

PROP:Text (MEMO/BLOB Property)

Множественное свойство оператора FILE, которое устанавливает или возвращает данные из заданных полей MEMO или BLOB. Поскольку элементы управления MEMO и BLOB нумеруются отрицательными числами, то и номер элемента массива должен иметь отрицательное значение. Объявления MEMO и BLOB начинаются с -1 и уменьшаются на 1 с каждым последующим объявлением MEMO и BLOB, в порядке их объявления в структуре FILE.

Пример:

MemoText STRING(2000)

Customer FILE,DRIVER('Clarion'),PRE(CUS)

Notes MEMO(2000)

Record RECORD

Name STRING(20)

. .

CODE

OPEN(Customer)

SET(Customer)

NEXT(Customer)

ASSERT(~ERRORCODE())

Memotext = Customer{PROP:Text,-1}

 

PROP:Value

Множественное свойство оператора FILE, которое устанавливает или возвращает данные из заданных полей MEMO или BLOB (используйте процедуру WHAT для любого другого типа колонки). Элемент массива для PROP:Value - простое отрицательное число, которое указывает MEMO или BLOB. Поля MEMO и BLOB нумеруются отрицательными значениями. Объявления MEMO и BLOB начинаются с -1 и уменьшаются на 1 с каждым последующим объявлением MEMO и BLOB, в порядке их объявления в структуре FILE.

Пример:

Text STRING(2000)

MoreText STRING(64000)

Number LONG

Customer FILE,DRIVER('TopSpeed'),PRE(CUS)

Notes MEMO(2000)

BigText BLOB

Record RECORD

Number LONG,DIM(20)

Name STRING(20)

END

END

CODE

OPEN(Customer)

SET(Customer)

NEXT(Customer)

ASSERT(~ERRORCODE())

Text = Customer{PROP:Value,-1} !Получить содержимое CUS:Notes

MoreText = Customer{PROP:Value,-2} !Получить содержимое CUS:BigText

Смотри также: PROP:Memo, PROP:BLOB

 

PROP:Watched

Свойство FILE, которое показывает, обрабатывается ли текущая запись другим пользователем. Возвращает 1, если запись обрабатывается, и пустую строку (‘’) - если нет. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)

Пример

FileName STRING(256)

Customer FILE,DRIVER('Clarion')

Record RECORD

Name STRING(20)

. .

CODE

OPEN(Customer)

SET(Customer)

LOOP

WATCH(Customer)

NEXT(Customer)

IF ERRORCODE() THEN BREAK.

IF Customer{PROP:Watched} <> ''

MESSAGE('Record watched')

END

END

к оглавлению

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

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

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


Рыцари теории эфира
 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