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

Меню

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

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

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

     - триггерный список с несколькими состояниями - информация разме-

       ром в  4 байта,  определяющая состояние каждого элемента списка

       (под каждый элемент может отводиться 1,2,4 и 8 бит информации;

     - список коллекции строк - запись размером в 6 байт,  первое поле

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

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

       ного элемента списка;

     - параметрический текст - по 4 байта на каждый параметр.

     Для нестандартных элементов пользователь  сам  определяет  вид  и

размер параметра.

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

помощью  метода SetData :

     procedure <отображаемый объект>.SetData (var Rec); virtual;

где  Rec - передаваемая запись с данными.

                    Работа с модальными объектами

     Для работы с модальными отображаемыми объектами используются  ме-

тоды, выполняющие комплексные действия.

     Универсальным является метод ExecView объекта tGroup :

     function tGroup&ExecView(P: pView): Word;

где P - объект,  с которым происходит работа; результат - код команды,

вызвавшей прекращение работы с объектом P.

     Этот метод помещает воображаемый объект в группу,  делает его мо-

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

событие является командой или сообщением,  означающими конец работы  с

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

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

ность, что осуществляется с помощью процедуры EndModal объекта tView :

     procedure tGruop.EndModal(Command: Word); virtual;

где Command - код команды, при которой снимается модальность.

     В качестве результата функция ExecView  возвращает  код  команды,

вызвавшей прекращение  работы  с модальным отображаемым объектом.После

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

удаляется.

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

его следует поместить в рабочую область,  вместо метода ExecView целе-

сообразно использовать метод ExecuteDialog :

     function tProgram.ExecuteDialog(P: pDialog;Data: Pointer): Word;

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

    Data - указатель на запись с передаваемыми данными;

результат - код команды, вызвавшей прекращение работы и диалоговым ок-

ном P.

                            СОЗДАНИЕ МЕНЮ

     Turbo Vision позволяет создать меню программы,предназначенное для

выбора дальнейшего пути решения задачи.

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

целесообразно продолжить  создание  программы  именно с описания меню,

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

структуру программы.В  Turbo  Vision  можно  использовать либо обычное

разворачивающееся меню, либо так называемое локальное меню.

                   Создание разворачивающегося меню

     Разворачивающееся меню  (в  дальнейшем - просто меню) может иметь

довольно сложную структуру и любое число уровней вложенности,  но сос-

тавляется из однотипных элементов, правда имеющих три варианта : собс-

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

выполнить при выборе этого элемента),  подменю, при выборе которого на

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

тельная линия, которая имеет чисто декоративное назначение и позволяет

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

     Элемент меню   имеет   структуру   типа-запись  (стандартный  тип

tMenuItem) :

     tMenuItem = record

        Next: pMenuItem;

        Name: pString;

        Command: Word;

        Disabled: Boolean;

        KeyCode: Word;

        HelpCtx: Word;

     case Integer of

        0: (Param: pString);

        1: (SubMemu: pMenu);

     end;

   end;

где Next - указатель на следующий элемент этого же уровня вложенности,

если следующего элемента нет, указатель равен nil;

    Name -  указатель на строку,  содержащую выводимый на экран текст;

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

ную линию;

    Commаnd - код команды, которую следует выполнить при выборе данно-

го элемента меню;  эта величина равна нулю, если данный элемент - под-

меню;

    Disabled -  признак разрешения или запрета выбора данного элемента

меню;

    KeyCode -  код клавиши или их совокупности быстрого управления,  с

помощью которых можно выполнить команду данного элемента меню,  не вы-

зывая это элемент,  или 0,  если для данного элемента такой клавиши не

предусмотрено;

    HelpCtx - параметр контекстной помощи,  аналогичный параметру объ-

екта tView, но справочная система выдает информацию об элементе меню;

    Param - указатель на строку с дополнительной информацией,  которая

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

менту (обычно это название клавиши быстрого управления);

    SubMemu - указатель на структуру меню следующего уровня, если дан-

ный элемент представляет собой подменю.

ню.

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

мента меню ограничены 31 символом.В связи с этим в Turbo Vision имеет-

ся стандартный тип строк tMenuStr :

     tMenuStr = string[31];

который и используется для задания символьной информации элементам ме-

ню.

     Для каждого  элемента меню можно в его названии выделить одну ла-

тинскую букву или цифру для быстрого  выбора  элемента  путем  нажатия

этой клавиши  на клавиатуре (для основного меню - в сочетании с клави-

шей Alt).Такая буква выделяется в тексте символами ~~,например, ~N~ew.

     В данном примере соответствующий элемент можно активизировать на-

жатием клавиши N (или Alt+N, если это элемент основного меню).На экра-

не такая буква выделяется особым цветом.

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

используется подпрограмма NewItem :

     function NewItem(Name,  Param:  tMenuStr; KeyCode: Word; Command:

Word; AHelpCtx: Word; Next: pMenuItem): pMenuItem;

где Name  -  текстовая информация для данного элемента,  она не должна

быть пустой строкой;

    Param - дополнительная текстовая информация для элемента;

    KeyCode - код клавиши быстрого управления;

    Command - код выполняемой команды, не должен равняться 0;

    AHelpCtx - параметр контекстной помощи;

    Next - указатель на следующий элемент меню данного уровня;

    результат - указатель на созданный элемент меню.

     Для создания элемента меню,  представляющего собой  подменю,  ис-

пользуется подпрограмма NewSubMenu :

     function NewSubMenu(Name:  tMenuStr;  AHelpCtx:  Word;   SubMenu:

pMenu; Next: pMenuItem;

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

пустой строкой;

    AHelpCtx - параметр контекстной помощи;

    SubMenu - указатель на структуру подменю;

    Next - указатель на следующий элемент подменю данного уровня;

    результат - указатель на созданный элемент меню.

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

ся подпрограмма NewLine :

     function NewLine(Next: pMenuItem): pMenuItem;

где Next - указатель на следующий элемент меню данного уровня;

    результат - указатель на созданный элемент меню.

     Функционально разворачивающееся меню состоит из нескольких частей

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

появляющихся на экране по мере необходимости.Главное меню представляет

собой объект типа tMenuBar.Создается оно обычно с помощью  стандартной

подпрограммы New, а инициализируется конструктором  Init :

     сonstructor tMenuBar.Init(var Bounds: tRect; AMenu: pMenu);

где Bounds - область на экране для главного меню;

    AMenu - указатель на главное меню.

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

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

при их отображении на экране.Стандартный объект tProgram ( а, следова-

тельно, и объект tApplication) имеет метод InitMenuBar :

     procedure tProgram.InitMenuBar; virtual;

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

для конкретной программы.Этот метод помещает указатель на созданное ме-

ню в стандартную типизированную константу MenuBar пакета Turbo Vision.

                       Создание локального меню

     При работе  с  программой  часто приходится многократно повторять

одни и те же действия,  которые разнесены по различным частям меню  (а

некоторых в меню вообще не может быть).Количество их обычно небольшое,

а поиск по всему меню неудобен.Целесообразно такие действия собрать  в

одно дополнительное меню, доступ к которому осуществляется по тому или

иному событию, например, команде, нажатию клавиши клавиатуры или мыши.

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

пакета Turbo Vision - tMenuPopup.Для этого в метод HandleEvent  основ-

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

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

ню.Так как  локальное меню должно быть довольно простым,  оператор его

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

тем не менее состоять из обращений к тем же методам.

     Создавать локальное меню целесообразно на завершающих этапах соз-

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

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

     Несмотря на  свою сложность,  меню в силу своей специфики группой

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

бытий.Так, например,  если меню получит событие от мыши,  когда курсор

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

тупила команда  завершения работы с объектом без фиксации результата.В

случае же модального объекта группы (например, диалогового окна) такое

событие игнорируется.

                   СОЗДАНИЕ ОКОН И ДИАЛОГОВЫХ ОКОН

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

тупить к формированию отдельных частей программы, обрабатывающих соот-

ветствующие команды  меню и строки состояния.Часто эти команды требуют

использования различных окон для передачи информации.Окна могут потре-

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

ды.

     Основным средством  взаимодействия  пользователя  с  программой в

Turbo Vision являются  окна  (тип  tWindow)  и  диалоговые  окна  (тип

tDialog).У окон и диалоговых окон много общего,  т.к.  диалоговое окно

является непосредственным потомком окна,  однако есть и принципиальные

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

элементов, цветовой палитре.Можно  сказать,  что  основное  назначение

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

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

ностей и  более  логически завершены,  поэтому они чаще используются в

программах.

                    Окна (tWindow) в Turbo Vision

     Окном в TurboVision называется отображаемый объект-группа,  имею-

щий специальную  рамку и который может иметь средства прокрутки (скро-

ллинга) не умещающейся в окне информации.В него можно поместить инфор-

мацию.Как правило,  в  программе используется не окно типа tWindow,  а

его потомок с переопределенными методами.

     В дополнение  к параметрам объекта tGroup окно обладает рядом до-

полнительных параметров, отметим два : флаги окна Flags и используемая

палитра Pallete.Назначение флагов параметра Flags,  и константы, соот-

ветствующие единице в соответствующем разряде параметра Flags  следую-

щие :

     0-й бит (wfMove) - возможность перемещения окна по полю его  вла-

                        дельца

     1-й бит (wfGrow) - возможность изменения размеров окна.

     2-й бит (wfClose) - наличие пиктограммы закрытия окна.

     3-й бит (wfZoom) - наличие пиктограммы распахивания окна.

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

принимать одно из трех следующих значений :

     wpBlueWindow = 0 - синяя палитра окна;

     wpCyanWindow = 1 - голубая палитра окна;

     wpGrayWindow = 2 - серая палитра окна.

     Как правило,  синяя  палитра  - для окон,  серая - для диалоговых

окон, а голубая - для вспомогательных окон.

     Инициализируется окно параметром Init :

     constructor tWindow.Init(var Bounds: tRect;

                             ATitle: tTitleStr; ANumber: Integer);

где  Bounds - размеры окна;

     ATitle - имя окна размером до 80 символов;

     ANumber - номер окна.

     После инициализации устанавливаются значения параметров.

     Характерной особенностью окна и  его  потомков  является  наличие

рамки -  специального отображаемого объекта,  помещаемого в окно.Таким

образом, окно всегда имеет хотя бы один подэлемент.Рамка  окна  помимо

декоративного значения  несет  на себе еще дополнительную информацию о

окне.

     Вид рамки  окна  меняется в зависимости от его состояния.Активное

окно обрамлено двойной рамкой.

     В левой  части верхней линии рамки располагается пиктограмма зак-

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

левой клавиши окно закрывается.

     В средней части верхней линии рамки располагается имя окна, зада-

ваемое при его инициализации.

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

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

чено окно,Распахивание также осуществляется с помощью мыши.После  рас-

пахивания окна  пиктограмма  изменит  свой  вид  - "двустороняя стрел-

ка".Чтобы восстановить исходные размеры окна, следует повторно подвес-

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

следует поместить курсор мыши на верхнюю линию рамки окна и дважды на-

жать клавишу.

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

может быть  изображен  одинарной линией даже в случае активного окна.В

этом случае с помощью мыши можно изменять размеры окна.Для этого  кур-

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

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

мых размеров, отпустить.Минимальные размеры окна - 16 позиций по гори-

зонтали и 6 строк по вертикали.Эти ограничения можно  изменить  с  по-

мощью метода SizeLimits :

     procedure'tView.SizeLimits(var Min, Max: tPoint); virtual;

     Верхняя линия  позволяет в ряде случаев с помощью мыши перемещать

окно по полю его владельца.

     Наличие или отсутствие у окна этих возможностей зависит от  уста-

новленных флагов параметра Flags.

     При работе с окном его следует сначала  создать  и  инициализиро-

вать.При этом  создать  необходимые  компоненты (кроме рамки,  которая

создается автоматически) и поместить их в окно.

     Далее окно следует поместить в рабочую область.Как правило,  окно

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

да InsertWindow, а если окно модальное - при помощи метода ExecView.

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

бытий HandlEvent, где необходимо предусмотреть обработку предназначен-

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


Новости

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

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

Пока нет

Новости в Twitter и Facebook

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

Новости

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

© 2010.