![]() |
|
|
Реферат: Turbo VisionParam - дополнительная текстовая информация для элемента; 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, где необходимо предусмотреть обработку предназначен- ных для окна событий. Перед завершением работы следует снять с окна модальность с по- мощью метода EndModal. Если окно содержит выделенный элемент, а нужно сделать выделенным другой, то можно воспользоваться либо мышью, подведя курсор к этому элементу и нажав клавишу, либо с помощью клавиши клавиатуры Tab (или Shift+Tab), при этом нажатие Tab выделит следующий в Z-порядке элемент, а Shift+Tab - предыдущий. Элементы окон в Turbo Vision В качестве стандартных элементов окон Turbo Vision можно исполь- зовать поля скроллинга (тип Scroller), предназначенные для отображения не умещающейся на экране информации и ее просмотра, текстовые элементы буферированной информации (тип tTewtDevice), текстовые элементы для пассивных терминалов (тип tTerminal) наподобие текстовых файлов и ли- нейки скроллинга.В окне можно помещать также потомки перечисленных вы- ше стандартных элементов. Поле скроллинга (tScroller) Поле скроллинга предназначено для размещения в нем текстовой ин- формации, которую необходимо вывести в окно, и которая возможно не уменьшается целиком в поле окна. При инициализации поля скроллинга следует задать его размеры, ли- нейки горизонтального и вертикального скроллинга : constructor tScroller.Init(var Bounds: tRect; AHScrollBar, AVScrollBar: pScrollBar); где Bounds - размеры поля; AHScrollBar, AVScrollBar - указатели на вертикальную и горизон- тальную линейку скроллинга. После инициализации устанавливаются значения параметров.Кроме этого, при инициализации потомка tScroller могут быть заданы параметры поля скроллинга, в частности максимальный горизонтальный и вертикаль- ный размер текстовой информации (размер строк и число строк), размеща- емой в поле скроллинга. Следует также переопределить метод Draw объекта tScroller для того, чтобы наполнить поле скроллинга соответствующей информацией.Для этого необходимо в начале определить, какая часть информации должна быть отображена (исходя из текущего состояния линеек), затем сформиро- вать строки, которые необходимо вывести на экран и, наконец, поместить сформированные строки в поле скроллинга, с атрибутами цвета. Текстовый элемент буферированной информации Текстовый элемент буферированной информации (тип tTextDevice) яв- ляется потомком поля скроллинга и отличается от своего предка наличием двух абстрактных методов, которые читают из некоторого текстового бу- фера и записывают в текстовый буфер отображаемую информацию. Текстовый элемент для пассивного терминала Текстовый элемент для пассивного терминала (тип tTerminal) является наследником объекта tTextDevice и предназначен для отображе- ния в поле скроллинга информации от пассивного терминала, чаще всего из текстового файла этого терминала.Под пассивным терминалом здесь по- нимается терминал, хранящий информацию, но не имеющий собственных средств редактирования информации и управления экраном. Инициализируется текстовый элемент для пассивного терминала конс- труктором Init : constructor tTerminal.Init(var Bounds: tRect; AHScrollBar, AVScrollBar: pScrollBar; ABufSize: Word); где Bounds - размеры поля; AHScrollBar, AVScrollBar - указатели на вертикальную и горизон- тальную линейку скроллинга; ABufSize - размер буфера терминала в байтах. Во время инициализации создается элемент с указанными параметра- ми, а также буфер для передачи информации размером ABufSize. Линейка скроллинга (tScrollBar) Линейка скроллинга предназначена для фиксации места нахождения отображаемой на экране в данный момент порции информации во всем объ- еме отображаемой информации.Линейка представляет собой либо горизон- тальную полосу, либо вертикальную.Полоса оканчивается двумя стрелками, а в средней части расположен ползунок, указывающий относительное рас- положение отображаемой порции информации. Используя этот ползунок, можно быстро переместиться в любое место отображаемой информации.Для этого необходимо подвести к нему курсор мыши, нажать клавишу мыши и, не отпуская ее, отбуксировать ползунок в нужное место линейки скроллинга.Если курсор мыши поместить не на пол- зунок, а в другое место линейки и нажать клавишу мыши, будет отображе- на следующая страница информации, находящаяся в соответствующем нап- равлении.Если курсор мыши поместить на завершающую стрелку и нажать клавишу мыши, будет осуществлено перемещение на один шаг в соответс- твующую сторону. 5 параметров объекта tScrollBar : Min, Max - определяют миним. и максим. значение номера текущего элемента информации. ArStep - величина шага перемещения по информации в случае нажатия клавиш Left, Right, Up, Down или при нажатии клавиши мыши, если ее курсор находится на завершающей стрелке. PgStep - размер страницы, на которую происходит перемещение. Value - текущий элемент информации.Инициализация линейки скрол- линга осуществляется конструктором Init : constructor tScrollBar.Init(var Bounds: tRect; где Bounds - область, выделенная под линейку скроллинга в коорди- натах его владельца. Линейка скроллинга не может активизироваться, так как у нее не установлен флаг ofSelectable параметра Options.Поэтому она не может обычным образом реагировать на нажатие клавиш клавиатуры.Чтобы этого не происходило, следует нарушить стандартный порядок обработки собы- тий, установив флаг ofPostProcess параметра Options. Диалоговое окно Диалоговое окно (тип tDialog) представляет специальный тип окна (является потомком tWindow) и предназначено в первую очередь для ввода значений параметров в программу. Так же как и обычное окно, диалоговое окно может использовать один из трех видов палитры : dpBlueDialog = 0 - синяя палитра диал. окна; dpCyanDialog = 1 - голубая палитра диал. окна; dpGrayDialog = 2 - серая палитра диал. окна. В отличие от обычного окна диалоговое окно обычно используется в модальном режиме.Инициализируется диалоговое окно конс- труктором Init : constructor tDialog.Init(var Bounds: tRect; ATitle: tTitleStr); где Bounds - размеры диалогового окна; ATitle - имя диалогового окна размером до 80 символов. В отличие от обычного окна у диалогового окна стандартно нет воз- можности изменять размеры, оно использует серую палитру и не имеет но- мера. К другим особенностям диалогового окна можно отнести обработку им клавиш Esc и Enter.Если диалоговое окно находится в модальном режиме, нажатие Esc закрывает окно без сохранения введенной информации.Нажатие клавиши Enter эквивалентно нажатию кнопки, выбираемой по умолчанию (закрывает окно с сохранением внесенных изменений). Для удобной работы с диалоговым окном в Turbo Vision имеется большое количество стандартных объектов, которые можно использовать в качестве элементов этого окна. Работу с диалоговым окном в модальном режиме можно организовать следующим образом.Сначала создать и инициализировать диалоговое окно, при этом поместив в него все его элементы.Затем подготовить исходные данные для передачи диалоговому окну. Далее диалоговое окно размещается в рабочей области с помощью ме- тода ExecuteDialog и осуществляется работа с ним.При завершении работы анализируется, какое происходит завершение - с сохранением внесенных изменений или без.Изменения, которые требуется сохранить, возвращаются в том же параметре, в котором передавались исходные данные. Если окно используется в немодальном режиме, последовательность работы с ним аналогична последовательности работы с обычным окном. Элементы диалоговых окон Возможно использование стандартных элементов или их потомков : - строки ввода; - метки; - протоколы; - селективные списки; - триггерные списки; - кнопки; - статические и параметрические тексты; - списки строк; - линейки скроллинга. Строка ввода Строка ввода (тип tInputLine) предназначена для ввода в программу символьной информации.Фактически строка ввода представляет собой прос- тейший редактор строки символов и обладает большим набором возможнос- тей.Основным элементом строки является буфер (строка, в которую поме- щаются все вводимые символы).Инициализируется строка ввода методом Init : constructor tInputLine.Init(var Bounds: tRect; AMaxLen: Integer); где Bounds - размер поля строки ввода; AMaxLen - размер буфера. Высота поля строки ввода должна равняться единице.Ширина поля мо- жет быть любой, но не менее 3.Размер буфера может иметь любое значение до 255.После создания строки ввода непосредственно изменять размеры буфера нельзя. Так как строка ввода работает только с символьной информацией, то перед вводом в нее какого-либо числа оно должно быть преобразовано в символьную форму, а при получении информации из строки ввода - обратно преобразовано в двоичную. Метка (tLabel) Метка всегда связана с каким-либо другим элементом окна и предс- тавляет собой текст, поясняющий смысл объекта.Кроме этого, с помощью метки можно довольно просто активизировать связанный с ней элемент.При нажатии курсором мыши на поле метки будет активизирован связанный с ней элемент. Конструктор метки имеет вид : constructor tLabel.Init(var Bounds: tRect; const AText: string; ALink: pView); где Bounds - размер поля метки; AText - текст метки; ALink - указатель на объект, с которым связана метка. Метка располагается либо над объектом, либо слева от него.Высота поля метки равна единице.Если текст метки состоит из цифр и латинских букв, то можно выделить одну букву и поместить ее между символами ~~.Такая буква на экране будет выделена особым цветом, а нажав клавишу с этим символом, можно активизировать данный элемент. Протокол Протокол (тип tHistory) всегда связан со строкой ввода и предназ- начен для сохранения в своем буфере вводимой в строку ввода информа- ции.Для вызова ранее набираемой информации следует, находясь в строке ввода, либо подвести курсор к полю пиктограммы протокола и нажать кла- вишу мыши, либо нажать клавишу Down.В результате откроется окно прото- кола, содержащее вводимые ранее строки в данную строку ввода.Следует выбрать интересующую строку (клавиша мыши или клавиши Up и Down).Далее дважды нажать клавишу мыши или нажать Enter. Протокол инициализируется при помощи метода Init : constructor tHistory.Init(var Bounds: tRect; ALink: pInputLine; AHistoryID: Word); где Bounds - поле для размещения пиктограммы протокола; ALink - указатель на строку ввода, с которым связан протокол; AHistoryID - номер протокола - число, определяющее данный тип протокола. Обычно протокол размещается за строкой ввода, к которой он отно- сится.Ширина поля должна равняться двум, высота - единице. Селективный (тип tRadioButtons) и триггерный ( тип tCheckBoxes) списки Селективный и триггерный списки очень похожи, так как у них есть общий предок (tCluster), заключающий в себе общие свойства. Селективный список позволяет выбрать только один элемент из этого списка.Количество элементов ограничено числом 65536. Триггерный список позволяет выбрать из списка любое число элемен- тов (или ни одного), однако при стандартном использовании число эле- ментов этого списка ограничено 16-ю. Оба списка инициализируются одним методом Init объекта tCluster : constructor tСluster.Init(var Bounds: tRect; AStrings: pSItem); где Bounds - поле, выделяемое под образ списка; AStrings - указатель на список информационных строк. Чтобы выбрать элемент списка, можно воспользоваться мышью, подве- дя курсор к соответствующей строке и нажав клавишу, либо клавиатурой, используя клавиши направления.В триггерном списке при использовании клавиш направления следует завершить выбор элемента списка нажатием пробела. В строке символов каждого элемента списка можно выделить латинс- кую букву или цифру, поместив ее между ~~.Она будет выделена на экране особым цветом, и можно выбрать соответствующий элемент списка нажатием клавиши клавиатуры с этим символом. Кнопка (тип tButton) Кнопка позволяет выбрать команду, которая с ней связана.При выбо- ре команды работа с диалоговым окном часто прекращается. Кнопка может иметь флаги, находящиеся в параметре Flags при ини- циализации : 0-й бит (bfDefault) - кнопка, выбираемая по умолчанию. 1-й бит (bfLeftJust) - текст кнопки выравнивается по ее левому краю ( при отсутствии флага текст центрируется). 2-й бит (bfBroadcast) - кнопка формирует сообщение вместо команды. 3-й бит (bfGrabFocus) - фокусирование кнопки при ее активизации |
|
|||||||||||||||||||||||||||||
![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |