метка
APPLICATION('заголовок') [,AT( )] [,CENTER] [,SYSTEM] [,MAX] [,ICON( )] [,STATUS( )] [,HLP( )]
[,CURSOR( )] [,TIMER( )] [,ALRT( )] [,ICONIZE] [,MAXIMIZE] [,MASK] [,FONT( )]
[,MSG( )] [,IMM] [,AUTO] [,PALETTE()] [,LAYOUT( )]
[,WALLPAPER( )] [,| TILED | ] [,| HSCROLL | ] [, | DOUBLE | ]
| CENTERED | | VSCROLL | | NOFRAME | | HVSCROL | | RESIZE |
[ MENUBAR
объявления нескольких меню и/или пунктов
END ]
[ TOOLBAR
объявления нескольких управляющих полей
END ]
END
APPLICATION
Объявляет окно программы с интерфейсом MDI.метка Допустимая в Clarion метка. В операторе APPLICATION метка обязательна.
заголовок Задает текст заголовка основного окна прикладной программы (PROP:Text).
AT
Задает начальный размер и расположение основного окна прикладной программы (PROP:At). Если опущено, значение по умолчанию выбирается из динамической библиотеки.CENTER
Указывает, что по умолчанию первоначально окно центрируется на экране (PROP:Center). Этот атрибут действует, только если по крайней мере один параметр атрибута AT опущен.SYSTEM
Задает наличие системного меню (PROP:System).MAX
Задает наличие кнопок приведения к максимальному размера окна (PROP:Max).ICON
Задает наличие кнопок приведения к минимальному размеру, и указывает имя файла или стандартного идентификатора пиктограммы, высвечиваемой при минимизации размера окна (PROP:Icon).STATUS
Задает наличие линейки состояния внизу окна прикладной программы (PROP:Status).HLP
Задает “идентификатор подсказки” связанной с окном прикладной программы и обеспечивает идентификатор по умолчанию для любого порожденного окна (PROP:Hlp).CURSOR
Задает форму курсора мыши, которую он принимает в пределах окна прикладной программы (PROP:Cursor). Если этот атрибут опущен, то это курсор используемый по умолчанию в среде Windows.TIMER
Задает генерирование периодических временных событий (PROP:Timer).ALRT
Указывает “горячую” комбинацию клавиш для всего окна прикладной программы (PROP:Alrt).ICONIZE
Указывает, что при открытии окно прикладной программы минимизируется до пиктограммы (PROP:Iconize).MAXIMIZE
Указывает, что при открытии окно прикладной программы принимает максимальный размер (PROP:Maximize).MASK
Задает режим редактирования по шаблону вводимых данных для всех вводных управляющих полей на панели инструментов (PROP:Mask).FONT
Указывает используемый по умолчанию шрифт для всех управляющих полей на инструментальной панели (PROP:Font).MSG
Задает строковую константу, содержащую текст, выводимый по умолчанию в линейке состояния для всех управляющих полей структуры APPLICATION (PROP:Msg).IMM
Задает, что для окна при изменении его размеров или расположения генерируются соответствующие события (PROP:Imm).AUTO
Указывает, что значения USE-переменных для объектов данного окна выводятся вновь каждый раз при повторении цикла ACCEPT (PROP:Auto).PALETTE
Задает количество, поддерживаемых аппаратно цветов, используемых при выводе графики в окне (PROP:Palette).LAYOUT
Указывает направление расположения экранных объектов и последовательность полей. Стиль (1) по существу "переворачивает" выводимые в окно объекты в зеркальное отображение, указанное в форматере окна. Навигация по полям по умолчанию осуществляется справа налево.WALLPAPER
Определяет подложку изображения, отображаемого в области клиентского окна (PROP:WALLPAPER). Изображение заливает, растягиваясь, всю клиентскую область окна, если нет атрибутов TILED или CENTERED.TILED
Определяет подложку изображения, отображаемого со своим размером по умолчанию в области клиентского окна, заливая его, как черепица (PROP:TILED).CENTERED
Указывает, что изображение подложки отображается в том размере, что задан по умолчанию и центрируется относительно области клиентского окна (PROP:CENTERED).HSCROLL
Указывает, что к рамке окна прикладной программы автоматически добавляется линейка горизонтального скроллинга, если какая-либо часть порожденного окна по горизонтали выходит за границы видимой области (PROP:Hscroll).VSCROLL
Указывает, что к рамке окна прикладной программы автоматически добавляется линейка вертикального скроллинга, если какая-либо часть порожденного окна по вертикали выходит за границы видимой области (PROP:Vscroll).HVSCROLL
Указывает, что к рамке окна прикладной программы автоматически добавляются линейки вертикального и горизонтального скроллинга, если какая-либо часть порожденного окна выходит за границы видимой области.DOUBLE
Задает вокруг окна рамку двойной ширины (PROP:Double).NOFRAME
Задает окно без рамки (PROP:NoFrame).RESIZE
Задает толстую рамку вокруг окна, которая позволяет изменять размеры окна (PROP:Resize).MENUBAR
Определяет структуру меню (необязательную). Меню заданное в структуре APPLICATION является “глобальным меню”.TOOLBAR
Определяет структуру панели инструментов (необязательной). Панель инструментов, заданная в структуре APPLICATION является “Глобальной панелью управления”.Структура
APPLICATION объявляет обрамляющее окно с интерфейсом нескольких документов (MDI). Интерфейс MDI представляет собой часть стандартного интерфейса системы Windows и используется прикладными программами для того, чтобы представлять в разных окнах вывод на монитор разных процессов. Структура APPLICATION представляет собой способ организации и группировки MDI-окон. Обрамляющее MDI-окно (описываемое структурой APPLICATION) функционирует как “порождающее” окно по отношению к другим “порожденным” MDI-окнам (описываемым структурами WINDOW с атрибутом MDI). Эти порожденные MDI-окна располагаются в границах обрамляющего окна и автоматически перемещаются при его перемещении и могут быть вообще скрыты при его минимизации до пиктограммы.В любой момент времени в Clarion-программе может быть открыто только одно порождающее MDI-окно и оно должно быть открыто до того как будет открыто какое-либо порождаемое MDI-окно. Однако не-MDI-окна могут открываться и перед открытием
структуры APPLICATION, а также могут выполняться в отдельном процессе как APPLICATION.Порожденное MDI-окно не должно быть в том же самом процессе, что и окно всего приложения. Поэтому, любое порожденное MDI-окно, к которому обращаются непосредственно из окна приложения, должно располагаться в отдельной процедуре, так что для инициирования нового процесса можно использовать функцию START. После того как запущен новый процесс, в нем можно открыть несколько порожденных MDI-окон.
Структура APPLICATION, описывающая обычное порождающее окно должна иметь атрибуты ICON, MAX, STATUS, RESIZE и SYSTEM. В этом случае создается окно изменяемых размеров с рамкой, кнопками минимизации и максимизации, линейкой состояния и системным меню. Кроме того, в структуре APPLICATION должна быть структура MENUBAR, содержащая элементы глобального меню, и может быть структура TOOLBAR, описывающая мгновенный доступ к элементам глобального меню. Таким образом создается стандартный для Windows интуитивно понятный интерфейс.
Окно APPLICATION не может содержать управляющих полей кроме как внутри структур MENUBAR и TOOLBAR, и не может использоваться для вывода данных. Для этого требуются документальные или диалоговые окна (описываемые с помощью структур
WINDOW).Если сначала открывается окно APPLICATION, то оно остается скрытым до выполнения первого оператора DISPLAY или цикла ACCEPT. Это позволяет выполнить перед выводом окна некоторые изменения в его внешнем виде. События для окна
APPLICATION генерируются при первом выполнении цикла ACCEPT уже после того, как окно APPLICATION открыто.Генерируемые события:
EVENT:PreAlertKey Пользователь нажал указанную атрибутом ALRT горячую клавишу.
EVENT:AlertKey Пользователь нажал указанную атрибутом ALRT горячую клавишу.
EVENT:CloseWindow Окно закрывается.
EVENT:CloseDown Приложение завершается.
EVENT:OpenWindow Окно раскрывается.
EVENT:LoseFocus Фокус переключается от данного окна на другой процесс.
EVENT:GainFocus Данное окно получает фокус от другого процесса.
EVENT:Suspend Фокус еще остается на данном окне, но управление передается другому процессу для обработки таймерных событий.
EVENT:Resume Фокус остается на данном окне и
получает управление от EVENT:SUSPEND.EVENT:Timer Переключен атрибут TIMER (произошло таймерное событие).
EVENT:Move Пользователь перемещает окно. Оператор CYCLE прерывает перемещение.
EVENT:Moved Пользователь переместил окно.
EVENT:Size Пользователь изменяет размеры окна. Оператор CYCLE прерывает изменение.
EVEN
T:Sized Пользователь изменил размеры окна.EVENT:Restore Пользователь восстанавливает предыдущие размеры окна. Оператор CYCLE прерывает изменение размеров.
EVENT:Restored Пользователь восстановил предыдущие размеры окна.
EVENT:Maximize Пользователь устанавливает максимальные размеры окна. Оператор
CYCLE прерывает изменение размеров.EVENT:Maximized
Пользователь установил максимальные размеры окна.EVENT:Iconize Пользователь уменьшает размеры окна до пиктограммы. Оператор CYCLE прерывает изменение размеров.
EVENT:Iconized Пользователь свернул окно до пиктограммы.
EVENT:Completed В безостановочном режиме закончена обработка всех объектов в окне.
EVENT:DDErequest Клиент запросил элемент данных от данного приложения - сервера в процессе динамического обмена данными.
EVENT:DDEadvise Клиент запросил непрерывное обновление элемента данных от данного приложения - сервера в процессе динамического обмена данными.
EVENT:DDEexecute Клиент выполнил оператор DDEEXECUTE для данного приложения - сервера в процессе динамического обмена данными.
EVENT:DDEpoke Клиент прислал незатребованный элемент данных данному приложению - серверу в процессе динамического обмена данными.
EVENT:DDEdata Сервер динамического обмена данными прислал обновленный элемент данных данному приложению - клиенту.
EVENT:DDEclosed Сервер динамического обмена данными прервал связь с данным приложением - клиентом.
Связанные
процедуры: ACCEPT, ALERT, EVENT, POST, REGISTER, UNREGISTER, YIELD, ACCEPTED, CHANGE, CHOICE, CLOSE, CONTENTS, CREATE, DESTROY, DISABLE, DISPLAY, ENABLE, ERASE, FIELD, FIRSTFIELD, FOCUS, GETFONT, GETPOSITION, HELP, HIDE, INCOMPLETE, LASTFIELD, MESSAGE, MOUSEX, MOUSEY, OPEN, POPUP, SELECT, SELECTED, SET3DLOOK, SETCURSOR, SETFONT, SETPOSITION, SETTARGET, UNHIDE, UPDATEПример:
!Изменяемых размеров окно прикладной программы MDI с системным меню, кнопками
!минимизации и максимизации, линейкой состояния, линейками скроллинга, содержащее
!главное меню и панель инструментов для прикладной программы:
MainWin APPLICATION('My Application'),SYSTEM,MAX,ICON('MyIcon.ICO'),STATUS |
,HVSCROLL,RESIZE
MENUBAR
MENU('&File'),USE(?FileMenu)
ITEM('&Open...'),USE(?OpenFile)
ITEM('&Close'),USE(?CloseFile),DISABLE
ITEM('E&xit'),USE(?MainExit)
END
MENU('&Edit'),USE(?EditMenu)
ITEM('Cu&t'),USE(?CutText),KEY(CtrlX),STD(STD:Cut),DISABLE
ITEM('&Copy'),USE(?CopyText),KEY(CtrlC),STD(STD:Copy),DISABLE
ITEM('&Paste'),USE(?PasteText),KEY(CtrlV),STD(STD:Paste),DISABLE
END
MENU('&Window'),STD(STD:WindowList),LAST
ITEM('&Tile'),STD(STD:TileWindow)
ITEM('&Cascade'),STD(STD:CascadeWindow)
ITEM('&Arrange Icons'),STD(STD:ArrangeIcons)
END
MENU('&Help'),USE(?HelpMenu)
ITEM('&Contents'),USE(?HelpContents),STD(STD:HelpIndex)
ITEM('&Search...'),USE(?HelpSearch),STD(STD:HelpSearch)
ITEM('&How to Use Help'),USE(?HelpOnHelp),STD(STD:HelpOnHelp)
ITEM('&About MyApp...'),USE(?HelpAbout)
END
END
TOOLBAR
BUTTON('E&xit'),USE(?MainExitButton)
BUTTON('&Open'),USE(?OpenButton),ICON(ICON:Open)
END
END
CODE
OPEN(MainWin) !
Открыть окно APPLICATIONACCEPT
!Вывести окно APPLICATION и прочитать реакцию пользователяCASE ACCEPTED() !Какое поле выбрано?
OF ?0penFile !
Открыть... выбор менюOROF ?OpenButton ! или кнопка на панели инструментов
START(0penFileProc) !Начать новый процесс
OF ?MainExit !
Пункт меню выходOROF ?MainExitButton !или кнопка на панели инструментов
BREAK !
прервать цикл ACCEPTOF ?HelpAbout !
выбран пункт ABOUTHelpAboutProc !
Вызвать процедуру вывода информации о программеEND
END
CLOSE(MainWin) !
Закрыть окно APPLICATIONСмотри
также: ACCEPT, WINDOW, MDI, MENUBAR, TOOLBARобъявить диалоговое окно)
метка
WINDOW('заголовок') [,AT( )] [,CENTER] [,SYSTEM] [,MAX] [,ICON( )] [,STATUS( )] [,HLP( )][,CURSOR( )] [,MDI] [,MODAL] [,MASK] [,FONT( )] [,GRAY][,TIMER( )] [,ALRT( )]
[,ICONIZE] [,MAXIMIZE] [,MSG( )] [,PALETTE( )] [,DROPID( )] [,IMM]
[,AUTO] [,COLOR( )] [,TOOLBOX] [,DOCK( )] [,DOCKED( )] [,LAYOUT( )]
[,WALLPAPER( )] [,| TILED | ] [,| HSCROLL | ] [, | DOUBLE | ]
| CENTERED | | VSCROLL | | NOFRAME |
| HVSCROLL | | RESIZE |
[ MENUBAR
объявления нескольких меню и/или пунктов
END ]
[ TOOLBAR
объявления управляющих полей
END ]
объявления управляющих полей
END
WINDOW
Объявляет документальное или диалоговое окно.метка Допустимая в Clarion метка. В операторе WINDOW метка обязательна.
заголовок Задает текст заголовка основного окна (PROP:Text).
AT
Задает начальный размер и расположение окна. Если этот атрибут опущен, то значения по умолчанию устанавливаются библиотечной процедурой (PROP:At).CENTER
Указывает, что по умолчанию первоначально окно центрируется относительно порождающего окна. Этот атрибут действует, только если по крайней мере один параметр атрибута AT опущен (PROP:Center).SYSTEM
Задает наличие системного меню (PROP:System).MAX
Задает наличие кнопок приведения к максимальному размера окна (PROP:Max).ICON
Задает наличие кнопок приведения к минимальному размеру окна, и указывает имя файла или стандартного идентификатора пиктограммы, высвечиваемой при минимизации размера окна (PROP:Icon).STATUS
Задает наличие линейки состояния внизу окна (PROP:Status).HLP
Задает “идентификатор подсказки” связанной с этим окном (PROP:Hlp).CURSOR
Задает форму курсора мыши, которую он принимает в пределах данного окна. Эта форма курсора наследуется всеми управляющими полями данного окна, если для них явно не задается другая форма курсора (PROP:Cursor).MDI
Указывает, что окно соответствует обычным правилам для порожденного MDI-окна (PROP:Mdi).MODAL
Задает модальность окна относительно среды Windows и должно быть закрыто прежде, чем пользователь сможет дальше что-либо делать (PROP:Modal).MASK
Задает режим редактирования по шаблону вводимых данных для всех вводных управляющих полей в окне (PROP:Mask).FONT
Указывает используемый по умолчанию шрифт для всех управляющих полей в окне (PROP:Font).GRAY
Указывает, что окно имеет серый фон для использования полей, выглядящих объемными (PROP:Gray).TIMER
Задает генерирование периодических временных событий (PROP:Timer).ALRT
Указывает какие “горячие” клавиши активны, когда данное окно имеет фокус (PROP:Alrt).ICONIZE
Указывает, что при открытии, окно минимизируется до пиктограммы (PROP:Iconize).MAXIMIZE
Указывает, что при открытии, окно принимает максимальный размер (PROP:Maximize).MSG
Задает строковую константу, содержащую текст, выводимый по умолчанию в линейке состояния для всех управляющих полей данного окна (PROP:Msg).PALETTE
Задает количество поддерживаемых аппаратно цветов, используемых при выводе графики в окне (PROP:Palette).DROPID
Указывает, что данное окно может служить областью, в которой происходит вторая часть операции “перетащить и отпустить” - отпускание объекта (PROP:Dropid).IMM
Задает, что для окна при изменении его размеров или положения генерируются соответствующие события (PROP:Imm).AUTO
Указывает, что значения USE-переменных для объектов данного окна выводятся вновь каждый раз при повторении цикла ACCEPT (PROP:Auto).COLOR
Указывает цвет фона для окна и используемый по умолчанию цвет фона и цвет выбранного управляющего объекта в окне (PROP:Color).TOOLBOX
Задает, что окно “всегда сверху”, а на объектах в нем никогда не задерживается фокус (PROP:Toolbox).DOCK
Задает, что окно с атрибутом TOOLBOX – может прижиматься к краю (PROP:DOCK).DOCKED
Задает, что окно с атрибутом DOCK при открытии прижато к краю (PROP:DOCKED).LAYOUT
Указывает направление расположения экранных объектов и последовательность полей. Стиль (1) по существу "переворачивает" выводимые в окно объекты в зеркальное отображение, указанное в форматере окна. Навигация по полям по умолчанию осуществляется справа налево.WALLPAPER
Определяет подложку изображения, отображаемого в области клиентского окна (PROP:WALLPAPER). Изображение заливает, растягиваясь, всю клиентскую область окна, если нет атрибутов TILED или CENTERED.TILED
Определяет подложку изображения, отображаемого со своим размером по умолчанию в области клиентского окна, заливая его, как черепица (PROP:TILED).CENTERED
Указывает, что изображение подложки отображается в том размере, что задан по умолчанию и центрируется относительно области клиентского окна (PROP:CENTERED).HSCROLL
Указывает, что к рамке окна автоматически добавляется линейка горизонтального скроллинга, если какая-либо часть окна по горизонтали выходит за границы видимой области (PROP:Hscroll).VSCROLL
Указывает, что к рамке окна автоматически добавляется линейка вертикального скроллинга, если какая-либо часть окна по вертикали выходит за границы видимой области (PROP:Vscroll).HVSCROLL
Указывает, что к рамкам окна автоматически добавляются линейки вертикального и горизонтального скроллинга, если какая-либо часть окна выходит за границы видимой области.DOUBLE
Задает вокруг окна рамку двойной ширины (PROP:Double).NOFRAME
Задает окно без рамки. Окно такого типа не может изменяться в размерах (PROP:NoFrame).RESIZE
Задает толстую рамку вокруг окна, которая позволяет изменять размеры окна (PROP:Resize).MENUBAR
Определяет структуру меню (необязательную).объявления нескольких меню и/или пунктов
Объявления меню и/или пунктов меню, которые определяют выбор.
TOOLBAR
Определяет структуру панели инструментов (необязательную).объявления управляющих полей
Определяют объекты, доступные на панели инструментов, или управляющих полей в окне.
Структура
WINDOW объявляет документальное или диалоговое окно, которое может содержать поля и использоваться для вывода данных. Когда окно открывается в первый раз, оно остается скрытым до первого выполнения оператора DISPLAY или цикла ACCEPT. Это позволяет выполнить перед выводом окна некоторые изменения в его внешнем виде. Любое открытое ранее в этом исполняемом процессе окно становится недоступным. События для окна генерируются первым выполнением цикла ACCEPT после того как окно впервые открыто.Если не указан один из параметров DOUBLE, NOFRAME или RESIZE, для окна автоматически устанавливается рамка одинарной толщины. Координаты на экране измеряются в условных единицах (dialog units). Условные единицы определяются как одна четвертая часть средней ширины и одна восьмая средней высоты символа в шрифте заданном атрибутом FONT структуры WINDOW (или системного шрифта, если этот атрибут не задан).
Окно, имеющее атрибут MODAL является модальным относительно системы; оно получает исключительное управление ресурсами компьютера. Это означает, что до тех пор пока не будет закрыто окно, имеющее атрибут MODAL, будет приостановлено выполнение любой программы, выполнявшейся в фоновом режиме. Следовательно, этот атрибут следует использовать, только когда это крайне необходимо. Кроме того, при наличии атрибута MODAL игнорируется атрибут RESIZE, а окно становится неперемещаемым.
Окно без атрибута MDI, будучи открыто в MDI-программе, является модальным по отношению к приложению. Это означает, что пользователь должен отреагировать на запрос в этом окне, прежде чем переключиться на любое другое окно в прикладной программе. Однако на другую программу, выполняющуюся в это же время в среде Windows, пользователь может переключиться. Окно без атрибута MDI можно открыть или до, или после открытия окна APPLICATION, его может открыть или тот же самый процесс, что и окно приложения, или любой порожденный процесс, открывший MDI-окно, (в этом случае окно модально по отношению к приложению) или совершенно отдельный процесс (в этом случае окно немодально относительно приложения).
Окно, у которого есть атрибут MDI, это порожденное MDI-окно. Порожденное MDI-окно располагается в границах окна прикладной программы, объявляемого структурой APPLICATION, перемещается вместе с ним автоматически и вообще может исчезать при минимизации до пиктограммы
порождающего APPLICATION-окна. Порождаемое MDI-окно является немодальным, т.е. пользователь в любое время может переключиться на верхнее окно в другом исполняемом процессе внутри этой же прикладной программы или на любую другую выполняемую в среде Windows программу. Порожденное MDI-окно не должно быть в том же самом процессе, что и окно всего приложения. Поэтому, любое порожденное MDI-окно, к которому обращаются непосредственно из окна приложения должно располагаться в отдельной процедуре, так что для инициирования нового процесса можно использовать процедуру START. После того как запущен новый процесс, в нем можно открыть несколько порожденных MDI-окон.Линейка меню, заданная в структуре WINDOW с атрибутом MDI, когда на это окно переключается фокус, автоматически объединяется с “глобальным меню” (из структуры APPLICATION), если только структура MENUBAR в APPLICATION или в WINDOW не имеет атрибута NOMERGE. Линейка же меню, описанная в структуре WINDOW без атрибута MDI, никогда не объединяется с “глобальным меню” - она всегда выводится в своем “окне”.
Панель инструментов, заданная в структуре WINDOW с атрибутом MDI, когда на это окна переключается фокус, автоматически объединяется с “глобальной панелью” (из структуры APPLICATION), если только структура TOOLBAR в APPLICATION или в WINDOW не имеет атрибута NOMERGE. Панель же инструментов, описанная в структуре WINDOW без атрибута MDI, никогда не объединяется с “глобальной” - она всегда выводится в своем “окне”.
Окно с атрибутом TOOLBOX автоматически выводится “всегда сверху”, а на объектах в нем никогда не задерживается фокус (как если бы все они имели атрибут SKIP). Таким образом создается окно, объекты в котором ведут себя так же как объекты на панели инструментов. Обычно окно с атрибутом TOOLBOX раскрывается и обрабатывается в своем собственном процессе.
Генерируемые события:
6
ОКНА И МЕНЮ 215EVENT:PreAlertKey Пользователь нажал указанную атрибутом ALRT горячую клавишу.
EVENT:AlertKey Пользователь нажал указанную атрибутом ALRT горячую клавишу.
EVENT:Close
Window Окно закрывается.EVENT:CloseDown Приложение завершается.
EVENT:OpenWindow Окно раскрывается.
EVENT:LoseFocus Фокус переключается от данного окна на другой процесс.
EVENT:GainFocus Данное окно получает фокус от другого процесса.
EVENT:Suspend
Фокус еще остается на данном окне, но управление передается другому процессу для обработки таймерных событий.EVENT:Resume Фокус остается на данном окне, и управление снова получает управление от
EVENT:SUSPEND.EVENT:Docked
Окно с атрибутом TOOLBOX прижато к краю.EVENT:Undocked
Окно с атрибутом TOOLBOX не прижато к краю.EVENT:Timer Переключен атрибут TIMER (произошло таймерное событие).
EVENT:Move Пользователь перемещает окно. Оператор CYCLE прерывает перемещение.
EVENT:Moved Пользователь переместил окно.
EVENT:Size Пользователь изменяет размеры окна. Оператор CYCLE прерывает изменение.
EVENT:Sized Пользователь изменил размеры окна.
EVENT:Restore Пользователь восстанавливает предыдущие размеры окна. Оператор CYCLE прерывает изменение размеров.
EVE
NT:Restored Пользователь восстановил предыдущие размеры окна.EVENT:Maximize Пользователь устанавливает максимальные размеры окна. Оператор CYCLE прерывает изменение размеров.
EVENT:Maximized Пользователь установил максимальные размеры окна.
EVENT:Iconi
ze Пользователь уменьшает размеры окна до пиктограммы. Оператор CYCLE прерывает изменение размеров.EVENT:Iconized Пользователь свернул окно до пиктограммы.
EVENT:Completed В безостановочном режиме закончена обработка всех объектов в окне.
EVENT:DDErequ
est Клиент запросил элемент данных от данного приложения - сервера в процессе Управляющие структуры и операторы динамического обмена данными.EVENT:DDEadvise Клиент запросил непрерывное обновление элемента данных от данного приложения - сервера в процессе динамического обмена данными.
EVENT:DDEexecute Клиент выполнил оператор DDEEXECUTE для данного приложения - сервера в процессе динамического обмена данными.
EVENT:DDEpoke Клиент прислал незатребованный элемент данных данному приложению -серверу в процессе динамического обмена данными.
EVENT:DDEdata Сервер динамического обмена данными прислал обновленный элемент данных данному приложению - клиенту.
EVENT:DDEclosed Сервер динамического обмена данными прервал связь с данным приложением - клиентом.
Связанные
процедуры: ACCEPT, ALERT, EVENT, POST, REGISTER, UNREGISTER, YIELD, ACCEPTED, CHANGE, CHOICE, CLOSE, CONTENTS, CREATE, DESTROY, DISABLE, DISPLAY, ENABLE, ERASE, FIELD, FIRSTFIELD, FOCUS, GETFONT, GETPOSITION, HELP, HIDE, INCOMPLETE, LASTFIELD, MESSAGE, MOUSEX, MOUSEY, OPEN, POPUP, SELECT, SELECTED, SET3DLOOK, SETCURSOR, SETFONT, SETPOSITION, SETTARGET, UNHIDE, UPDATEПример:
! Порождаемое MDI-окно с системным меню, кнопками минимизации и максимального увеличения,
! линейкой состояния, линейками скроллинга, изменяемых размеров, содержащее линейки меню
! и инструментов, объединяющиеся в линейки меню и инструментов прикладной программы:
MDIChild WINDOW('Child One'),MDI,SYSTEM,MAX,ICON('Icon.ICO'),STATUS,HVSCROLL,RESIZE
MENUBAR
MENU('File'),USE(?FileMenu)
ITEM('Close'),USE(?CloseFile)
END
MENU('Edit'),USE(?EditMenu)
ITEM('Undo'),USE(?UndoText),KEY(CtrlZ),STD(STD:Undo)
ITEM('Cu&t'),USE(?CutText),KEY(CtrlX),STD(STD:Cut)
ITEM('Copy'),USE(?CopyText),KEY(CtrlC),STD(STD:Copy)
ITEM('Paste'),USE(?PasteText),KEY(CtrlV),STD(STD:Paste)
END
END
TOOLBAR
BUTTON('Cut'),USE(?CutButton),ICON(ICON:Cut),STD(STD:Cut)
BUTTON('Copy'),USE(?CopyButton),ICON(ICON:Copy),STD(STD:Copy)
BUTTON('Paste'),USE(?PasteButton),ICON(ICON:Paste),STD(STD:Paste)
END
TEXT,HVSCROLL,USE(Pre:Field)
BUTTON('&OK'),USE(?Exit),DEFAULT
END
! Не MDI-окно с системным меню, кнопкой минимизации, линейкой состояния и
! рамкой, не допускающей изменения размеров, содержащее управляющие поля
NonMDI WINDOW('Dialog Window'),SYSTEM,MAX,STATUS
TEXT,HVSCROLL,USE(Pre:Field),MSG('Enter some text here')
BUTTON('&OK'),USE(?Exit),DEFAULT
END
!Системно-модальное окно с рамкой, не допускающей изменения размеров,
!содержащее только текст сообщения и кнопку OK
ModalWin WINDOW('Modal Window'),MODAL
IMAGE(ICON:Exclamation)
STRING('An ERROR has occurred')
BUTTON('&OK'),USE(?Exit),DEFAULT
END
Смотри также:
ACCEPT, APPLICATIONENUBAR (объявить структуру спускающегося меню)
MENUBAR [,USE( )] [, NOMERGE ]
[ MENU( )
[ ITEM( ) ]
[ MENU( )
[ ITEM( ) ]
END ]
END ]
[ ITEM( ) ]
END
MENUBAR
Объявляет структуру спускающегося меню в окне APPLICATION или WINDOW.USE
Метка соответствия поля для возможности указания на структуру меню в исполняемом коде (PROP:USE). Чтобы получить динамически Метку Соответствия Поля, также можно использовать свойство PROP:MenuBar.NOMERGE
Задает возможность или невозможность объединения меню.MENU
Пункт меню вместе со связанным с ним окном, содержащим вложенные пункты меню.ITEM
Пункт меню.Структура
MENUBAR объявляет для окна APPLICATION или WINDOW структуру спускающегося меню. Структура MENUBAR должна находиться в исходном тексте программы до объявления структуры TOOLBAR или объявления какого-либо управляющего поля.В структуре APPLICATION оператор MENUBAR объявляет главное (или глобальное) спускающееся меню, относящееся ко всей программе. Это меню всегда активно и доступно изо всех порожденных MDI-окон (если только собственное меню окна не имеет атрибута NOMERGE). Если атрибут NOMERGE указан в структуре MENUBAR окна APPLICATION, то в этом случае меню является локальным и выводится только когда нет открытых
MDI-окон и нет глобального меню.В структуре WINDOW с атрибутом MDI оператор MENUBAR определяет пункты меню, которые автоматически объединяются с глобальным меню. Таким образом в то время, как на порожденное MDI-окно переключен фокус ввода, активны и глобальное меню и меню окна. После переключения фокуса на другое окно пункты меню предыдущего окна удаляются из глобального меню. Если же атрибут NOMERGE указан в структуре MENUBAR MDI-окна, то его меню замещает и перекрывает глобальное меню.
Спускающееся меню окна без атрибута MDI никогда не объединяется с глобальным меню. Она всегда выводится в самом окне, а не в окне APPLICATION, которое могло быть раскрыто ранее.
События, генерируемые пунктами локального меню обычным образом передаются циклу ACCEPT. События же, генерируемые элементами глобального меню, передаются активному ACCEPT-циклу процесса, который открыл структуру APPLICATION (для обычной прикладной программы с несколькими процессами это означает, что события передаются ACCEPT-циклу самой прикладной программы).
Динамические изменения пунктов меню, которые касаются только активного в данный момент окна, влияют только на вид меню в данный момент, даже если изменяются глобальные элементы. Изменения же, сделанные в пунктах глобального меню, когда текущим является окно APPLICATION, или в пунктах, которые касаются окна APPLICATION, влияют на глобальную часть всех меню, независимо от того открыто то меню или нет.
Когда линейка меню окна объединяется с линейкой меню окна APPLICATION, сначала выводятся пункты глобального меню, за которыми следуют пункты локального меню, если только для отдельных пунктов не указаны атрибуты FIRST и LAST.
Для того, чтобы получить меню, состоящее из двух столбцов, нужно выполнить
PROP:MAX=1 к пункту меню, который начинает второй столбец.Пример:
!Окно прикладной программы с MDI, в котором находится главное меню программы:
MainWin APPLICATION('My Application')
MENUBAR
MENU('File'),USE(?FileMenu)
ITEM('Open...'),USE(?OpenFile)
ITEM('Close'),USE(?CloseFile),DISABLE
ITEM('E&xit'),USE(?MainExit),LAST
END
MENU('Edit'),USE(?EditMenu)
ITEM('Cu&t'),USE(?CutText),KEY(CtrlX),STD(STD:Cut),DISABLE
ITEM('Copy'),USE(?CopyText),KEY(CtrlC),STD(STD:Copy),DISABLE
ITEM('Paste'),USE(?PasteText),KEY(CtrlV),STD(STD:Paste),DISABLE
END
MENU('Window'),STD(STD:WindowList),LAST
ITEM('Tile'),STD(STD:TileWindow)
ITEM('Cascade'),STD(STD:CascadeWindow)
END
MENU('Help'),USE(?HelpMenu),LAST
ITEM('Contents'),USE(?HelpContents),STD(STD:HelpIndex)
ITEM('Search for Help On...'),USE(?HelpSearch),STD(STD:HelpSearch)
ITEM('How to Use Help'),USE(?HelpOnHelp),STD(STD:HelpOnHelp)
ITEM('About MyApp...'),USE(?HelpAbout)
END
END
END
!Порожденное MDI-окно с линейкой меню, объединяемой с линейкой меню прикладной
!
программы:MDIChild WINDOW('Child One'),MDI
MENUBAR
MENU('File'),USE(?FileMenu) !
Объединяется с меню FileITEM('Pick...'),USE(?PickFile) !
Добавлено в выбор менюEND
MENU('Edit'),USE(?EditMenu) !
Добавляется в меню EditITEM('Undo'),USE(?UndoText),KEY(CtrlZ),STD(STD:Undo) !
Добавлено в менюEND
END
TEXT,HVSCROLL,USE(Pre:Field)
BUTTON('&OK'),USE(?Exit),DEFAULT
END
!
MDI-окно со своим собственным меню, замещающим главное меню:MDIChild2 WINDOW('Dialog Window'),MDI,SYSTEM,MAX,STATUS
MENUBAR,NOMERGE
MENU('File'),USE(?FileMenu)
ITEM('Close'),USE(?CloseFile)
END
MENU('Edit'),USE(?EditMenu)
ITEM('Undo'),USE(?UndoText),KEY(CtrlZ),STD(STD:Undo)
ITEM('Cu&t'),USE(?CutText),KEY(CtrlX),STD(STD:Cut)
ITEM('Copy'),USE(?CopyText),KEY(CtrlC),STD(STD:Copy)
ITEM('Paste'),USE(?PasteText),KEY(CtrlV),STD(STD:Paste)
END
END
TEXT,HVSCROLL,USE(Pre:Field),MSG('Enter some text here')
BUTTON('&OK'),USE(?Exit),DEFAULT
END
!
Не MDI-окно со своим собственным меню:NonMDI WINDOW('Dialog Window'),SYSTEM,MAX,STATUS
MENUBAR
MENU('File'),USE(?FileMenu)
ITEM('Close'),USE(?CloseFile)
END
MENU('Edit'),USE(?EditMenu)
ITEM('Undo'),USE(?UndoText),KEY(CtrlZ),STD(STD:Undo)
ITEM('Cu&t'),USE(?CutText),KEY(CtrlX),STD(STD:Cut)
ITEM('Copy'),USE(?CopyText),KEY(CtrlC),STD(STD:Copy)
ITEM('Paste'),USE(?PasteText),KEY(CtrlV),STD(STD:Paste)
END
END
TEXT,HVSCROLL,USE(Pre:Field),MSG('Enter some text here')
BUTTON('&OK'),USE(?Exit),DEFAULT
END
TOOLBAR (объявить панель инструментов)
TOOLBAR [,AT( )] [,USE( )] [,CURSOR( )] [,FONT( )] [,NOMERGE] [,COLOR]
[,WALLPAPER( )] [,| TILED | ]
| CENTERED |
управляющие поля
END
TOOLBAR
Объявляет панель инструментов для окна APPLICATION или WINDOW.AT
Задает первоначальные размеры панели инструментов. Если этот параметр опущен, то значения по умолчанию выбираются библиотечной процедурой.USE
Метка соответствия полей инструментальной панели в исполняемом коде (PROP:Use). Чтобы получить динамически Метку Соответствия Поля панели, также можно использовать свойство PROP:TOOLBAR.CURSOR
Задает форму, в виде которой курсор мыши должен изображаться при позиционировании на панель инструментов. Если этот параметр опущен, то используется форма, заданная атрибутом CURSOR структуры APPLICATION или WINDOW, если и там этот атрибут отсутствует, используется форма курсора принятая в среде Windows по умолчанию.FONT
Задает шрифт используемый по умолчанию для полей на панели инструментов.NOMERGE
Задает возможность или невозможность слияния инструментов с другой панелью.COLOR
Задает цвет фона для структуры TOOLBAR и используемые по умолчанию цвета фона и цвет активизированного поля для объектов в данной структуре TOOLBAR.WALLPAPER
Атрибут WALLPAPER (PROP:WALLPAPER) определяет изображение, которое появляется в качестве фона инструментальной панели. Это изображение растягивается для полной заливки инструментальной панели, если не представлены атрибуты TILED или CENTERED.TILED
Определяет изображение, отображаемое с тем размером, что задан по умолчанию. Изображение многократно повторяется для заливки всей области инструментальной панели. (PROP:TILED).CENTERED
Специфицирует изображение, появляющееся в качестве фона; отображается с тем размером, который задан по умолчанию и расположен по центру инструментальной панели (PROP:CENTERED).управляющие поля Объявление управляющих полей, которые определяют доступные инструменты.
Структура
TOOLBAR объявляет панель инструментов, высвечиваемую в окне APPLICATION или WINDOW. В структуре APPLICATION оператор TOOLBAR определяет инструменты глобальные для данной программы. Если в операторе TOOLBAR структуры APPLICATION задан атрибут NOMERGE, то эти инструменты являются локальными, и высвечиваются, только когда нет раскрытых MDI-окон; в этом случае нет глобальных инструментов. Глобальные инструменты активны и доступны из всех порожденных MDI-окон, если только структура TOOLBAR самого MDI-окна не имеет атрибута NOMERGE. Если же имеет такой атрибут, то инструменты порожденного MDI-окна замещают глобальные инструменты.В структуре WINDOW с атрибутом MDI оператор TOOLBAR определяет инструменты, которые автоматически присоединяются к глобальной панели инструментов. После чего, и глобальные инструменты, и инструменты данного окна активны на протяжении времени, в течение которого на данное порожденное MDI-окно переключен фокус ввода. После переключения фокуса на другое окно, инструменты предыдущего удаляются из глобальной панели. Если в структуре TOOLBAR MDI-окна указан атрибут NOMERGE, то его инструменты замещают и перекрывают глобальные. Инструменты окна без атрибута MDI никогда не объединяются с глобальными инструментами. В этом случае панель инструментов высвечивается в самом окне, а не в ранее открытом окне APPLICATION.
События, генерируемые локальными инструментами обычным образом передаются циклу ACCEPT. События же, генерируемые инструментами глобальной панели, передаются активному ACCEPT-циклу процесса, который открыл структуру APPLICATION. Для обычной прикладной программы с несколькими процессами это означает, что события передаются ACCEPT-циклу самой прикладной программы.
Для управляющих полей на панели инструментов события генерируются обычным образом. Однако на них не переключается фокус ввода и ими нельзя манипулировать с помощью клавиатуры, если только для инструментов не определены горячие клавиши. Как только действие пользователя посредством поля на панели инструментов выполнено, фокус ввода возвращается на окно и локальное управляющее поле на котором он был установлен ранее. Поля панели инструментов не являются частью последовательности полей на которые можно переключиться клавишей
TAB, они ведут себя также как поля, имеющие атрибут SKIP. Вдобавок, на кнопки, радио-кнопки и переключатели не может переключаться фокус (выступают как объекты с атрибутом SKIP). Фокус на них может быть переключен одним из следующих способов:Поэтому нажатие горячей клавиши определенной для приглашения не переключит автоматически фокус на следующий объект. Если необходимо эмулировать навигацию клавишей
TAB по объектам панели инструментов, нажатие клавиш TAB и Shift-TAB надо перехватывать и переводить в обязательные операторы SELECT.Динамические изменения инструментов, которые касаются активного в данный момент окна, влияют только на вид меню в данный момент, даже если изменяются глобальные инструменты. Изменения же, сделанные в инструментах глобальной панели, когда текущим является окно APPLICATION, или в инструментах, которые касаются окна APPLICATION, влияют на глобальную часть всех инструментальных линеек программы,
независимо от того, отображаются они в данный момент или нет. Это означает, что когда дочернее окно многодокументного интерфейса MDI является активным, управляющие элементы панели инструментов (toolbar), выдаваемые в рамке окна приложения, являются в действительности копиями управляющих элементов рамки. Это позволяет каждому дочернему MDI-окну модифицировать свой собственный набор управляющих элементов панели инструментов без воздействия на управляющие элементы, выдаваемые для других дочерних MDI-окон. События для этих управляющих элементов обрабатываются с помощью ACCEPT-цикла приложения. Например, назначение кнопки, объявленной в панели инструментов приложения, имеет поле номер 150. Процедура дочернего MDI-окна может модифицировать изображение этой кнопки непосредственной установкой свойств управляющего элемента номер 150, которое изменяла бы ее изображение только тогда, когда оконная процедура дочернего MDI-окна активна и имеет фокус.Когда панель инструментов окна объединяется с панелью инструментов окна APPLICATION, сначала выводятся инструменты глобальной панели, за которыми следуют инструменты локальной. Панели объединяются таким образом, что управляющие поля панели окна WINDOW выводятся справа от точки, заданной значением параметра ширина атрибута AT структуры TOOLBAR окна APPLICATIO
N. Высота высвечиваемой панели равна высоте “самого высокого” инструмента, глобального ли, локального ли не имеет значения. Если некоторая часть какого-то инструмента выступает ниже линии панели, то высота панели соответственно увеличивается.Пример:
!Порождающее окно прикладной программы с MDI, содержащее главное меню,
! и панель инструментов для данной программы
:MainWin APPLICATION('My Application'),SYSTEM,MAX,ICON('MyIcon.ICO'),STATUS |
,HVSCROLL,RESIZE
MENUBAR
ITEM('E&xit'),USE(?MainExit)
END
TOOLBAR
BUTTON('Exit'),USE(?MainExitButton)
END
END
!Порожденное MDI-окно с локальной панелью инструментов,
! встраивающейся в панель инструментов окна APPLICATION
:MDIChild WINDOW('Child One'),MDI
TOOLBAR
BUTTON('Cut'),USE(?CutButton),STD(STD:Cut)
BUTTON('Copy'),USE(?CopyButton),STD(STD:Copy)
BUTTON('Paste'),USE(?PasteButton),STD(STD:Paste)
END
TEXT,HVSCROLL,USE(Pre:Field)
BUTTON('&OK'),USE(?Exit),DEFAULT
END
!MDI-окно со своей собственной панелью инструментов, замещающей главную панель
:MDIChild2 WINDOW('Dialog Window'),MDI,SYSTEM,MAX,STATUS
TOOLBAR,NOMERGE
BUTTON('Cut'),USE(?CutButton),STD(STD:Cut)
BUTTON('Copy'),USE(?CopyButton),STD(STD:Copy)
BUTTON('Paste'),USE(?PasteButton),STD(STD:Paste)
END
TEXT,HVSCROLL,USE(Pre:Field),MSG('Enter some text here')
BUTTON('&OK'),USE(?Exit),DEFAULT
END
В большинстве программ в среде Windows используется три типа окон: окно прикладной программы, документальное окно и диалоговое окно. Окно прикладной программы - это первое раскрытое в программе окно, и обычно, оно содержит главное меню как средство обращения к остальным частям программы. Все остальные окна в программе - документальные и диалоговые окна.
Наряду с экранными окнами этих трех типов в программах под Windows используется две системы правил построения пользовательского интерфейса: интерфейс одного документа (Single Document Interface - SDI) и интерфейс нескольких документов (Multiple Document Interface - MDI).
Программы с интерфейсом одного документа обычно имеют только линейную логику, которая позволяет пользователю в данный момент времени выполнять только одну цепочку действий (один процесс). Такая программа не порождает отдельных процессов, между которыми пользователь может переключать свое внимание. Точно такой тип логики используется в большинстве программ в среде DOS. Программа с SDI не должна содержать структуру APPLICATION в качестве структуры, описывающей окно прикладной программы. Чтобы определить окно прикладной программы с MDI используется языковая структура WINDOW, без атрибута MDI, а последующие документальные и диалоговые окна раскрываются поверх окна прикладной программы.
Программы с MDI позволяют пользователю выбрать несколько выполняющихся процессов и в любое время переключаться между ними. Это очень распространенный интерфейс пользователя программ в среде Windows. Он используется прикладными программами как средство организации и группировки окон, представляющих различные исполняемые процессы, для запустившего их пользователя.
В языке Clarion окно прикладной программы с MDI определяется с помощью структуры APPLICATION. Окно прикладной программы с MDI работает как порождающее окно для всех порождаемых MDI-окон (документальных и диалоговых окон), в пределах которого все они размещаются и автоматически перемещаются при перемещении окна прикладной программы: Кроме того порожденные окна могут быть скрыты совсем при минимизации порождающего окна. В Clarion-программе для среды Windows в любой момент времени может быть открыта только одна структура APP
LICATION.Документальные и диалоговые окна очень похожи в том смысле, что оба определяются посредством структуры WINDOW языка Clarion. Они различаются в том контексте, в котором они обычно используются, и соглашениями, касающимися появления их на экране и атрибутов. Часто эти отличия неразличимы и не имеют значения. Общим термином и для документального окна, и для диалогового окна служит термин “окно”, который и будет использоваться повсюду в этой книге.
Обычно в документальных окнах отображаются данные. По соглашениям, эти окна являются перемещаемыми и изменяемыми в размерах. Обычно у них есть заголовок, системное меню и кнопка Maximize. Например, в оболочке Windows документальным окном является окно программной группы “Main”, которое появляется при двойном щелчке мышью на пиктограмме “Main” находящейся в рамках окна диспетчера программ (
Program Manager).В диалоговых окнах от пользователя обычно запрашиваются данные, или пользователь оповещается о некой ситуации, обычно перед тем как выполнить некоторые действия, запрошенные пользователем. Эти окна могут быть (а могут и не быть) перемещаемыми и таким образом могут иметь (или не иметь) системное меню и заголовок. По правилам, они не являются изменяемыми в размерах, хотя могут иметь кнопку Maximize, с помощью которой окно может принимать два альтернативных размера. Диалоговое окно может быть модальным относительно системы (пользователь должен обязательно каким-то образом прореагировать, прежде чем что-либо делать далее в среде Windows) или модальным относительно прикладной программы (пользователь должен обязательно каким-то образом прореагировать, прежде чем что-либо делать далее в прикладной программе) либо немодальным. К примеру в среде Clarion окно, которое раскрывается при выборе в меню File пункта Open представляет собой диалоговое окно для имени файла, который надлежит открыть.
Смотри также
: Управляющие поля и фокус ввода, Метки соответствия полей
Управляющие поля и “фокус ввода”
Объекты, объявленные в структуре APPLICATION или WINDOW, представляют собой “управляющие поля” (controls). Это стандартный в Windows термин, использующийся для ссылки на любой экранный объект: командные кнопки, поля для ввода текста, кнопки радио, окна списка и т.д. . В большинстве программ для DOS термин “поле” обычно используется для указания на те же объекты. В данном руководстве термины “управляющее поле” и “поле” являются взаимозаменяемыми.
Управляющие поля появляются только в структурах MENUBAR, TOOLBAR и WINDOW. Только когда в данное поле переключен "фокус ввода" становится возможным для пользователя выбирать поле и/или редактировать содержащиеся в нем данные. Переключение фокуса происходит, когда пользователь использует клавишу TAB, манипулятор мышь или комбинацию “быстрых клавиш” для выделения управляющего поля.
Окно также приобретает фокус, когда оно является верхним окном в активном в данный момент исполняемом процессе. Поскольку Clarion для Windows допускает создание программ с несколькими исполняющимися процессами вопрос о том, на какое окно переключен фокус имеет важное значение. Активным является только тот процесс, которому принадлежит самое верхнее окно. Редактировать данные в управляющем поле окна пользователь может только если на это поле переключен фокус.
Управляющая нумерация
В структурах Windows каждому управляющему полю, имеющему USE-переменную, компилятором присваивается номер. По умолчанию эти номера полей начинаются с единицы (1) и присваиваются управляющим полям в порядке их следования в тексте структуры WINDOW (само окно имеет нулевой номер). Посредством второго параметра атрибута USE присваиваемый номер может быть переустановлен.
Порядок следования полей в тексте структуры определяет “естественный” порядок выбора полей для структуры ACCEPT (который может изменяться с помощью оператора SELECT). Порядок следования в тексте структуры не зависит от расположения поля на экране. Поэтому нет необходимости в каком-либо соответствии
положения управляющего поля на экране и назначаемым компилятором номером поля.В структурах APPLICATION каждому пункту меню на линейке меню и каждому управляющему полю на панели инструментов компилятором присваивается номер. По умолчанию эта нумерация начинается с минус единицы (-1) и уменьшается на 1 для каждого управляющего поля в порядке следования этих управляющих полей в тексте структуры
APPLICATION.Соответствие управляющих номеров
Существует ряд операторов, в которых эти номера полей используются в качестве параметров. Было бы очень утомительным жестко кодировать номера полей при использовании их в таких операторах. Поэтому Clarion имеет механизм разрешения этой проблемы - метки соответствия полей.
Метки соответствия полей всегда начинаются со знака вопроса (?), за которым следует имя USE-переменной управляющего поля. Знак вопроса в начале имени обозначает для компилятора метку соответствия поля. Метки соответствия очень похожи на обычные директивы компилятора EQUATE. Во время компиляции компилятор подставляет вместо метки соответствия номер поля. Метки соответствия делают ненужным знать впоследствии номера полей.
Два и более управляющих поля, имеющих одну и ту же USE-переменную, в одной структуре WINDOW или APPLICATION порождают одинаковые метки соответствия для всех (каждое из которых имеет отличающийся номер поля). Поэтому, когда компилятор встречает такую ситуацию все метки соответствия для этой USE-переменной отменяются. Это делает невозможным сослаться на любое из этих полей в исполняемых операторах, не вызывая неоднозначности относительно того, к которому полю в действительности намеревались обратиться. Вы можете уточнить проблему точным определением меток соответствия полей для использования каждым элементом управления в параметрах USE-атрибута.
Поля соответствия для массивов и составных структур
Метки соответствия для USE-переменных, которые являются элементами массива всегда начинаются со знака вопроса, за которым следует имя USE-переменной, в конце которого знак подчеркивания и номер элемента массива. Например, метка соответствия для USE(ArrayField[1]) будет ?ArrayField_1. Многомерные массивы рассматриваются подобным же образом (?ArrayField_1_1, ?ArrayField_1_2, ...). Вы можете переопределить умолчания точным указанием меток соответствия
полей для использования в некоторых параметрах в атрибутах USE управляющего поля.Метки соответствия для USE-переменных, которые являются элементами составной структуры данных всегда начинаются с вопросительного знака, за которым идет имя USE-переменной с двоеточиями (:) вместо точек (.). Например, метка соответствия для USE(Phones.Rec.Name) будет ?Phones:Rec:Name. Сделано так, потому что метки могут содержать двоеточия, но не точки, а поля соответствия - метки.
Применение меток полей соответствия
Для некоторых полей в качестве USE-переменной может использоваться только метка соответствия поля (уникальная метка, начинающаяся со знака вопроса). Это обеспечивает способ обращения к этим полям в исполняемых операторах.
В исполняемом коде много операторов, которые используют метки полей соответствия, имеющих отношение к действию (например, DISPLAY). В таких операторах, начинающихся знаком “?”, всегда обозначается действие текущего элемента управления, который имеет фокус ввода.
Пример
:Window WINDOW('Dialog Window'),SYSTEM,MAX,STATUS
TEXT,HVSCROLL,USE(Pre:Field) !FEQ = ?Pre:Field
ENTRY(@N3),HVSCROLL,USE(Pre:Array[1]) !FEQ = ?Pre:Array_1
ENTRY(@N3),HVSCROLL,USE(File.MyField) !FEQ = ?File:MyField
IMAGE(ICON:Exclamation),USE(?Image) !
USE атрибут - метка соответствия полейBUTTON('&OK'),USE(?Ok) !
атрибут USE - метка соответствия полейEND
CODE
OPEN(Window)
?Ok{PROP:DEFAULT} = TRUE !
использование полей соответствия в присвоении свойств?Image{PROP:Text} = 'MyImage.GIF'
ACCEPT
DISPLAY(?) !
повторное отображение управляющих полей с фокусом вводаEND
Clarion
имеет “графические примитивы”, которые позволяют “рисовать” в окнах и печатаемых документах. Это процедуры: ARC, BLANK, BOX, CHORD, ELLIPSE, IMAGE, LINE, PIE, POLYGON, ROUNDBOX, SHOW и TYPE. Выводимые в окно графические данные всегда служат фоном для изображения управляющих полей. Графика позволяет нагляднее представить все управляющие поля окна, тем самым помогая пользователю при выборе требуемого поля.
Графические данные выводятся только в “текущий объект”. Если не было переустановки посредством SETTARGET, то “текущий объект” - это последнее открытое (и еще не закрытое) в текущем процессе окно, которое удерживает фокус ввода. Графические данные устойчивы в окне: они автоматически восстанавливаются библиотекой времени исполнения.
Графика в отчетах
Графику (рисунки) можно включать и в отчеты. Для этого нужно использовать оператор SETTARGET, чтобы в качестве “текущего объекта” была установлена структура REPORT. SETTARGET также может обозначить любую цепочку отчета для получения графики, хотя это и необязательно.
Согласованная графика
У каждого окна или документа есть свое текущее “перо” (pen), которое определяет толщину, цвет и тип рисуемой линии. Поэтому, для согласованного применения в нескольких окнах одного и того же пера (параметры которого отличны от параметров по умолчанию) нужно в каждом окне произвести установки параметров пера, используя операторы SETPENWIDTH, SETPENCOLOR и SETPENSTYLE.
Начало (x=0, y=0) системы координат для графики (графическая система координат) находится в верхнем левом углу окна. Координаты указываются в условных единицах (для REPORT условные единицы могут быть заменены атрибутами THOUS, MM или POINTS на соответствующие единицы). За условные единицы принимаются одна четверть усредненной ширины символа шрифта и одна восьмая его усредненной высоты, причем шрифт устанавливается FONT-атрибутом окна (или берется системный шрифт, если для окна не указан FONT атрибут).
Если графическая картинка не попадает в текущую видимую часть окна, то ее можно просмотреть, используя механизм прокрутки окна. Размеры виртуального экрана, по которому осуществляется прокрутка окна, автоматически увеличиваются так, чтобы охватить все графические картинки окна. Отображение графики за пределы видимой части окна приводит к автоматическому появлению (если для окна указан один из атрибутов HSCROLL, VSCROLL или HVSCROLL) линеек прокрутки.