Свойство
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. !
Выключить режим AcceptAllCASE ACCEPTED()
OF ?Ctl:Code
IF Ctl:Code > 150 !
Если введены неверные данныеBEEP !
оповестить пользователя и
SELECT(?) !
ввести данные вновьEND
OF ?OkButton
Window{PROP:AcceptAll} = 1 !
Включить режим AcceptAllEND
END !
Конец цикла ACCEPT и структуры CASE ACCEPTED
Свойство
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)
Когда это свойство установлено в 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 !Установить поведение выпадающего списка подобно окну
Возвращает идентификационный номер экземпляра (Hinstance) .EXE файла для того, чтобы использовать в обращениях на низком уровне интерфейса прикладного программирования
API, где это требуется. Используется только со встроенной переменной SYSTEM (только для чтения).
Пример:
PROGRAM
HInstance LONG
CODE
OPEN(AppFrame)
HInstance = SYSTEM{PROP:AppInstance} !
Получить идентификационный номер экземпляра! .EXE файла для дальнейшего использования
ACCEPT
END
Свойство встроенной переменной
SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры ASSERT. Эквивалентно {PROP:LibHook,8}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры ASSERT перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре ASSERT (STRING filename,UNSIGNED LineNumber). (ТОЛЬКО ДЛЯ ЗАПИСИ)Смотри
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 !остановить рекурсивные вызовы в обработчик assertSYSTEM{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
Устанавливает и возвращает состояние механизма выбора наиболее подходящей бумаги. Состояние, используемое по умолчанию - механизм включен. Это свойство применяется только к переменной SYSTEM.
Пример:
PROGRAM
CODE
OPEN(AppFrame)
SYSTEM{PROP:AutoPaper} = '' !
Выключить механизма выбора наиболее подходящей бумагиACCEPT
END
Устанавливает переменную для структуры 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д ОПИСАНИЕ ЯЗЫКАСвойство окна которое позволяет выбрать режим отображения фона. Это может значительно уменьшить экранное мерцание в некоторых ситуациях (таких как анимированные GIF изображения), вызывает значительные издержки памяти.
Значение по умолчанию равно нулю (0) и выводит изображение напрямую на экран. Это наиболее быстрый вариант и не вызывает издержки памяти, но в некоторых случаях может вызвать мерцание экрана.
Присвоение свойству единицы (1) выделяет постоянный буфер для окна. Это довольно быстро, но вызывает наибольшие издержки памяти.
Присвоение свойству 2 перераспределяет буфер для окна всякий раз когда это требуется. Это медленный вариант, но имеет наименьшие издержки памяти при уменьшении мерцания.
Пример:
WinView WINDOW('Child One'),AT(0,0,320,200),MDI,MAX,HVSCROLL
END
CODE
OPEN(WinView)
WinView{PROP:Buffer} = 1 !Постоянное обновление буфера для окна
Возвращается текущий статус отображения элемента управления 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: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
Возвращает или устанавливает номер выбранного в данный момент поля 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
Свойство окна, которое возвращает идентификационный номер клиента в окне (области окна, которая содержит объекты) для того, чтобы использовать в обращениях на низком уровне интерфейса прикладного программирования
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
Свойство APPLICATION или WINDOW, которое возвращает высоту области окна клиента для того, чтобы использовать в обращениях на низком уровне интерфейса прикладного программирования
API, где это требуется. Используется только для чтения.
Свойство APPLICATION или WINDOW, которое возвращает ширину области окна клиента для того, чтобы использовать в обращениях на низком уровне интерфейса прикладного программирования
API, где это требуется. Используется только для чтения.
Свойство окна, которое устанавливает или возвращает процедуру сообщения клиентской части окна для того, чтобы использовать в обращениях на низком уровне интерфейса прикладного программирования, где это требуется. Обычно используется с подклассами для отслеживания всех сообщений в среде Windows.
Пример:
PROGRAM
MAP
Main
SubClassFunc(UNSIGNED hWnd,SIGNED wMsg,UNSIGNED wParam,LONG lParam),LONG,PASCAL
MODULE('win32') !
Библиотека WindowsCallWindowProc(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))
!
Передать управление!
запомненной процедуреСвойство APPLICATION или WINDOW, которое возвращает горизонтальную позицию левого верхнего угла области окна клиента. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)
Свойство APPLICATION или WINDOW, которое возвращает вертикальную позицию левого верхнего угла области окна клиента. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)
Свойство поля 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 PictureEND
END
Свойство системной встроенной переменной
SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры COLORDIALOG. Эквивалентно {PROP:LibHook,1}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры COLORDIALOG перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре COLORDIALOG, который можно обнаружить в файле BUILTINGS.CLW. (ТОЛЬКО ДЛЯ ЗАПИСИ)
Свойство системной встроенной переменной
SYSTEM, которая определяет старший байт RGB DWORD, используяSYSTEM{PROP:ColorHighByte} = n
.Установка значения
n в ноль включает сглаживание цветов в режиме 256 цветов. Установка в 2 (по умолчанию) устанавливает систему в отображение однотонных цветов.
Свойство переменной SYSTEM, которое используется для хранения пользовательских цветов добавленных пользователем между сессиями программы.
Синтаксис:
color = SYSTEM {PROP:CustomColor, n}
SYSTEM {PROP:CustomColor, n} = color
n
должно быть целым значением в диапазоне между 1 и 16.Это свойство возвращает значение RGB
n-го элемента списка Пользовательских Цветов, содержащихся в стандартном диалоге выбора цвета. Если n-ый элемент не установлен, возвращается значение 0FFFFFFh (белый цвет).Установка значения этого свойства устанавливает
n-ый элемент списка Пользовательских цветов в стандартном диалоге выбора цветов для указания значения RGB.
Свойство системной встроенной переменной
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
Свойство системной встроенной переменной
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
Свойство встроенной переменной SYSTEM, с помощью которого изменение размеров и/или перемещение экранного объекта откладывается до тех пор, пока не будет завершен цикл ACCEPT или свойство SYSTEM{PROP:DeferMove} не будет установлено в 0. Тем самым отменяется немедленное присвоение значений свойствам, связанным с расположением и размерами и все изменения размеров выполняются библиотечной процедурой за раз (исключая возможные временные наложения объектов друг на друга). Абсолютная величина числа, присваиваемого свойству SYSTEM{PROP:DeferMove} определяет число откладываемых изменений размеров, для которых заранее выделяется память (этот объем автоматически расширяется, но менее эффективно и может привести к аварии). Присвоение положительного числа означает автоматический сброс этого свойства в 0 при выполнении следующего цикла ACCEPT, в то время как присвоенное отрицательное число продолжает действовать до тех пор пока свойство явно не будет установлено в 0.
Для многопоточных приложений установка SYSTEM{PROP:DeferMove} в ненулевое значение инициирует отложенное перемещение только для текущего процесса.
PROP:DeferM
ove игнорируется, если свойство 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 = ?Im
age{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
Свойство объекта
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
. . .
Возвращает пустую строку, если объект недоступен или из-за того, что он сам деактивирован оператором 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
Свойство окна, которое возвращает значение, указывающее на то, остались ли на окне какие-нибудь ожидающие обработки события. Используется в основном Internet Connect для того, чтобы узнать, когда следует форматировать HTML страницу. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)
Пример:
IF TARGET{PROP:EventsWaiting} !
Проверка на наличие ожидающих обработки событий
!
!Произвести какие-нибудь действияEND
Свойство, относящееся к встроенной переменной 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})
Свойство системной встроенной переменной
SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры. Эквивалентно {PROP:LibHook,9}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо внутренней процедуры перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать прототипу внутренней (STRING message,UNSIGNED ErrorNumber). (ТОЛЬКО ДЛЯ ЗАПИСИ)
Свойство системной встроенной переменной
SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры FILEDIALOG. Эквивалентно {PROP:LibHook,2}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры FILEDIALOG перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре FILEDIALOG, обнаруженной в файле BUILTINGS.CLW (ТОЛЬКО ДЛЯ ЗАПИСИ)
Свойство 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
Выводит метафайлы, в которых в соответствии с атрибутом PREVIEW временно хранится отчет, на принтер (0 = выключено, иначе - включено, при открытии отчета всегда устанавливается в 0).
Пример:
SomeReport PROCEDURE
WMFQue QUEUE !
Очередь, содержащая имена метафайловSTRING(64)
END
NextEntry BYTE(1) !
Переменная - счетчик элементов очередиReport REPORT,PREVIEW(WMFQue) !
Отчет с атрибутом PREVIEWDetailOne 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 !
Вернуться в вызвавшую процедуру!
автоматически закрыв окно и отчет!
освободив память очереди, и автоматически! удалив временные метафайлы
Изменяет порядок выбора полей клавишей 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
Свойство системной встроенной переменной
SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры FONTDIALOG. Эквивалентно {PROP:LibHook,3}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры FONTDIALOGA перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре FONTDIALOGA, содержащийся в файле BUILTINS.CLW. (ТОЛЬКО ДЛЯ ЗАПИСИ)
Свойство системной встроенной переменной
SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры HALT. Эквивалентно {PROP:LibHook,5}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры HALT перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре HALT, содержащийся в файле BUILTINS.CLW. (ТОЛЬКО ДЛЯ ЗАПИСИ)
Возвращает идентификатор окна или объекта для использования в низкоуровневых обращениях к функциям интерфейса прикладного программирования 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
Возвращает высоту заголовка объекта управления 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} !
Получить высоту заголовка в условных единицах
Возвращает положение “бегунка” на горизонтальной линейке скроллинга (от 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
Массив, который устанавливает или возвращает иконки, отображаемые в Окне списка (LIST), для которого такая возможность предусмотрена (обычно это древовидный список). Если имя присваиваемого файла иконки содержит в конце число в квадратных скобках, то это означает, что данный файл содержит несколько иконок. Заключенное же в скобках число определяет ту иконку, которую следует применить (отсчет начинается с нуля). Если имени файла иконки предшествует тильда (~), пристыкованная к нему (~IconFile.ICO), то это указывает на то, что файл был помещен в проект в качестве ресурса и на диске отсутствует.
Пример:
PROGRAM
MAP
RandomAlphaData PROCEDURE(*STRING Field)
END
TreeDemo QUEUE,PRE() !
Очередь, данные из которой выводятся в окнеFName STRING(20)
ColorNFG LONG !
Цвет переднего плана для нормального поля FNameColorNBG LONG !
Цвет фона для нормального поля FNameColorSFG LONG !
Цвет переднего плана для выбранного поля FNameColorSBG LONG !
Цвет фона для выбранного поля FNameIconField LONG !
Номер пиктограммы для поля FNameTreeLevel 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 !
Назначить цвета для поля FNAMEColorNBG = 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
Свойство поля типа 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 PictureOF ?LastPic
?Image{PROP:ImageBits} = Fil:MyMemo !
Вывести последнее сохраненное memo-полеEND
END
Свойство поля IMAGE, который позволяет изображение, отображаемое в поле перемещать в/из поле типа BLOB. Любое отображаемое в экранном поле изображение может храниться поле BLOB. PROP:ImageBits подобным образом оперирует и с MEMO. Большинство изображений хранится в двоичном формате по умолчанию (за исключением
PCX и GIF), в то время как PROP:PrintMode устанавливает хранение с собственном формате.
Свойство SYSTEM, которое возвращает HINSTANCE активного EXE/DLL с внедренными файлами изображений. Что касается ресурсов изображений/курсоров: библиотека времени исполнения ищет их не только в исполняемой программе, которая содержит значение PROP:ImageInstance, но и в EXE или DLL откуда был запущен текущий активный процесс окна.
Свойство встроенной переменной SYSTEM, которое позволяет установить процедуру для автоматической инициализации значений TIE для присвоения конкретного значения во время первого показа ASTRING. Эквивалентно {PROP:LibHook,14}. Присвойте значение ADDRESS в процедуру InitAString и библиотечная функция вызовет ее для присвоения первого значения ASTRING. Присвоение ноля приостановит вызов библиотечной функцией процедуры InitAString. (ТОЛЬКО ДЛЯ ЗАПИСИ)
Свойство объекта TEXT используемое для получения интерфейса к главному интерфейсу объекта RTF.
Переключаемый атрибут, который показывает, находится ли данный элемент управления внутри структуры 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
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
Возвращает или устанавливает число элементов списка отображаемых в окне списка или комбинированном окне списка.
Пример:
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
Свойство
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
ЗАМЕЧАНИЕ: Это свойство не поддерживается этим релизом.
Свойство системной встроенной переменной
SYSTEM, которое в 16-битных программах возвращает единицу (1), если операционная система поддерживает длинные имена файлов, и пустую строку (‘’) -если нет. Все 32-битные операционные системы обеспечивают поддержку длинных имен файлов. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)
Пример:
IF SYSTEM{PROP:LFNSupport} = TRUE
MESSAGE('Long Filenames are supported')
ELSE
MESSAGE('Long Filenames are NOT supported')
END
Множественное свойство системной встроенной переменной
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
Свойство встроенной переменной 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: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
Устанавливает и возвращает высоту строки объекта управления 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 устанавливает или возвращает максимально возможную высоту окна, изменяемых размеров.
Относительно структур отчета, это свойство может также использоваться для установки и получения максимального значения соответствующего измерения структур отчета.
Пример:
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 устанавливает или возвращает максимально возможную ширину окна, изменяемых размеров.
Относительно структур отчета, это свойство может также использоваться для установки и получения максимального значения соответствующего измерения структур отчета.
Пример:
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
Свойство окна, используемое для получения Метки соответствия поля оконного меню. Это свойство только для чтения.
Пример:
MenubarFEQ = MyWindowLabel{PROP:Menubar} !получить метку соответствия меню
Свойство системной встроенной переменной
SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры MESSAGE. Эквивалентно {PROP:LibHook,6}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры MESSAGE перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре MESSAGE, содержащийся в файле BUILTINS.CLW. (ТОЛЬКО ДЛЯ ЗАПИСИ)
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 устанавливает или возвращает минимально возможную ширину окна, изменяемых размеров. Также устанавливает минимальную ширину листов (
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 возвращает ноль. Это свойство предоставляет возможность легко организовать цикл по всем элементам управления на окне или в отчете, независимо от того, имеют ли эти элементы управления атрибуты 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
This
Field{PROP:FontName} = 'Arial' !Изменить шрифтThisField{PROP:FontSize} = 10
ELSE
BREAK !Прервать по окончании
. .
ACCEPT
END
Смотри также:
PROP:FollowsСвойство, которое устанавливает или возвращает номер следующей страницы отчета.
Имейте ввиду, что возвращаемый свойством 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 !
Каждая группа начинается на странице с номером 1END
PRINT(Detail)
END
CLOSE(CustRpt)
CLOSE(File)
Смотри также:
REPORT, ENDPAGE, PAGEBEFORE, PAGEAFTERи PROP:PrevTabStop
PROP:NextTabStop возвращает следующее поле (метку соответствия поля) которое может иметь фокус и получать его нажатием клавиши Tab.
PROP:PrevTabStop возвращает предыдущее поле (метку соответствия поля) которое может иметь фокус и получать его нажатием клавиши ShiftTab.
Пример:
NextControlFEQ = window{PROP:NextTabStop} !получить следующее поле
PrevControlFEQ = window{PROP:PrevTabStop} !получить предыдущее поле
Window{PROP:NextTabStop} = ?List !Установить следующее поле
Свойство 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
Выключает (если установлена 1) или включает (если 0) подсказку (атрибут TIP) для системы, окна или поля в окне.
Пример:
WinView APPLICATION('MyApp'),AT(0,0,320,200),MAX,HVSCROLL,SYSTEM
END
CODE
OPEN(WinView)
SYSTEM{PROP:NoTips} = 1 !
Выключить вывод инструментальной подсказки во всем приложенииACCEPT
END
Возвращает число объектов 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Возвращает родительский элемент управления (такой, как 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) !
Номер метки соответствия поля, используемой CREATECODE
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
! ?T
ab1{Prop:Parent} Принадлежит ?Sheet! ?Prompt1{Prop:Parent} Принадлежит ?Tab1
! ?Loc:Var{Prop:Parent} Принадлежит ?Tab1
! ?Close{Prop:Parent} Принадлежит WinParent
Смотри
также: PROP:NumTabs, PROP:Child, PROP:ChildIndex, PROP:ChoiceFEQ
Свойство окна, которое переключает единицы измерения линейных размеров между условными единицами и пикселами (не относится к печатным документам). После установки этого свойства все свойства и функции позиционирования (такие как 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
Свойство системной встроенной переменной
SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры PRINTERDIALOG. Эквивалентно {PROP:LibHook,4}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры PRINTERDIALOG перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре PRINTERDIALOG, содержащейся в BUILTINS.CLW. (ТОЛЬКО ДЛЯ ЗАПИСИ)
Системное или принадлежащее элементу управления 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{PRO
P: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
Можно непосредственно обновлять выводимый индикатор степени выполнения некого действия (поле типа 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)
Это свойство используется для того, чтобы определить как отображается “бегунок” вертикальной линейки прокрутки.
Если установлен в 1 и число записей в источнике окна списка (обычно это очередь) больше числа видимых строк в окне списка, толщина “бегунка” зависит от коэффициента, получаемого делением числа видимых строк к общему числу записей
.Если установлен в 0 или число записей не больше чем число строк (напр. страничная загрузка просмотра), “бегунок” имеет квадратную форму.
Это свойство доступно для объектов LIST и COMBO, а также для SYSTEM. Вновь созданные объекты LIST и COMBO наследуют текущее значение этого свойства из установок SYSTEM.
Свойство таких элементов управления, как 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Возвращает текст выводимый на экране в заданном поле.
Пример:
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, CHANGEPROP: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 EVEN
T() ! Перехватить событие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
Возвращает или устанавливает размер поля типа BLOB. Если BLOB-поле еще не содержит никаких данных, то перед помещением в него данных с использованием техники разрезания строки необходимо установить размер поля путем использования PROP:Size. Перед помещением же в BLOB-поле дополнительных данных, которые приведут к увеличению объема данных (используя технику разрезания строки), его размер должен быть переустановлен также путем использования PROP:Size.
Пример:
Names FILE,DRIVER('TopSpeed')
NbrKey KEY(Names:Number)
Notes BLOB !
Может быть больше чем 64KRec 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} !
Получить длину содержимого поля BLOBIF 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
Свойство 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
Свойство системной встроенной переменной
SYSTEM, которая определяет перекрывающую процедуру для внутренней Clarion процедуры STOP. Эквивалентно {PROP:LibHook,7}. Стоит задать адрес перекрывающей процедуры (ADDRESS), и тогда выполняемая библиотека при работе программы вызовет вместо процедуры STOP перекрывающую ее процедуру. Присвоение же нуля приведет к тому, что снова будет вызываться соответствующая внутренняя процедура. Прототип перекрывающей процедуры должен в точности соответствовать процедуре STOP, находящейся в файле BUILTINS.CLW. (ТОЛЬКО ДЛЯ ЗАПИСИ)
Свойство встроенной переменной 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}'.
Возвращает число строк объектов 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
Свойство встроенной переменной SYSTEM, которое используется для манипуляций с текущим объектом. Это свойство может использоваться для получения или установки текущего объекта. Эквивалентно SETTARGET(target).
Свойство элемента IMAGE, которое возвращает имя файла, созданного для хранения изображения. Применяется шаблонами Internet Connect templates) только для внутреннего использования.
Множественное системное свойство, которое устанавливает или возвращает путь, по которому находятся временные файлы с изображениями, созданные с помощью
PROP:PrintMode или PROP:TempImage. Эквивалентно {PROP:TempPath,2}. Применяется шаблонами Internet Connect templates только для внутреннего использования.
Свойство элемента управления IMAGE, которое говорит о том, был ли PROP:TempImage создан новый файл, или же переписан существующий. Применяется шаблонами Internet Connect templates только для внутреннего использования.
Свойство отчета, которое позволяет задавать ваши собственные названия метафайлов, генерируемых для предварительного просмотра отчета (атрибут 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:TempPath,1}. Применяется шаблонами Internet Connect templates только для внутреннего использования.
Множественное системное свойство
SYSTEM, которое устанавливает или возвращает путь, по которому находятся временные файлы с изображениями страницы или временные файлы с изображениями, созданные с помощью PROP:PrintMode. Применяется шаблонами Internet Connect templates только для внутреннего использования.
Возвращает Булево значение (ИСТИНА), если активна текущая тема Windows. Это свойство SYSTEM, ТОЛЬКО ДЛЯ ЧТЕНИЯ.
Пример:
IF SYSTEM{PROP:ThemeActive} = TRUE !Если тема является текущей
!получить новый размер шрифта и установить для текущего объекта
Do ProcessNewFontSize
END
Возвращает номер исполняемого процесса для окна. Если с помощью оператора 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
Свойство системной встроенной переменной
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
Свойство встроенной переменной SYSTEM, которое читает и записывает установки шрифта для “всплывающей подсказки”. Это свойство используется в связке с PROP:FontName, PROP:FontSize, PROP:FontColor и PROP:FontStyle. “Всплывающая подсказка” использует набор символов по умолчанию (значение свойства SYSTEM{PROP:CharSet}).
Пример:
SYSTEM {PROP:FontName + PROP:TipsFont} !установить/получить начертание шрифта
SYSTEM {PROP:FontSi
ze + PROP:TipsFont} !установить/получить пазмер шрифтаSYSTEM {PROP:FontColor + PROP:TipsFont} !установить/получить цвет шрифта
SYSTEM {PROP:FontStyle + PROP:TipsFont} !установить/получить стиль шрифта
Свойство WINDOW используемое для получения Метки соответствия оконной линейки инструментов. Это свойство ТОЛЬКО ДЛЯ ЧТЕНИЯ.
Пример:
ToolbarFEQ = MyWindowLabel{PROP:Toolbar} !получить метку соответствия линейки инструментов
Когда свойство отлично от нуля, данные во владеющем фокусом ввода 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} !
Сохранить область кнопки CancelSaveCancelPos[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:AcceptedOF EVENT:Accepted
IF KEYCODE() = MouseLeft AND | !
Проверить, нажал ли пользователь на кнопку CancelINRANGE(MOUSEX(),SaveCancelPos[1],SaveCancelPos[2]) AND |
INRANGE(MOUSEY(),SaveCancelPos[3],SaveCancelPos[4])
CYCLE !
Пользователь нажал на кнопку CancelELSE
!
Обработать данные независимо от того, введены ли! они пользователем или были в этих полях изначально
END
OF ?Ok
CASE EVENT()
OF EVENT:Accepted
!Записать данные на диск
END
OF ?Cancel
CASE EVENT()
OF EVENT:Accepted
!Не записывать данные на диск
END
END
END
Содержит тип экранного объекта управления. Возможные значения в виде мнемонических имен 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
Меняет сразу атрибуты 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
Возвращает адрес переменной 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
Возвращает пустую строку, если объект невидим на экране или из-за того, что он сам скрыт оператором 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 устанавливает процедуру в качестве источника данных для “Виртуального окна списка” объектов 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:VLBP
roc является методом класса.
Пример:
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
Это свойство (чтение/запись) имитирует атрибут VSCROLL. Если значение установлено в ноль (0) линейка вертикального скроллинга не отображается, даже если число записей в списке больше число видимых строк.
Когда вы указываете
VSCROLL на поле LIST с атрибутом IMM, линейка вертикального скроллинга будет присутствовать всегда, даже когда список пуст. Когда пользователь щелкнет мышью, указывая на линейку скроллинга, то генерируется событие, но перемещения элементов в списке не происходит(это должна сделать программа). Чтобы определить положение скроллинга списка, можно прочитать значение свойства PROP:VscrollPos (диапазон от 0 - начало списка, до 100 - конец списка).
Возвращает положение “бегунка” на вертикальной полосе прокрутки. Возможные значения: от 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
Свойство 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
Свойство (чтение/запись) допустимо для объектов списка окна и комбинированного списка. Используется для регулировки чувствительности прокрутки колесом мыши. Если свойство установлено в значение меньше 1, то по умолчанию оно устанавливается в 1. Чем меньше значение свойства, тем больше строк прокрутит колесо мыши. Значение по умолчанию равно 40 (приблизительно 3 строки на каждую ступень прокрутки для стандартного драйвера мыши).
Возвращает строку содержащую версию 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}
Установить или получить процедуру сообщения окну (не клиентской части) для того, чтобы использовать в обращениях на низком уровне интерфейса прикладного программирования, где это требуется. Обычно используется с подклассами для отслеживания всех сообщений в среде 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
(насколько прокручено окно ли поле)
Атрибуты полей 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} !
прочитать YoriginWy2 = 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
Свойство оператора FILE, которое возвращает процент завершения процесса перестраивания при работе операторов BUILD или PACK, для которых было установлено свойство PROP:ProgressEvents. Если драйверу файла не известно, какая часть процесса BUILD или PACK была выполнена, это свойство возвращает ноль (0). (ТОЛЬКО ДЛЯ ЧТЕНИЯ)
Свойство файла, использующего драйвер 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) !
Отобразить ее для будущего использования
Свойство оператора 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
Свойство SYSTEM (чтение/запись), которое может быть использовано для установки каталога по умолчанию для файлов данных.
Поиск файлов, имена которых не содержат путей к ним (т.е. файлы без атрибута NAME или их имена содержат относительные пути), будет происходить в каталоге, указанном SYSTEM{PROP:DataPath}.
По умолчанию SYSTEM{PROP:DataPath} содержит каталог, с которого было запущено приложение. Это избавит разработчиков кодировать следующим образом
:GETINI(datadirectory)
file1name = datadirectory & 'file1'
file2name = datadirectory & 'file2'
file3name = datadirectory & 'file3'
Свойство файла, которое переключает регистрацию буфера записи. Файл{PROP:Details}=1 включает регистрацию буфера записи и файл{PROP:Details}=0 – выключает.
Смотри также:
PROP:Profile, PROP:Log
Свойство оператора 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
Свойство структуры FILE или VIEW, которое устанавливает или получает параметр размер_страницы (pagesize) для последнего выполненного оператора BUFFER.
Пример:
CODE
OPEN(MyFile)
BUFFER(MyFile,10,5,2,300) !
10 записей на страницу, 5 страниц сохранять и!
2 страницы считывать вперед с интервалом в 5MyFile{PROP:FetchSize} = 1 !
Установить коэффициент выборки равным одной записи за раз
Свойство VIEW, которое возвращает номер поля в файле для указанного номера поля во VIEW. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)
Пример:
KFile &FILE
Record &GROUP
CODE
KFile &= key{PROP:File}
MESSAGE(KFile{PROP:Label, key{PROP:Field, 1}}) !Возвращает метку компонента первого ключа
Свойство 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
!AVie
w{PROP:FieldsFile,5} Возвращает указатель на Detail 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}}) !Возвращает метку первого компонента ключа
Свойство 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.GrandP
arentID) !Файл 3END
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(Chi
ld2: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} возвратит 5v{PROP:Files, 1} возвратит 4
v{PROP:Files, 2} возвратит 3
v{PROP:Files, 3} возвратит 1
v{PROP:Files, 4} возвратит 0
v{PROP:Files, 5} возвратит 0
Смотри также:
JOINfile
{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} = 0|1или
Flush=1|0 (в файле WIN.INI)
Свойство FILE, которое отключит кэширование по умолчанию для протоколирования файла.
По умолчанию, файловый драйвер кэширует информацию протокола, таким образом записывая за один раз полную строчку. Это облегчает прочтение лог-файла, когда вы имеете несколько запущенных процессов, но имеет недостаток, заключающийся в том, что при аварии может произойти некоторая потеря информации.
Если вы хотите быть уверенным в том, что информация не потеряется и вас не смущает некоторый беспорядок в информации при использовании нескольких запущенных процессов, вы можете заставить файловый драйвер писать информацию в лог-файл всякий раз, когда есть что туда добавить.
file{PROP:FlushLog} = TRUE
или добавив строчку
Flush=1
В раздел драйверов файла WIN.INI. Вы можете использовать утилиту трассировки, чтобы это делалось за вас.
file{PROP:FlushLog} = FALSE
выключает кэширование.
Свойство SYSTEM, которое будучи включенным, блокирует автоматическое закрытие файла .HLP когда окно, которое открывало файл .HLP, закрывается. Это сделает файл .HLP остающимся открытым до тех пор, пока пользователь не закроет его.
Пример:
SYSTEM{PROP:GlobalHelp} = TRUE !Блокирует автозакрытие файла HLP
Свойство оператора 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
Свойство оператора FILE, которое записывает строку в текущий файл протокола (определенный свойством PROP:Profile). Эта строка размещается в этом файле в отведенной ей строке.
(ТОЛЬКО ДЛЯ ЗАПИСИ)Пример:
FileName STRING(256)
Customer FILE,DRIVER('TopSpeed')
Record RECORD
Name STRING(20)
END
END
CODE
Customer{PROP:Profile} = 'CustLog.TXT'
!
Включить режим протоколирования, файл: CustLog.TXTOPEN(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.TXTEND
Customer{PROP:Profile} = '' !
Выключить режим протоколирования
Свойство оператора 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 !Завершить транзакцию
Свойство 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.
Свойство оператора FILE, которое размещает данные о регистрации (составляет протокол) всех вызовов файлов на ввод/вывод, а также ошибки, возвращенные файловым драйвером, в указанном текстовом файле. Задание имени файла в свойстве PROP:Profile включает режим протоколирования (в указанном файле), в то время как назначение пустой строки (‘’) - выключает. Запрашивание значения этого свойства приведет к возвращению имени текущего файла протокола, возвращенная же пустая строка (‘’) означает, что режим протоколирования выключен.
Пример:
filelabel
{PROP:Profile} = 'tracelog.txt' !включить протоколирование
filelabel
{PROP:Profile} = '' !выключить протоколирование
Свойство оператора 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
Свойство файла, которое возвращает групповой указатель на буфер записи файла. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)
Пример:
Rec &GROUP
Customer FILE,DRIVER('TopSpeed')
Record RECORD
Name STRING(20)
. .
CODE
Rec &= Customer{PROP:Record}
Свойство FILE, которое возвращает '1' если файловый драйвер принимает SQL, иначе возвращает пустую строку (''). (ТОЛЬКО ДЛЯ ЧТЕНИЯ)
Пример:
Customer FILE,DRIVER('Clarion'),PRE(CUS)
Record RECORD
Name STRING(20)
. .
SQLFlag BYTE
CODE
IF Customer{PROP:SQLDriver} THEN SQLFlag = TRUE.
Свойство FILE, которое позволяет читать и устанавливать атрибуты операторов ODBC. Это эквивалентно вызову ODBC API функций
SQLSetStmtOption или SQLGetStmtOption. Это свойство допустимо для всех файлов типа SQL, кроме Oracle.
Пример:
Customer{PROP:StmtAttr,7} = 3 ! Установить взаимозаменяемость строки проверки версии
Свойство FILE, которое позволяет узнать, поддерживается ли указанная функция файловым драйвером. Возвращает 1, если операция поддерживается и 0, если нет. Допустимые функции поддерживаемые этим свойством DriverOp:xxxx, перечислены в файле EQUATES.CLW. (ТОЛЬКО ДЛЯ ЧТЕНИЯ)
Свойство 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:Su
pportsType,DataType:LONG} ! Возвращает 1Supported = 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}
Множественное свойство оператора 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
Свойство 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