скачать рефераты
  RSS    

Меню

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

скачать рефераты

скачать рефератыРеферат: Turbo Vision

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 группа  включает все события от мыши.Эти события воздействуют в

зависимости от координат курсора мыши.Модальный  объект,  воспринявший

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

подэлемент, в который попадает курсор мыши.Этот  подэлемент,  если  он

существует и является группой,  в свою очередь, также передает это со-

бытие своим подэлементам в Z-порядке и т.д.,  пока этот поиск не оста-

новится из-за отсутствия соответствующего подходящего подэлемента.Если

соответствующий объект найден,  то он будет  обрабатывать  событие,  в

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

     2 группа предназначена для сфокусированного  объекта  и  включает

события от  клавиш  клавиатуры и команды.Эти события передаются по це-

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

ли сфокусированный  объект "не знает",  как обработать соответствующее

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

дальному объекту.

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

пользователем).Эти события  передаются  всем  подэлементам  модального

объекта в Z-порядке.Те, в свою очередь, передают их своим подэлементам

в Z-порядке  и т.д.  до тех пор,  пока это событие не будет обработано

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

     При обработке  события  сначала выполняются соответствующие дейс-

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

"очищается" стандартным методом ClearEvent :

     procedure tView.ClearEvent(var Event: tEvent);

где Event - текущее "очищаемое" событие.Если событие не "очистить", то

оно будет передаваться и дальше в соответствии с механизмом его  обра-

ботки и может быть обработано еще каким-либо объектом.

                               Команды

     События от объектов (команды или сообщения) имеют в качестве  од-

ного из  параметров параметр Command типа Word,  задающий код команды,

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

     Все используемые в Turbo Vision команды делятся на 4 группы :

     - команды, зарезервированные за системой и которые можно маскиро-

вать методом DisableCommands объекта  tView  и  демаскировать  методом

EnablеCommands объекта tView, - коды от 0 до 99;

     - команды, которые может вводить программист и которые можно мас-

кировать и демаскировать аналогично первой группе,  - кода от  100  до

225;

     - команды,  зарезервированные за системой, но которые нельзя мас-

кировать и демаскировать,  как команды первой группы, - коды от 256 до

999;

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

маскировать и демаскировать, - коды от 1000 до 65535.

     Программист может использовать зарезервированные за Turbo  Vision

команды, не переопределяя их.Более того,  команды этой категории имеют

стандартные названия,  и средства пакета стандартным образом реагируют

на них.Так,  например, команда cmClose вызывает закрытие активного ок-

на, а cmMenu - активизирует меню и т.д.Все стандартные команды начина-

ются с префикса cm.

               ПОРЯДОК РАБОТЫ С ОТОБРАЖАЕМЫМИ ОБЪЕКТАМИ

     Работа с отображаемыми объектами осуществляется в несколько  эта-

пов, выполняемых  в  определенной  последовательности.На  этих  этапах

отображаемый объект описывается, создается, помещается в соответствую-

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

получаются введенные параметры, наконец, объект удаляется.

                    Описание отображаемого объекта

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

описать -  ввести необходимые параметры и методы на основе правил объ-

ектного программирования.Методы могут быть 4-х видов  :  конструкторы,

деструкторы, переопределенные методы предка и специфические методы для

данного объекта.

     Конструктор позволяет инициализировать отображаемый объект :  за-

дать исходные параметры,  создать его подэлементы и т.д.Кроме того, он

создает таблицу  виртуальных  методов,  без которой нельзя будет обра-

титься к этим методам.

     Деструктор выполняет действия, обратные действиям конструктора, и

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

методы.Сам деструктор также является виртуальным.

     Переопределенный метод предка  позволяет,  используя  возможности

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

тельные свойства,  специфические для данного  объекта.Переопределенный

метод должен быть виртуальным.

     Специфический для данного объекта метод - это метод,  который  не

имеет аналогов у предка данного объекта.

                    Создание отображаемого объекта

     Если отображаемый  объект не размещен постоянно в сегменте данных

(не задана соответствующая переменная конкретного типа-объекта), необ-

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

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

работы с ними;  немодальные объекты могут и одного, и другого вида, но

чаще все-таки также не размещаются постоянно в сегменте  данных.Созда-

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

труктор Init.

               Помещение отображаемого объекта в группу

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

ответствующую группу : если он является элементом окна, то в соответс-

твующее окно,  если же он сам является окном,  то  в  рабочую  область

DeskTop.

     У каждого объекта-группы имеются методы Insert и InsertBefore,  с

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

группу.

     Для размещения  немодального окна в рабочей области вместо метода

Insert лучше воспользоваться методом InsertWindow :

     function tProgram.InsertWindow(P: pWindow): pWindow;

где P - указатель на размещаемое окно; результат - указатель на разме-

щенное окно, и nil - если не размещено.

     Метод является функцией, которая перед размещением окна проверяет

допустимость такой  операции  (имеется ли необходимая область памяти и

правильно ли сконструированы окно и его компоненты).

               Задание параметров воображаемому объекту

     В Turbo Vision принят следующий стандартный способ передачи пара-

метров.Для объекта-группы или его потомка формируется  переменная  ти-

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

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

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

создаются по-своему.Для стандартных элементов  параметры  должны  быть

следующими :

     - строка ввода - строка того же размера;

     - триггерный список - число типа Word, в котором каждый бит опре-

       деляет состояние соответствующего элемента списка;

     - селективный список - число типа Word,  определяющее  порядковый

       номер выделенного элемента списка;

Страницы: 1, 2, 3, 4, 5, 6, 7


Новости

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

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

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.