RSS    

   Реферат: Turbo Vision

                                   ┌─────┴────┐  ┌─────┴──────┐

                                   │ Кнопка   │  │Строка ввода│

                                   └──────────┘  └────────────┘

        Рис.2 Пример структуры отображаемых объектов программы

     Здесь основным отображаемым объектом является программа - потомок

tApplication.Он является  группой,  в  которую  входят  меню  (потомок

tMenuBar), рабочая  область (тип tDeskTop) и строка состояния (потомок

tStatusLine).Рабочая область,  в свою очередь, является группой, в ко-

торую входят окно и диалоговое окно.Окно и диалоговое окно также явля-

ются группами, включающими различные подэлементы (рамки, строки ввода,

кнопки).

     Каждый отображаемый объект может быть в одном из двух состояний -

пассивном и  выделенном.На рис.  выделенные объекты обозначены двойной

верхней чертой.В каждой группе может быть только один выделенный  объ-

ект (или  ни  одного,  если  сама группа не является выделенным объек-

том).Указатель на выделенный элемент находится  в  переменной  Current

объекта-группы.Если какой-то объект группы становится выделенным, пре-

дыдущий выделенный объект этой группы становится пассивным.

     Сделать выделенным предыдущий или последующий объект группы можно

с помощью метода SelectNext :

     procedure tGroup.SelectNext(Forwards: Boolean);

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

если Forwards = True, выделяется следующий в Z-порядке объект группы.

     Этот метод не проверяет правильность введенных данных  в  текущем

выделенном объекте  и  всегда  выделяет другой элемент.Если необходимо

проверять правильность введенных данных,  следует вместо этого  метода

использовать метод FocusNext :

     function tGroup.FocusNext(Forwards: Boolean): Boolean;

где Forwards - тот же параметр;  результат - True,  если произошло пе-

реключение на другой объект, и False - в противном случае.

     Выделенный объект  - это тот объект,  с которым в настоящее время

происходит работа.Так,  в рассматриваемом примере выделенной  является

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

взаимодействовать.Меню и строка состояния в этом случае являются  пас-

сивными.Если выделить меню,  то рабочая область становится пассивной,и

уже не будет возможности работать с окнами рабочей области до тех пор,

пока рабочая область опять не станет выделенной.

     Выделенные объекты образуют цепочку выделенных объектов (в  нашем

примере :  программа - рабочая область - диалоговое окно - строка вво-

да).Последний объект такой цепочки называется  сфокусированным  объек-

том.В нашем примере это строка ввода - именно в эту строку ввода будут

помещаться набираемые на клавиатуре символы.На экране  сфокусированный

объект обычно выделяется особым цветом (или он весь изменяет цвет, или

его отдельные детали).В некоторых случаях у  него  меняются  отдельные

детали, так у окна изменяется вид рамки вокруг этого окна.

     Если выделенным объектом является окно или его потомок,  то такой

объект и его подэлементы называются активными.

     Отображаемые объекты могут находиться в одном из двух  режимов  :

обычном и  модальном.Тип режима задается способом размещения объекта в

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

программе, обрабатываются  только  этим объектом и его подэлементами.В

рассматриваемом примере если диалоговое окно находится в модальном ре-

жиме, то  все  события будут поступать ему и его подэлементам - рамке,

строке ввода и кнопке.Наличие модального объекта приводит к тому,  что

нельзя выйти  за  пределы  этого объекта и его подэлементов без снятия

режима модальности (как правило, для этого требуется удалить модальный

объект из группы, в которой он находится).Строка состояния позволяет в

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

     Сама программа  как отображаемый объект является модальным объек-

том.

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

     При использовании  объектно-ориентированного программирования все

объекты являются в некотором смысле обособленными друг от друга и воз-

никают определенные  трудности в передаче информации от объекта к объ-

екту.Тем не менее невозможно представить себе программу,  где не  осу-

ществлялся обмен  информацией  между  ее  отдельными частями.Для того,

чтобы осуществить такую передачу информации  между  объектами,  должен

использоваться тот  или  иной механизм.В Turbo Vision таким механизмом

является механизм обработки событий.При таком способе любая передавае-

мая информация оформляется в виде так называемого события, представля-

ющего с точки зрения языка Паскаль запись,  отдельные слова поля кото-

рой характеризуют  те  или  иные  свойства передаваемой информации.Тип

этой записи - tEvent :

     type

        tEvent = record

          What: Word;

          case Word of

             evNothing: ();

             EvMouse: (

               Buttons: Byte;

               Double: Boolean;

               Where: tPoint);

        evKeyDown: (

           case Integer of

              0: (KeyCode: Word);

              1: (CharCode: Char;

                   ScanCode: Byte));

          end;

       evMessage: (

          Command: Word;

          case Word of

            0: (InfoPrt: Pointer);

            1: (InfoLong: Longint);

            2: (InfoWord: Word);

            3: (InfoInt: Integer);

            4: (InfoByte: Byte);

            5: (InfoChar: Char);

          end;

       end;

     end;

     Запись tEvent  состоит из двух частей.Первая часть задает тип со-

бытия (What),  определяющий в первую очередь  источник  данного  собы-

тия.Под этот  параметр выделяется 16-ти разрядное слово.Отдельные биты

этого слова имеют следующие значения (в скобках - имя константы, имею-

щей единицу в соответствующем разряде слова) :

     0-й бит (evMouseDown) - нажата клавиша мыши.

     1-й бит (evMouseUp) - отпущена клавиша мыши.

     2-й бит (evMouseMove) - мышь перемещена по поверхности.

     3-й бит (evMouseAuto) - автоимпульсы от мыши при длительном нажа-

                             тии клавиши.

     4-й бит (evKeyDown) - нажата клавиша клавиатуры.

     8-й бит (evCommand) - событие-команда.

     9-й бит (evBroadcast) - событие-сообщение.

     События-команды и  события-сообщения  формируются  теми или иными

объектами программы для передачи информации  другим  объектам.Основное

отличие их друг от друга заключается в механизме их обработки.

     Помимо указанных  констант в Turbo Vision используются константы,

соответствующие группам бит и  определяющих  источник  создания  собы-

тия :

     evNothing   = $0000 - обработанное событие;

     evMouse     = $000F - событие от мыши;

     evKeyboard  = $0010 - событие от клавиатуры;

     evMessage   = $FF00 - событие от объекта (команда или сообщение).

     Вторая часть записи tEvent задает информацию,  передаваемую с со-

бытием.

     Параметры события от мыши.

     Buttons (1 байт).Если единица записана в нулевом бите, то событие

поступило от  левой  клавиши.Если  единица в первом бите - была нажата

правая клавиша.

     Параметр Double  типа  Boolean (1  байт) принимает значение True,

если от мыши поступила информация о двойном нажатии,  и False - в про-

тивном случае.

     Параметр Where типа tPoint (два 16-ти  разр.слова)  дает  текущие

глобальные координаты курсора мыши.

     Для событий  от  клавиш  клавиатуры задается информация о нажатой

клавише (либо как 16-ти разрядный код клавиши (KeyCode),  либо как со-

вокупность 8-ми  разрядного  ASCII-кода символа (CharCode) и 8-ми раз-

рядного скэн-кода (ScanCode) - фактически порядкового номера клавиши.

     Параметры событий от объектов.

     Параметр Command типа Word, задающий код команды, которую необхо-

димо выполнить при появлении данного события.

     Второй параметр определяет передаваемую с событием информацию.На-

иболее распространенный вариант -  передача  указателя  (InfoPtr  типа

Pointer) на  область  нахождения  информации.Для  небольших  объемов :

длинное целое (InfoLong типа Longint), беззнаковое целое (InfoWord ти-

па Word),  знаковое целое (InfoInt типа Integer),  байт (InfoByte типа

Byte), символ (InfoChar типа Char) - предусмотрена их непосредственная

передача.

     Обработка события  всегда начинается с текущего модального объек-

та, после чего, если необходимо, оно передается подэлементам этого мо-

дального объекта.Если  единственный модальный объект - сама программа,

обработка начинается с него.

     В зависимости  от  последовательности обработки событий объектами

все события можно разбить на три группы.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.