к оглавлению

Окна Clarion

Структуры, описывающие окно

APPLICATION (объявить MDI окно)

метка 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 прерывает изменение.

EVENT: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) !Открыть окно APPLICATION

ACCEPT !Вывести окно APPLICATION и прочитать реакцию пользователя

CASE ACCEPTED() !Какое поле выбрано?

OF ?0penFile !Открыть... выбор меню

OROF ?OpenButton ! или кнопка на панели инструментов

START(0penFileProc) !Начать новый процесс

OF ?MainExit !Пункт меню выход

OROF ?MainExitButton !или кнопка на панели инструментов

BREAK !прервать цикл ACCEPT

OF ?HelpAbout !выбран пункт ABOUT

HelpAboutProc !Вызвать процедуру вывода информации о программе

END

END

CLOSE(MainWin) !Закрыть окно APPLICATION

Смотри также: ACCEPT, WINDOW, MDI, MENUBAR, TOOLBAR

 

WINDOW (объявить диалоговое окно)

метка 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 ОКНА И МЕНЮ 215

EVENT:PreAlertKey Пользователь нажал указанную атрибутом ALRT горячую клавишу.

EVENT:AlertKey Пользователь нажал указанную атрибутом ALRT горячую клавишу.

EVENT:CloseWindow Окно закрывается.

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 прерывает изменение размеров.

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-окно с системным меню, кнопками минимизации и максимального увеличения,

! линейкой состояния, линейками скроллинга, изменяемых размеров, содержащее линейки меню

! и инструментов, объединяющиеся в линейки меню и инструментов прикладной программы:

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, APPLICATION

 

MENUBAR (объявить структуру спускающегося меню)

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) !Объединяется с меню File

ITEM('Pick...'),USE(?PickFile) !Добавлено в выбор меню

END

MENU('Edit'),USE(?EditMenu) !Добавляется в меню Edit

ITEM('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 окна APPLICATION. Высота высвечиваемой панели равна высоте “самого высокого” инструмента, глобального ли, локального ли не имеет значения. Если некоторая часть какого-то инструмента выступает ниже линии панели, то высота панели соответственно увеличивается.

Пример:

!Порождающее окно прикладной программы с 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 в любой момент времени может быть открыта только одна структура APPLICATION.

Документальные и диалоговые окна очень похожи в том смысле, что оба определяются посредством структуры 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) линеек прокрутки.

к оглавлению

Знаете ли Вы, что технология программирования, Инжиниринг ПО, Software engineering - это дисциплина, изучающая технологические процессы программирования и порядок их прохождения. (см. онлайн-курс "Технология программирования")

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

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


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