Введение в разработку графического интерфейса. Используя блок выбора, пользователь может указать нужную ему подстроку в списке или ввести её в текстовое поле. Установки подтверждаются нажатием кнопки "Ok". Motif предоставляет также ряд процедур, с помощью

СТРУКТУРА ДОКУМЕНТА

4.1. Технология визуального программирования

4.1.2. Главное окно Visual Studio

4.1.3. Главное меню VS и панель инструментов

4.1.4. Окна панелей Visual Studio

4.1.5. Настройка параметров интегрированной среды разра ботки VS

4.1.6. Тестовые задания

4.1.7. Лабораторная работа по теме «Среда разработки VS .NET»

4.1. Технология визуального программирования
и основные понятия

По сравнению с предыдущими поколениями языков программирования, языкпрограммирования высокого уровня – Visual Basic .Net (VB)имеет ряд принципиальных отличий. Это мощная, профессиональная система программирования, позволяющая быстро и эффективно создавать приложения для MS Windows. Поскольку система является «визуальной », программист может создавать видимую часть приложения MS Windows, не написав почти ни строчки программного кода. Эта видимая часть является основой интерфейса пользователя « программный проект – пользователь », с помощью которого осуществляется взаимодействие пользователя с программным проектом. Разработка, как программного кода классов и методов для решения поставленной задачи, так и программного интерфейса приложения осуществляется на принципах объектно-ориентированного подхода , реализованного в Visual Studio .Net (VS). Приложения (проекты) выполняются под управлением MS Windowsс помощью Интегрированной Среды Разработки (IDE) .

Для приложений, созданных с помощью IDE, характерной особенностью является существование на экране в любой момент времени множества объектов: форм, окон, кнопок, меню, текстовых и диалоговых окон, линеек прокрутки и т.п. Пользователь имеет определенную (в зависимости от алгоритма решаемой задачи) свободу выбора в части использования этих объектов. Он может сделать щелчок кнопкой мыши, перетащить объект, ввести данные в окно и т.п. В большинстве случаев не предполагается заранее установленная последовательность действий. Как правило, разработчик программного обеспечения (ПО), создавая программный проект, не должен ограничивать действия пользователя приложения. Он должен разрабатывать ПО, которое адекватно реагирует на любое действие пользователя, даже неправильное (в хорошей программе непредусмотренных действий не должно быть). Поэтому для каждого объекта на экране существует ряд возможных событий. Одни из них производятся пользователем: щелчок или двойной щелчок по кнопке мыши, перетаскивание объекта, нажатие клавиши клавиатуры, ввод текста в окно и т.п. другие события происходят в результате совершения других событий: например, окно открывается или закрывается, элемент управления становится активным (доступным) или теряет активность. Причем каждое событие проявляется в определенных действиях (откликах, реакции, поведении) программного проекта. Эти действия можно разделить на две группы.



Первая является следствием свойств объекта. Эти свойства устанавливаются разработчиком ПО из некоторого стандартного перечня свойств, заданного системой программирования и/или самой MS Windows. Примером таких действий является свертывание окна после щелчка по кнопке Свернуть. Изменить поведение объекта в подобных случаях программист не может. Однако во многих случаях имеется определенная возможность вариации отклика объекта на событие (текст, шрифт, цвет, размер, место на экране и др.) путем задания определенных свойств.

Вторая группа действий (отклика) на события полностью определяется разработчиком ПО. Это обеспечивается возможностью задания процедуры VBдля каждого возможного события. Первоначально каждая такая процедура является пустой, без тела процедуры, и, следовательно, когда происходит событие, ничего не случается. Теоретически можно создать процедуру для любого события, но на практике программист заполняет программным кодом процедуры только для тех событий, которые представляют интерес.

Таким образом, VBпредоставляет пользователю объектно-ориентированную среду программирования, основанную на событиях. Упрощенно говоря, процесс разработки программного проекта в этой среде сводится к выбору набора объектов и их свойств, заданию событий и процедур их обработки, и создания ПО для решения задачи, которые в совокупности обеспечивают функционирование создаваемого приложения.

Основными терминами визуального программирования, как было сказано выше, являются объект , форма , свойство, класс, событие, процедура , метод др. , которые в любой среде визуальной разработки приложений имеют одинаковый смысл.

Объект (Object) – это некая отдельная сущность, отличающаяся от других сущностей особыми свойствами, поведением, взаимодействием с другими объектами приложения. При объектно-ориентированном подходе любое приложение представляет собой набор взаимосвязанных объектов, реализующих необходимые функциональные требования, предъявленные к приложению. Объект всегда конкретен и реально существует на форме (в качестве элементов управления) или в приложении (в виде экземпляров классов).

Основной единицей в объектно-ориентированном программировании является программный объект, который объединяет в себе как описывающие его данные (свойства), так и средства обработки этих данных (методы). То есть, программные объекты обладают свойствами, могут использовать методы и реагировать на события.

Основными объектами визуального программирования являются форма и ее элементы управления.

Форма (Form) – это объект, представляющий собой окно, на котором размещаются элементы управления, например, Кнопка(Button); Метка(Label); ТекстовоеПоле(TextBox); Флажок(CheckBox); Список(ListBox); РаскрывающийсяСписок(ComboBox); Переключатель(RadioButton )и др.

Среда визуального программирования позволяет увидеть объекты на экране на этапе проектирования приложения, дает возможность настроить объекты, изменяя их расположение, размеры и другие свойства. Форма является контейнером объектов , ив то же время сама также является объектом. При размещении объекта на форме основные параметры объекта сохраняются в исполняемом программном коде. При этом объектами также являются программные блоки или фрагменты программного кода (классы, процедуры, методы, модули), из которых «собирается» проектируемый проект (приложение).

Свойство объекта – это значение или характеристика, хранимая объектом. В то же время совокупность свойств объекта определяет его состояние. Например, Текст (Text) или Цвет (BackColor) формы, способ Выравнивания текста (Alignment) или Цвет символов (ForeColor) текстового поля – это свойства. В программе обращение к объекту происходит по имени объекта . Свойства объектов можно задавать в окне Свойства и менять свойства объектов в программном коде.

В программном коде существуют определенные правила (определенный формат) для установки свойства – имя объекта и название свойства согласно правилам точечной нотации разделяются точкой .

Класс – это совокупность объектов, обладающих общими свойствами и поведением. Например, Button1 (Кнопка1) на Form1 (Форма1) со всеми своими конкретными свойствами и действием является объектом класса Button. Класс характеризуется такими основополагающими понятиями объектно-ориентированного программирования, как:

· наследование – объект класса обладает всеми свойствами, методами и событиями класса;

· инкапсуляция – сокрытие сложного механизма действия объекта;

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

Коллекция объектов – это набор объектов, объединенных общим именем, причем не обязательно это объекты одного класса. Примером коллекций могут служить встроенные в VBколлекции, в числе которых:

· Forms (Формы) – множество загруженных форм приложения;

· Controls (Элементы управления) – множество всех элементов управления в форме.

Пространство имен – это иерархическая библиотека классов, организованная под уникальными именами такими, например, как System.Windows или System.Math. Для доступа к классам и основанным на них объектам, входящим в пространство имен, в начале программного кода может быть помещен оператор Imports. Каждый проект в VSтакже содержит корневое пространство имен. Пространство имен в документации по VSназывается также библиотеками классов .

Событие – это средство взаимодействия объектов друг с другом. Событие может создаваться пользователем или возникать в результате воздействия других программных объектов. Объекты могут генерировать события и выполнять действия вответ на заданные события. Примеры событий – формы, Click ( Щелчок) мышью по объекту, DblClick ( Двойной щелчок) мышью и другие. В качестве реакции на события вызывается событийная процедура, которая может изменять свойства объекта, вызывать его

В языке VB, как и во многих других языках программирования, предназначенных для написания приложений для MS Windows, используется
событийно-управляемая модель программирования. Фактически это означает, что ни одно приложение не может функционировать само по себе, не взаимодействуя с другими приложениями и с операционной системой. Для примера возьмем самый простой случай, когда команда задана нажатием клавиши на клавиатуре. Она не может непосредственно воздействовать ни на одно из приложений, и MS Windowsв данном случае выступает в роли посредника. Восприняв событие, связанное с нажатием клавиши, операционная система решает, куда передать обработку этого события. Затем сообщение о нажатии клавиши посылается приложению. Приложение обрабатывает его, анализируя ввод с клавиатуры, и отображает сообщение, например, в активном текстовом поле.

Приложения, созданные с помощью VB, работают потому же принципу. При этом VBвыполняет как бы внутреннюю работу. Например, когда в приложении происходит щелчок мышью по кнопке, возникает событие – VBперехватывает соответствующее сообщение MS Windowsи вызывает событие Click объекта Button.

Обратите внимание, что в программах, управляемых событиями, нет сплошного программного кода, который выполняется от начала до конца. Это значит, что после запуска программы у пользователя нет и четкого представления о конкретном пути выполнения алгоритма. То есть, можно в любое время щелкнуть по какой-либо кнопке в приложении или выполнить, например, ввод текста в поле, а можно при желании и прекратить обработку. Поэтому приложение вынуждено ждать, пока одно из этих событий не наступит, и только потом выполняет заданный программный код. Таким образом, для начала выполнения программного кода всегда необходимо событие – это одно из важнейших правил создания приложений в среде MS Windows.

Откликом на события является вызов событийной процедуры , которая была ранее создана разработчиком ПО. Смысл такой процедуры – выполнение запрограммированных действий: изменение свойств объекта, вызов методов, выполнение вычислений по заданному алгоритму с выводом результата в определенные места приложения и т.п., например, если пользователь нажимает кнопку, то в качестве отклика выполняется некоторая последовательность действий, которая определена в событийной процедуре в соответствии с заданным алгоритмом.

Кроме событийных процедур пользователь может создать общие процедуры (процедуры пользователя).

Процедура пользователя – это законченный программный код, который реализует отдельный алгоритм решаемой задачи. Однако вызов такой процедуры происходит по имени этой процедуры, а не как результат какого-либо события.

Метод – это процедура, которая реализует действия, возможные с объектом. В результате этих действий в объекте что-либо меняется. VBпредоставляет пользователю большое количество встроенных процедур, находящихся в библиотеке, и, готовых к использованию. Эти процедуры являются неотъемлемой частью библиотеки классов, то есть являются методами классов, Framework .NET.

Средства процедурного программирования (процедуры) – неотъемлемая часть любого языка программирования высокого уровня, которая является одной из основных частей парадигмы современного программирования. Но лишь при появлении языков, поддерживающих объектно-ориентированное программирование, были введены особые типы встроенных процедур, названные методами . Методы «работают» как процедуры, но принадлежат конкретным объектам, так же, как и свойства. В программном коде обратиться к методу можно так же, как и к свойству с использованием точечной нотации.

В среде VBможно создавать собственные процедуры, создаваемые разработчиком ПО.

Обратите внимание, что любой программный код проекта, написанный средствами VB состоит из множества процедур, то есть, весь программный код находится как бы внутри множества процедур-подпрограмм и процедур-функций, а сами процедуры внутри класса (модуля).

Процедуры-подпрограммы начинаются ключевым словом Sub End Sub , а процедуры-функции начинаются ключевым словом Function и заканчиваются ключевыми словами End Function, между которыми помещается программный код данной процедуры. Программный код каждой процедуры состоит из одного или нескольких операторов языка программирования VB.

Метод обработки события – это законченный программный код, который реализует отдельный алгоритм. Для каждого события можно запрограммировать отклик, т. е. реакцию объекта на произошедшее событие, в результате будет выполнена некоторая последовательность действий – метод обработки события.

Имя событийной процедуры состоит из трех частей (включая подчеркивание): ИмяОбъекта_ИмяСобытия.

Таким образом, каждый раз, когда вы создаете программный код, который должен выполняться в ответ на событие, вы создаете событийную процедуру, которая вызывается автоматически при возникновении соответствующего события (например, нажатие кнопки).

Оператор – это конструкция языка программирования, задающая одну или несколько операций , производимых над операндами . В качестве операндов могут выступать константы, переменные, выражения, функции и т.д. Любой оператор записывается в соответствии с синтаксическими правилами языка программирования. Например, в операторе присваивания знак «= » читается «присвоить» и означает, что в память компьютера записывается значение, равное значению выражения справа от знака «= ». Например, строка

Form4.1.Text = "Форма с картинкой" означает, что в памяти с именем Form4.1.Text записывается значение – текст "Форма с картинкой" , а строка Р=А+В+С используется в программе для вычисления значения выражения и присваивания его переменной Р.

Проект – это разрабатываемое приложение (программный код приложения) – набор файлов, в которых хранится информация обо всех программных компонентах, используемых в данном приложении. Поскольку VB, с одной стороны – это система объектно-ориентированного визуального программирования, так как позволяет программировать алгоритмы на этом языке, а с другой стороны, эта система является средой проектирования ПО, то результатом процессов программирования и проектирования является проект, который объединяет в себе программный код и графический интерфейс. Поэтому, чтобы записать на диск или загрузить с диска какой – либо программный проект, необходимо записывать или загрузить проект, в котором находятся все компоненты (файлы). Обычно приложение в VBсостоит из множества файлов, включая файл проекта, с расширением .vbproj. Файл проекта содержит информацию, относящуюся к одной программной задаче – одному приложению.

Проект является также единицей компиляции. Результатом компиляции проекта является сборка. Каждый проект содержит одно или несколько пространств имен. На начальном этапе создания проекта по заданному типу проекта автоматически строится каркас проекта , состоящий из классов, являющихся наследниками классов, входящих в состав библиотеки FCL (Framework Class Library) - библиотеки классов платформы.NET Framework. Так, если разработчик указывает, что он будет создавать проект типа «Приложение Windows Forms », то в состав каркаса проекта по умолчанию войдет объект Form1 – наследник библиотечного класса Form . Разработчик программного проекта дополнит созданную форму элементами управления – объектами соответствующих классов, тем самым расширив возможности формы, построенной по умолчанию.

Каждый проект содержит всю информацию, необходимую для построения сборки. В проект входят все файлы с классами, построенные автоматически в момент создания проекта, и файлы с классами, созданные разработчиком проекта. В проект входят также установки и ресурсы , требуемые для работы. Частью проекта также является файл, содержащий описание сборки (манифест).

В зависимости от выбранного типа проект может быть выполняемым или невыполняемым . К выполняемым проектам относятся, например, проекты типа Консольное приложение или Приложение Windows Forms . При построении каркаса выполняемого проекта в него включается класс, содержащий статическую процедуру с именем Main() . В результате компиляции такого проекта создается PE -файл – выполняемый переносимый файл с расширением .exe . Такой PE -файл может выполняться только на компьютерах, где установлена Framework .Net , поскольку это файл с управляемым кодом.

К невыполняемым проектам относятся, например, проекты типа
Библиотека классов (DLL) , которая имеет расширение.dll, и являетсядинамически связываемая библиотека , т.е. эти проекты, предназначены для включения (связывания) в другие проекты. В результате компиляции проекта типа
Библиотека классов в сборку войдет файл с расширением .dll . Такие проекты (сборки) непосредственно не могут быть выполнены на компьютере. Они присоединяются к выполняемым сборкам, откуда и вызываются методы классов, размещенных в невыполняемом проекте (DLL ).

Этапы реализации простейших проектов – можно разделить на несколько шагов:

· создание графического интерфейса проекта (интерфейса пользователя), который должен обеспечить взаимодействие проекта с пользователем при работе проекта;

· установка значений свойств объектов графического интерфейса;

· создание, редактирование и отладка программного кода проекта;

· сохранение проекта для дальнейшего использования;

· выполнение проекта.

Решение – это разрабатываемое приложение, файлы которого содержат информации об одном или нескольких проектах, как правило, связанных общей темой. Файл решения используется для управления несколькими взаимосвязанными проектами и имеет расширение .sln. Причем каждый проект, создаваемый в VS, помещается в одну оболочку, называемую Решением .

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

Итак, обратите внимание еще раз на следующее:

Класс – это центральное понятие объектно-ориентированного программирования. Разработчик проектов на VB использует стандартные классы из библиотеки FCL и создает собственные классы. Причем класс выполняет две различные роли:

· Класс – во-первых, это модуль – архитектурная единица построения проекта по модульному принципу. Справиться со сложностью большого проекта можно только путем деления его на модули, - сравнительно небольшие единицы, допускающие независимую разработку и последующее объединение в большую систему.

· Класс – во-вторых, это тип данных, то есть семантическая единица, описывающая свойства и поведение множества объектов, называемых экземплярами класса. Синтаксически класс представляет описание данных, называемых полями класса, описание методов класса и описание событий класса . Для класса, рассматриваемого как тип данных, поля определяют состояние объектов, методы – поведение объектов. События – это некоторые специальные состояния, в которых может находиться объект, и которые могут обрабатываться внешними по отношению к классу обработчиками события. Так, например, объект класса ЧЕЛОВЕК может иметь событие «День рождения » и каждый из обработчиков этого события может принести объекту свои поздравления по этому случаю.

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

Хороший стиль программирования требует, чтобы каждый класс сохранялся в отдельном файле, имя которого совпадало бы с именем класса. Это требование стиля, которое на практике может и не выдерживаться. В наших примерах будем стараться выдерживать этот стиль.

Определив класс, разработчик проекта получает возможность динамически создавать объекты класса. Для программистов, начинающих работать в объектном стиле, типичной ошибкой является путаница понятий объекта и класса. Нужно с самого начала уяснить разницу. Класс объектов, создаваемый разработчиком, представляет статическое описание множества объектов. Объект – это динамическое понятие, он создается в ходе выполнения программной системы, реально существует в памяти компьютера и обычно исчезает по завершении выполнения проекта. Разработчик проекта может создать программную систему, включающую два - три класса, но в ходе работы такой системы могут динамически появляться сотни объектов, взаимодействующих друг с другом сложным образом.

Главное окно VS

Отметим, что процесс создания простейшего приложения в среде VS подробно будет описан в следующей Теме 4.2 , а также в лабораторной работе по Теме 4.1. «Интегрированная среда разработки Visual Studio .NET». Сейчас познакомьтесь с интерфейсом среды VS.

Запустить MS Visual Studio.

На экране появится Начальная страница - MS VS(рис. 4.1.2-1).

В этом окне можно выделить несколько основных панелей: Стандартное меню , окно Стандартная панель инструментов, окно Начальная стр аница, окноОбозреватель решений, окно Панель элементов.

Рис. 4.1.2-1. Начальная страница - Microsoft Visual Studio

Необходимо отметить, что при работе с VB в интегрированной среде разработки VSможно пользоваться как кнопками стандартной панели инструментов, так и элементами главного меню, расположенными в верхней части экрана.

VSпредоставляет в распоряжение пользователя набор разнообразных панелей инструментов. Эти панели инструментов содержат кнопки, назначение которых зависит от функций конкретной панели инструментов.

Окно Начальная страница позволяет открывать использовавшиеся недавно проекты, осуществляет поиск примеров, содержит различные ссылки на сайты, которые могут помочь при работе с VS. Кроме тогов процессе работы с проектом на месте начальной страницы будут отображаться различные окна, например, окно Конструктора формы , окно Редактора программного кода и др.

В окне Обозреватель решений отображаются файлы текущего решения (проектов). Это окно используется для получения подробной информации об объектах. Оно позволяет искать и исследовать элементы, их свойства, методы, события, находящиеся в проектах и ссылках на них.

К средствам, призванным облегчить разработку приложений, относится также окно Панель элементов, отображающее элементы управления, используемые в проектах VB.

Для создания нового проекта используется диалоговое окно
Создать проект (рис. 4.1.2-2). Для его открытия необходимо выполнить одно из следующих действий:

· выполнить команду Создать проект из элементаГлавного меню – Файл;

· нажать кнопку Создать проект , расположенную на стандартной панели инструментов.

Рис. 4.1.2-2. Диалоговое окно Создать проект

В VBможно создавать приложения по различным шаблонам. В этом пособии будем использовать только шаблон Приложение Windows Forms.

Это приложение предназначено для создания традиционных Windows-приложений, пользовательский интерфейс для которых проектируется с помощью форм MS Windows. Причем для формы этого шаблона можно задавать определенные характеристики и располагать на ней различные элементы управления.

Рассмотрим на примереосновные шаги, необходимые для создания проекта Приложение Windows Forms .

Пример 4.1.2-1. Создать проект с именем Пример 4.1.2-1и графическим интерфейсом, состоящим из формы, на которой имеется одна кнопка и одно текстовое поле. При нажатии на кнопку должно появиться «Привет, МТУСИ!».

Форма проекта Пример-4.1.2-1 может иметь вид как на рис. 4.1.2-3.

Рис. 4.1.2-3.Графический интерфейс (Форма) проекта Пример 4.1.2-1

Для реализации проекта Пример 4.1.2-1 необходимы следующие шаги:

1) Запустить VS .

2) Создать новый проект:

Файл , а затем выполнить команду Создать проект;

· выбрать шаблон проекта Приложение Windows Forms.

В результате откроется окно Form1.vb[Конструктор] Конструктор форм (на что указывает соответствующая вкладка), позволяющий реализовать графический интерфейс приложения.

· выбрать элемент Главного меню Файл , а затем выполнить команду Сохранить все ;

в результате откроется диалоговое окно Cохранить проект ;

· ввести в поле Имя наименование проекта Пример-4.1.2-1 (по умолчанию среда VB присваивает имя WindowsApplication1), а затем ввести в поле Расположение имя каталога , где будет располагаться проект, или воспользоваться кнопкой Обзор для поиска необходимого каталога (рис. 4.1.2-4);

· щелкнуть по кнопке Cохранить ;

в результате среда разработки примет вид как на рис. 4.1.2-5.

Рис. 4.1.2-5. Среда разработки

Окна панелей Visual Studio

Окно панели Начальная страница (рис. 4.1.1-1) позволяет просмотреть последние использовавшиеся проекты, осуществить поиск примеров программ, как из справки, так и Интернета, а также просмотреть ссылки на сайты, содержащие новости о продукте VS, документацию, учебные пособия.

Рис. 4.1.4-1.Окно панели Конструктор форм и ее контекстное меню

Начальная страница автоматически открывается при запуске VS. Если же окно Начальная страница не появилось, его можно вызвать с помощью команды Начальная страница элемента главного меню Вид (View).

Окно панели Form1.vb [Конструктор] (Конструктор форм)
Основного окна
является Основным рабочим окном , в котором выполняется визуальное проектирование приложения (рис. 4.1.4-1). Отобразить на экране это окно можно щелкнув на вкладке Form1.vb [Конструктор] или двойным щелчком на названии формы в окне Обозреватель решений.

В окне Конструктора форм визуально создаются все формы приложения с использованием инструментария среды разработки. Для точного позиционирования объектов на форме в окне можно использовать сетку.

Размер формы в окне можно изменять, используя маркеры выделения формы и мышь. Для изменения размера формы необходимо установить указатель мыши на маркер и, когда он примет вид двунаправленной стрелки, перемещать до требуемого размера.

Для работы в окне Form1.vb [Конструктор] можно использовать контекстное меню (рис. 4.1.4-1).

Рис. 4.1-2. Окно панели Редактора кода и ее и контекстное меню

Окно панели Form1.vb (Редактор кода) – это мощный текстовый редактор с большим количеством возможностей, являющийся основным инструментом программиста для создания и отладки программного кода. Оно также может располагать в Основном рабочим окне (рис.4.1-2).

Окно панели Обозреватель решения и ее контекстное меню представлено на рис. 4.1.4-3.

Рис. 4.1.4-3. Окно панели Обозреватель решений и ее контекстное меню

Панель Элементов управления сгруппирована по разделам
(Рис. 4.1.4-4). Для создании форм пособия необходим в основном раздел Стандартных элементов управления (рис. 4.1.4-5).

Окно панели Свойства предназначено для отображения и настройки свойств объектов проекта, включая форму и размещенные в ней объекты. В этом окне, например, содержатся такие свойства выбранного объекта, как позиция в форме, высота, ширина, цвет и другие (рис. 4.1.4-6).

Для открытия диалогового окна Свойства следует выполнить одно из следующих действий:

· в элементе главного меню Вид выбрать команду Окно Свойств ;

· нажать кнопку Окно свойств, расположенную на Стандартной
панели инструментов;

· выбрать команду Свойства контекстного меню выделенного объекта;

· нажать клавишу клавиатуры .

Рис. 4.1.4-4. Окно панели элементов 4.1.4-5. Панель

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

Рис. 4.1.4-6. Окно панели Свойства

Поскольку форма и элементы управления каждый сам по себе являются объектами, то набор свойств в этом окне меняется в зависимости от выбранного объекта. С помощью кнопок В алфавитном порядке и
По категориям свойства объекта можно просмотреть в алфавитном порядке или по группам (категориям) соответственно.

В нижней части окна появляется подсказка, поясняющая назначение выбранного свойства объекта. Более подробное пояснение можно посмотреть в справочной системе. Также можно воспользоваться динамической справкой, выбрав нужный раздел в окне Динамическая справка.

Используя диалоговое окно Свойства, можно изменить установленные по умолчанию свойства объектов. Часть свойств объекта, например, размеры и расположение, можно задать перемещением объекта и изменением его размеров с помощью мыши в конструкторе форм. Свойства, установленные в окне свойств, можно изменять при выполнении приложения, написав соответствующие коды в процедурах, создаваемых с помощью редактора кода.

Как правило, форма содержит много объектов. Если выбрать сразу несколько объектов, то в окне свойств можно увидеть общие для этих объектов свойства.

4.1.5. Настройка параметров интегрированной
среды разработки

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

Следующие шаги показывают, как изменить параметры среды разработки на VBв соответствии с рекомендациями для выполнения практических работ:

1) В элементе главного меню Сервис выполнить команду Импорт и экспорт параметров . Для сохранения настроек среды с целью их использования на другом компьютере, загрузки настроек с другого компьютера или сброса настроек – опции, которую требуется выбрать сейчас – можно исполь­зовать появляющийся при этом мастер.

2) Выбрать Сбросить все настройки , а затем щелкнуть на кнопку Далее . VS спросит, необходимо ли перед настройкой сохранить текущие настройки в файле. Следует всегда сохранять резервную копию своих текущих настроек с тем, чтобы была возможность вернуться к ним, если новые настройки окажутся «неудобными».

3) Проверить, что выбрана опция Да , и обратить внимание на имя файла и папки, в которых VS собирается сохранить эти настройки.

4) Если необходимо вернуться к этим настройкам, для их восстановления используется этот же мастер и опция Импорт выбранных настроек среды.

5) Чтобы увидеть список по умолчанию параметров, используемых для VS, следует щелкнуть на кнопке Далее .

6) Щелкнуть на Параметры для разработки на VB , а за тем щелкнуть на кнопке Готово .

7) Мастер переключит параметры IDE, включая команды меню, панели инструментов и настройки некоторых диалоговых окон, окон Инструментов и Редактор кода .

8) Можно повторить этот процесс настройки в любой момент, когда потребуется сбросить текущие параметры (например, если вы сделали ошибку в настройках), или если потребуется настроить VS для использования другого инструмента программирования.

9) Чтобы закрыть мастер, щелкнуть на кнопке Закрыть .

Если параметры среды для работы с VBнастроены, то можно выполнять задания. Но если они были изменены, необходимо выполнить следующие действия, позволяющие проверить, что настройки, связанные с проектами и компилятором VBсоответствуют тем, которые используются при проведении практических работ. Для проверки параметров проекта и компилятора необходимы выполнить следующие действия:

1) Щелкнуть на команде Параметры элемента меню Сервис и открыть диалоговое окно Параметры.

2) Диалоговое окно Параметры – это окно, в котором находятся многие из настроечных параметров VS. Чтобы увидеть все параметры, которые можно изменить, надо щелкнуть на флажке Показать все параметры , расположенном в нижнем левом углу диалогового окна.

3) В диалоговом окне Параметры следует щелкнуть на категории Проекты и решения и затем на разделе Общие . Эта группа флажков и опций настраивает параметры проектов и решений VS. Чтобы программное обеспечение соответствовало параметрам, использованным в этом пособии необходимо настроить и

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ РФ

Государственное образовательное учреждение

высшего профессионального образования

Российский государственный гуманитарный университет

Институт информационных наук и технологий безопасности

Кафедра общей информатики

КОНТРОЛЬНАЯ РАБОТА

ПО ИНФОРМАЦИОНЫМ ТЕХНОЛОГИЯМ

ГРАФИЧЕСКИЕ ИНТЕРФЕЙСЫ И СРЕДСТВА ИХ РАЗРАБОТКИ

Лисиченок Константин Викторович

Экстерната 3 года обучения

(4-летнего срока обучения)

Группа б (информационная сфера)

Научный руководитель,

к.т.н., преподаватель: Машинцов Е.А.

Москва 2005

План

Введение

Система X Window

Общее устройство системы X Window

Программирование с использованием библиотеки X Toolkit Intrinsic (Xt)

Объекты Xt, их классификация

Источники информации

Введение

Когда впервые в 1959 г. на конференции UNESCO по обработки информации г. Стречи предложил режим разделения времени при решении задач на компьютерах - с этого момента принято отсчитывать начало интерактивных вычислений и, следовательно, исследование человеко- машинного интерфейса. По мере роста мощности компьютеров росли и затраты на диалоговую компоненту программного обеспечения. Вопрос эффективности использования машин обострился во время стремительного выхода на рынок рабочих станций, объединивших интерактивность с графикой. Термин эффективность с тех пор изменил свое значение - если раньше он отражал такие характеристики как процессорное время и объем занимаемой памяти, то теперь под ним понимают простоту разработки, легкость сопровождения и удобство работы с программой. Поэтому затраты на исследование и разработку пользовательского интерфейса являются оправданными.

Разработка любого прикладного программного обеспечения, как правило, подразумевает создание пользовательского интерфейса. Поскольку большинство современных пользовательских интерфейсов основываются на аналогичных идеях (активное использование "мышки", ориентированность на объекты, графика и т.д. - имитация процессов и явлений, возможность использования алгоритмов, знакомых каждому человеку из его обыденной жизни), то существует возможность и необходимость разработки вспомогательного программного обеспечения, предназначенного для создания такого рода "стандартных" интерфейсов, точнее их базисов.

С другой стороны, много- и разнообразие аппаратных и системных платформ, на которых должно будет работать это программное обеспечение, требует его переносимости на уровне исходного кода. Вышеизложенные требования логически приводят к идее переносимого унифицированного программного инструментария для создания пользовательских интерфейсов или, если рассматривать конечный прикладной программный продукт, системы (модуля, блока), которая ведает (заведует, заправляет, обслуживает, управляет) интерфейсом с пользователем.

Можно проклассифицировать такие инструментарии (User Interface tools) согласно схеме:

* Текстовые экранные системы (curse, ncurse, etc).

* Графические экранные системы.

* Многооконные системы (WMS):

* символьно-ориентированные (текстовые);

* графические;

* UI toolkits

* традиционные;

* объектно-ориентированные;

* UIDS - User Interface Development System - система разработки пользовательского интерфейса (инструментарий);

* UIMS - User Interface Management System - система (управления) пользовательского интерфейса (программный модуль - составная часть конечного продукта в совокупности с соответствующей UIDS);

* UIDE - User Interface Development Environment - среда разработки пользовательского интерфейса.

Эта схема не претендует на систематическую классификацию, скорее - это просто перечисление.

В настоящее время большие усилия прикладываются к разработке методов и созданию инструментальных средств в рамках систем, получивших название UIMS - User Interface Management System.

Система X Window

X Window или просто X - это система для создания графического пользовательского интерфейса, изначально - на компьютерах, работающих под управлением ОС UNIX. X была создана в MIT (Масачусетский Технологический Институт). В настоящее время уже выпущена версия 11.6 (X11R6) и активно идёт подготовка к выпуску версии 7.

Особенностью X Window является её архитектура - она построена по схеме клиент--сервер. Взаимодействие X-клиента и X-сервера происходит в рамках соответствующего протокола прикладного уровня - X-протокола. X Window безразличен используемый транспорт, которым может быть служить как локальный UNIX -socket, так и любой сетевой, например, TCP. Это означает, что X-клиент и X-сервер могут "проживать" и на разных компьютерах, т.е. программа может осуществлять ввод-вывод графической информации на экране другого компьютера, причём, различия в архитектуре X- клиента и X-сервера не играют никакой роли - это обеспечивается стандартом X- протокола. Система обеспечивает графический вывод на экран машины, воспринимает сигналы от устройств ввода, таких, как клавиатура и мышь, и передаёт их программам. Следует отметить, что устройство вывода может иметь более одного экрана. X обеспечивает вывод на любой из них. Всё это: экран (экраны), устройства ввода (клавиатура, мышь) называется в терминах X Window - дисплей.

Благодаря своей архитектуре X Window свободно используется в распределённых вычислительных системах, например, в сетях TCP/IP (internet).

X позволяет пользователю (за дисплеем) общаться со многими программами одновременно. Чтобы вывод из них не смешивался, система создаёт на экране дисплея "виртуальные подэкраны" - окна. Каждое приложение (как правило) рисует только в своём окне (или своих окнах). X предоставляет набор средств для создания окон, их перемещения по экрану, изменения их размеров, вывода в них и т.п.

Как правило, программы имеют набор конфигурационных параметров - ресурсов. Это может быть цвет окна, различные параметры текстового шрифта (лигатура, кегль, etc.) и многое другое. Система стандартизует способ задания ресурсов приложений, управления ими, и содержит ряд процедур для работы с ними. Эта совокупность функций называется "менеджер ресурсов" (Xrm - X resource manager). "Хранилище" параметров программы называется базой данных ресурсов.

X функционирует согласно идеологии управляемости событиями (event-driven architecture) - она организует общение между самими программами и между программами и внешней средой посредством событий. Событие есть единица информации, идентифицирующая происходящие в системе изменения или действия. По идентификатору события можно получить информацию о нём - вид события, его характеристики, где оно произошло и т.п..

Общее устройство X Window

Система X Window представляет собой совокупность программ и библиотек. "Сердцем" её является специальная программа - X-сервер. Это отдельный UNIX -процесс, имеющий место быть на компьютере, к которому присоединён дисплей. Именно сервер знает особенности конкретной аппаратуры, знает, что надо предпринять, чтобы вывести какой-либо графический объект, например, примитив, на экран. Он же умеет воспринимать и обрабатывать сигналы, приходящие от клавиатуры и мыши.

Сервер общается с программами-клиентами, посылая им или принимая от них пакеты данных. Если сервер и клиент находятся на разных машинах, то данные посылаются по сети, а если на одном, - то используется внутренний канал. Например, если сервер обнаруживает, что пользователь нажал кнопку мыши, то он подготавливает соответствующий пакет (событие) и посылает его тому клиенту, в чьём окне находился курсор мыши в момент нажатия кнопки. И наоборот, если программе надо вывести что-либо на экран дисплея, она создаёт необходимый пакет данных и посылает его серверу. Очевидно, описание этого взаимодействия, форматов пакетов и т.п. и составляет спецификацию вышеупомянутого X-протокола.

Однако, чтобы программировать для X, совсем необязательно знать детали реализации сервера и X -протокола. Система предоставляет стандартную библиотеку процедур, с помощью которых программы осуществляют доступ к услугам X "на высоком уровне". Так, для того, чтобы вывести на экран точку, достаточно вызвать соответствующую стандартную процедуру, передав ей требуемые параметры. Эта процедура выполнит всю работу по формированию пакетов данных и передаче их серверу.

X окно

Как уже упоминалось ранее, окно - это базовое понятие в X. Оно представляет, обычно, прямоугольную область на экране, предоставляемую системой программе-клиенту. Последняя использует окно для вывода графической информации.

Окно имеет внутренность и край. Основными атрибутами окна являются ширина и высота внутренности, а также ширина (толщина) края. Эти параметры называются геометрией окна.

С каждым окном связывается система координат, начало которой находится в левом верхнем углу окна (точнее - его внутренности). Ось x направлена вправо, а ось y - вниз. Единица измерения по обеим осям - пиксель.

X Window позволяет программе создавать несколько окон одновременно. Они связаны в иерархию, в которой одни являются "родителями", а другие - "потомками". Сам сервер на каждом экране создаёт одно основное окно, являющееся самым верхним "родителем" всех остальных окон. Это окно называется "корневым" (root).

Управление окнами

Окна могут располагаться на экране произвольным образом, перекрывая друг друга. X Window имеет набор средств, пользуясь которыми, программа-клиент может изменять размеры окон и их положение на экране. Особенностью системы является то, что она не имеет встроенной возможности управлять окнами с помощью мышки или клавиатуры. Чтобы это можно было осуществить, нужен специальный клиент - менеджер окон (window manager).

Однако, менеджер не может корректно управлять окнами, ничего о них не зная. Окна могут обладать различными свойствами, которые должен обеспечивать именно менеджер окон: например, во многих случаях удобно иметь заголовки окон, в других - желательно, чтобы окно нельзя было сделать меньше, или наоборот - больше, определённого размера. Окно может быть "схлопнуто" в пиктограмму ("иконку") - в этом случае менеджер должен знать, какую пиктограмму использовать и как её назвать. Клиенты могут сообщать менеджеру свои пожелания относительно окон двумя способами:

* при создании окна X могут быть переданы "рекомендации" (hints) о начальном положении окна, его геометрии, минимальных и максимальных размерах и т.д.;

* можно использовать встроенный в X способ общения между программами - механизм "свойств".

Графические возможности X Window

Система X Window предназначена для работы на растровых дисплеях. Число бит на пиксель называют глубиной или толщиной дисплея. Биты с одинаковыми номерами (одинаковые двоичные разряды) во всех пикселях образуют как бы плоскость, как бы параллельную экрану. Её называют цветовой плоскостью. X позволяет рисовать в любой цветовой плоскости (-ях), не затрагивая остальные.

Значение пикселя не задаёт цвет точки на экране непосредственно, но задаёт номер ячейки в специальном массиве, в которой и хранится значение цвета, т.е. значение пикселя задаёт номер цвета в текущей палитре.

X имеет большой набор процедур, позволяющих рисовать графические примитивы: точки, линии, дуги, текст; работать с областями произвольной формы.

"Свойства" и атомы

В X Window встроены средства для обеспечения информацией между программами- клиентами. Для этого используется механизм "свойств" (properties). "Свойство" - это информационная структура, связанная с некоторым объектом, например, окном, доступная всем клиентам X. Каждое свойство имеет имя и уникальный идентификатор - атом. Обычно, имена свойств записываются большими буквами. Атомы используются для доступа к содержимому свойств с тем, чтобы уменьшить объём информации, пересылаемой между клиентами и X сервером.

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

Некоторые свойства и соответствующие им атомы являются предопределёнными и создаются в момент инициализации сервера.

Программирование с использованием библиотеки X Toolkit Intrinsic (Xt)

Чтобы облегчить программирование в системе X window, было создано несколько пакетов. Стандартом де-факто в настоящее время является библиотека X Toolkit Intrinsics (Xt), которая входит в комплект стандартной поставки системы. Xt упрощает инициализацию программ и создание окон. Кроме того, библиотека содержит средства для создания объектов (управляющих элементов), используемых программами при общении с пользователями. В терминах Xt управляющий элемент называется widget.

В настоящий момент на основе пакета реализованы различные наборы (множества) управляющих элементов (объектов), например, Athena, OSF/Motif, Open Look. Эти наборы в совокупности с самой Xt применяются в качестве удобного инструмента для создания интерфейсов. Они берут на себя рутинную работу, которую при написании собственного приложения с использованием только процедур базовой библиотеки X Window программисту пришлось бы выполнить вручную.

Основы Xt

программирование пользовательский графический интерфейс

Объекты Xt

Пакет Xt представляет собой базу для создания управляющих элементов - widget-ов (заготовок). В смысле Xt widget - это просто структура данных, поля которой включают идентификатор самого элемента, идентификатор его окна, если таковое имеется, и многое другое. Атрибуты такого объекта называются ресурсами. Ресурсами widget могут быть, например, цвет его окна, цвет границы окна, шрифт выводимого текста и т.д.

Каждый объект принадлежит к одному из предопределённых классов (widget class). Класс понимается в привычном для объектно-ориентированного программирования смысле, т.е.: класс можно рассматривать как множество экземпляров (объектов), имеющих одинаковые характеристики. Классы Xt образуют иерархию.

Во время работы программа создаёт сами объекты (экземпляры классов -- widget). Они образуют совокупности, каждая из которых также представляет некоторую иерархию. Каждая такая иерархия называется деревом объектов (widget tree). Корнем дерева обязательно является widget, принадлежащий к одному из подклассов специального класса - Shell. Если среди двух widget A и B дерева объектов первый ближе к корню, чем второй, то A является родительским объектом ("родителем") для B, а B - подобъектом (или "дочерним" объектом (потомком)) для A. Таким образом, shell -объект является родительским widget для всех остальных widget данного дерева объектов. Именно он осуществляет взаимодействие программы и менеджера окон.

Описанная иерархия widget соответствует взаимосвязи их окон, что является свойством X Window. Кроме этого, на объекты накладывается и другая иерархия. Дело в том, что во время работы одни объекты могут управлять другими. Например, если некий объект имеет подобъекты, то при изменении геометрии он может автоматически перестроить геометрии своих потомков. Чтобы это могло осуществиться, между widget устанавливается связь - связь "по управлению". Каждый объект может иметь один или несколько "управляемых" им подобъектов.

Для взаимодействия программы, использующей Xt, с widget и X Window предусмотрены три механизма.

* Callback

Процедуры ("процедуры обратного вызова"). Для любого класса определена совокупность действий, на которые должны реагировать принадлежащие ему объекты. Например, для любого класса предусмотрена реакция на уничтожение widget. Когда действие производится, происходит вызов либо стандартной функции Xt, либо одной или нескольких процедур, предоставляемых программой. Такие функции и называются сallback -процедурами или просто callback.

* Action

-процедуры. Программа может заказать реакцию на то или иное сложное событие (группу событий), приходящее от Xt. Если событие происходит, Xt осуществляет поиск и вызов соответствующей функции.

* Event handlers

- обработчики событий. Этот способ аналогичен предыдущему, но более быстр и менее гибок. Он позволяет реагировать только на простые (единичные) события, но не на их последовательности.

Общая схема программирования

Программы, работающие в X, должны выполнить ряд стандартных действий, как то: установить связь с сервером, задать необходимые свойства для менеджера окон, и ещё множество других шагов. Если используется Xt, то всё это делается одной процедурой - XtInitialize(). Она инициализирует сам пакет, менеджер ресурсов ({\term resource manager) X Window, и выполняет другие необходимые операции. Обращение к XtInitialize() (или XtAppInitialize()) должно предшествовать всем другим вызовам процедур Xt. XtInitialize() возвращает идентификатор shell-widget, который может использоваться как корень дерева объектов программы. Как правило, имя класса программы совпадает с именем самой программы, только начинается с заглавной буквы. Менеджер ресурсов использует имя и класс программы для поиска её параметров в базе данных ресурсов.

Каждая программа может задать в командной строке некоторые параметры. В Xt определены "стандартные" параметры, которые могут быть переданы при запуске программы. Кроме этого, в командной строке могут присутствовать и нестандартные параметры, свойственные только данному приложению. XtInitialize() сканирует командную строку и размещает соответствующие значения данных в базе данных.

При инициализации создаётся также и контекст программы - структура, которая хранит всю информацию о приложении. Контекст предназначен оградить программу от влияния различных модификаций в операционной системе. XtInitialize() создаёт некоторый стандартный контекст (default context), но, тем не менее, начиная с четвёртой версии X, рекомендуется создавать для каждого отдельного экземпляра программы отдельный "личный" контекст, для чего в терминах Xt следует использовать вызов процедуры XtAppInitialize() (вместо XtInitialize()). Заметим здесь, что приложение в Xt может иметь не одно, как обычно, а несколько объектов "верхнего уровня".

Следующим после инициализации является этап создания управляющих элементов программы, описания взаимоотношений между ними, задание реакций на различные события (регистрация обработчиков событий и других подобных объектов). Это может делаться разными способами, традиционным же является использование, например, для создания объекта процедуры XtCreateWidget(), для передачи управления объектом его родителю - процедуры XtManageChild(), для регистрации обработчиков событий для widget - процедуры XtAddEventHandler(), и т.д. и т.п.

После того, как все объекты программы подготовлены к работе, их графические представления (например, соответствующие этим widget окна) показываются на экране процедурой XtRealizeWidget().

Следующий этап - основной цикл - цикл получения и отправки событий. Он реализуется вызовом процедуры XtMainLoop() (XtAppMainLoop()).

Программа, использующая только процедуры основной X библиотеки (Xlib), должна сама рассматривать каждое приходящее событие (получая его из очереди событий явным вызовом, например, XNextEvent() или XPeekEvent()) и соответствующим образом реагировать на него. Если окон у задачи несколько, то, прежде чем производить какие-то действия, необходимо определить, в каком из окон произошло событие, и на каком уровне иерархии будет происходить обработка этого события (будет ли обрабатывать это событие данный объект или его родитель?). Всё это достаточно утомительно.

Xt берёт всю рутинную работу на себя. XtMainLoop() получает очередное событие и определяет окно, которому оно предназначено. По окну находится соответствующий widget. Для последнего определяются event handler, action -процедура или callback, зарегистрированные для реакции на произошедшее событие. Если таковые сеть, они вызываются. Описанный выше механизм называется рассылкой событий.

XtMainLoop() (XtAppMainLoop()) автоматически завершает программу по требованию менеджера окон.

Объекты Xt, их классификация

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

Каждый создаваемый программой widget есть представитель того или иного класса. Xt и пакеты, на нём основывающиеся, такие как OSF/Motif, Athena, Tk/tcl, Open Look, etc., имеют большое количество таких классов. Создание новых widget, не предусмотренных в стандартных библиотеках, требует и создания (определения) соответствующего класса, что, обычно, является трудоёмкой задачей.

Каждый класс имеет ряд фиксированных характеристик, являющихся общими для всех его экземпляров (например, список сallback -процедур). Значения этих характеристик у самих объектов могут различаться.

Все классы Xt образуют иерархию. Если класс B ближе к вершине иерархии, чем класс D, то B называется базовым для D, а D называется производным классом (или подклассом) для B.

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

В программах каждый класс идентифицируется переменной, которая указывает на соответствующую структуру данных. Эту переменную называют указателем на класс. Данные этой структуры заполняются при инициализации Xt.

Основные классы widget:

Object. Абстрактный класс (класс, не порождающий собственного объекта), который используется в качестве корня дерева всех объектов. Он содержит единственный подкласс:

RectObj. Абстрактный класс, который используется для определения некоторых общих характеристик, необходимых для функционирования различных типов объектов (например, для объектов, не имеющих окна). Он содержит подкласс:

Core. Корень дерева классов widget, имеющих окна. Этот класс определяет характеристики, общие для всех объектов, например такие, как размер окна widget и его положение на экране. Содержит подкласс:

Composite. Widget, относящиеся к данному классу, могут быть родительскими по отношению к другим объектам. Экземпляры класса Composite определяют следующие особенности поведения своих подобъектов:

* задаёт местоположение "дочерних" widget согласно тем или иным ограничениям;

* при уничтожении освобождает память, используемую подобъектами (при уничтожении widget класса Composite сначала будут уничтожены все его "потомки");

* управляет появлением на экране окон своих дочерних widget;

* управляет передачей фокуса ввода между объектами.

Класс Composite содержит подклассы:

Constraint. Это класс представляет собой дальнейшее расширение базового класса. Его экземпляры имеют дополнительные возможности для управления размером и местоположением своих потомков. Например, подобъекты могут размещаться в специальном порядке: в ряд, в столбец и т.д.

Shell. Это специальный класс, предназначенный для взаимодействия с менеджером окон. widget из этого класса может иметь только одного потомка. Класс Shell содержит подклассы:

OverrideShell. Это важный подкласс класса Shell. Для окна widget данного класса атрибут override_redirect устанавливается в значение True, т.е. менеджер окон его не контролирует. Как правило, окна объектов этого класса не имеют аксессуаров, добавляемых менеджером окон (заголовок, рамка, стандартные кнопочки), и используются в основном для создания меню различного типа.

WMShell. Это специальный подкласс класса Shell, содержащий дополнительные поля, необходимые для взаимодействия с менеджером окон. Содержит:

VendorShell. Этот класс предназначен для того, чтобы дать возможность взаимодействия со специальными менеджерами окон. Этот класс содержит подклассы:

TopLevelShell. Widget данного класса, как правило, используются как shell -объекты дерева объектов программы. Он содержит:

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

TransientShell. Этот класс отличается от предыдущего только особенностями взаимодействия с менеджером окон. Окна widget данного класса не могут быть минимизированы (превращены в пиктограмму). Но если в пиктограмму превращается родитель объекта класса TransientShell, то окно widget убирается с экрана. Класс TransientShell используется для создания диалогов.

Каждый из классов widget, а следовательно, и создаваемые на его основе объекты, имеют достаточно большое количество параметров. В терминах Xt они называются "ресурсы". Xt предоставляет широкий выбор средств для работы с ними.

Дополнительные возможности Xt

В Xt предусмотрен механизм для работы с файлами (и вообще с внешними устройствами) в асинхронном режиме. Приложение может зарегистрировать процедуру, которая будет вызываться по мере готовности данных или при возникновении ошибок чтения/записи.

Xt предоставляет приложению возможность выполнять определённые действия через заданные промежутки времени. Например, периодически отображать на экране текущее время в заданном окне и т.п. Для таких целей используется специальный механизм Xt - таймер. Он обеспечивает вызов через заданный интервал времени специальной функции, заданной программой.

Xt предоставляет возможность выполнять какие-либо действия, когда очередь событий пуста. Это реализуется через регистрацию специальной "рабочей" (work) процедуры, которую Xt вызовет, если очередь событий опустеет. Такие функции обычно используются для выполнения различных действий и вычислений в течение очень короткого времени.

Каждое приложение при необходимости может модифицировать обычный цикл получения и рассылки (обработки) событий - Xt предусматривает целый набор процедур для работы с очередью событий.

Xt имеет механизм, так называемых, акселераторов (accelerator), который позволяет вводить зависимости событий и действий. Акселераторы похожи на action - процедуры с той разницей, что событие (или группа событий), происходящее в одном widget, инициирует вызов соответствующей action -процедуры для другого объекта.

Xt поддерживает несколько способов работы с окнами widget. Так, программка, используя процедурки, предоставляемые Xt, может показать окошко, установить для него тот или иной режим работы, и закрыть окошко, когда оно становится ненужным. В основном эти процедуры используются для создания pop-up меню и диалогов. Как правило, все множества widget (например, OSF/Motif) имеют свои намного более удобные процедуры для создания меню и диалогов.

Надстройки над Xt В настоящее время Xt строго стандартизован X консорциумом, но стандартов более высокого уровня не существует. Популярностью пользуются:

* OSF/Motif Toolkit;

* Athena Widget Set;

* OPEN LOOK Intrinsic Toolkit;

* InterViews;

* Tk/tcl.

Наиболее распространённым и почти стандартом де-факто, вероятно, следует считать OSF/Motif.

Athena

Athena Widget Set ("множество widget") предоставляется X консорциумом в комплекте стандартной поставки X. Athena была создана в ходе работы над базовыми приложениями и утилитами в ходе реализации проекта "Афина" в MIT, результатом которого и является система X Window.

Athena изначально имела "плоскую" графику - все кнопки, меню и прочие элементы интерфейса не имели теней, т.е. были плоскими. Около года назад вышла AW3d - вариант Athena Widgets, в котором это недостаток устранён.

Motif

Open Software Foundation Motif (OSF/Motif) представляет собой пакет, включающий менеджер окон, набор утилит для выполнения различных вспомогательных операций, а также библиотеку объектов, построенных на основе Toolkit Intrinsics.

Motif поддерживает все классы Xt и, следовательно, ресурсы этих классов, но для записи имени и класса ресурса объекта используются константы, начинающиеся соответственно с префикса XmN и XmC. Для записи типа ресурса употребляются константы с префиксом XmR (вместо XtR, принятого в Xt).

Motif расширяет множество классов объектов, предоставляемое Xt. В частности, Motif поддерживает достаточно большой набор классов, позволяющих создавать меню, полосы прокрутки scrollbar), нажимаемые кнопки, редактирующие элементы и т.д.

Кроме этого, Motif предоставляет специальный класс объектов, которые называются gadget - они образуют в Motif отдельный класс XmGadget, который является подклассом класса RectObj. Они также могут использоваться для создания интерфейсных элементов, но обладают особенностью - они не имеют собственных окон. Для рисования gadget пользуются окном своего родителя.

Каждый класс widget имеет достаточно широкий выбор как наследуемых, так и дополнительных, специфичных для него ресурсов. Они позволяют управлять такими важными характеристиками объектов, как цвет фона, местоположение на экране, шрифт выводимого текста и т.д.

Некоторые из классов Motif не используются для создания экземпляров widget (такие классы в терминологии объектно-ориентированного программирования называются абстрактными). Они содержат в себе самые общие атрибуты и методы, необходимые для функционирования различных типов widget.

Motif имеет два основных подкласса объектов: XmPrimitive и XmManager (класс XmGadget поминался ранее). Оба этих класса являются абстрактными. Первый из них наследуется от класса Core и используется как базовый для классов объектов, не владеющих другими объектами. Примерами являются нажимаемые кнопки, списки и т.д. Класс XmManager наследуется от класса Constraint и применяется для создания объектов, которые могут иметь и управлять дочерними объектами.

Классификация объектов

Класс XmGadget. При создании экземпляров обычных классов объектов Motif (widget) порождается и соответствующее окно. Если программа использует много widget, то это приводит к значительному замедлению работы приложения. Время тратится и на создание окон, и на дальнейшую работу с ними. Но легко видеть, что наличие для каждого объекта отдельного окна совсем необязательно. Метки label, кнопки, да и многие другие widget с успехом могли бы использовать для рисования окна своих родительских объектов. Нет окна - не надо обращаться лишний раз к серверу, растёт производительность и не тратится дополнительная память.

Проводя именно эту идею в жизнь, разработчики Motif продублировали некоторые классы объектов, создав две версии - с окном и без окна. Версии объектов, не имеющие окон, ведут свою иерархию от абстрактного класса - XmGadget, и обобщающее название у них такое же. Этот специальный класс объектов наследует свои характеристики от класса RectObj, который, в свою очередь, есть абстрактный класс, заключающий в себе базовые механизмы управления геометрией объектов.

Кроме того, что gadgets не имеют собственных окон, на них накладываются и другие ограничения. Так, для них нельзя определить обработчики событий (event handler), таблицы трансляции. Кроме того, gadget не могут иметь объектов-потомков. В остальном функциональность gadget и соответствующих widget одинакова, поэтому описывать их отдельно мы не будем, только перечислим.

Класс XmGadget содержит подклассы:

* XmArrowButtonGadget.

* XmLabelGadget.\hfil

* XmPushButtonGadget.

* XmToggleButtonGadget.

* XmCascadeButtonGadget.

* XmSeparatorGadget.

Класс XmPrimitive. Этот абстрактный класс содержит:

XmArrowButton. Экземпляр класса представляет собой кнопку, на которой нарисована направленная стрелка. На кнопку можно нажать с помощью мыши или клавиатуры. Граница управляющего элемента может иметь тень, она используется для отображения различных состояний, в которых может быть объект: свободном ("отжатом") и нажатом.

XmLabel. Представители этого класса (метки) - одни из простейших объектов Motif. Метки предназначены для отображения информации: текста или рисунков (битовых (пиксельных) карт).

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

Если объект выбирается, например, нажатием левой кнопки мыши, когда её курсор находится на объекте, то цвет границы widget меняется, что создаёт эффект нажатия. После освобождения кнопки, цвет границы восстанавливается. Нажать на такой widget можно и с клавиатуры - для этого надо передать объекту фокус ввода и нажать на клавишу "пробел" (обычно).

XmDrawnButton. Объекты данного класса аналогичны нажимаемым кнопкам с той лишь разницей, что в них рисуется не текст, а произвольный рисунок (карта пикселей).

XmToggleButton. Объекты данного класса представляют собой маленькую кнопку, рядом с которой, как правило, располагается поясняющий текст. Кнопка может пребывать в двух состояниях: включено и выключено (т.е. это переключатель). Они отмечаются изменением внешнего вида управляющего элемента.

Представитель данного класса служит для создания так называемых "отмечаемых кнопок" (check button), которые мудрее было бы называть "галочками", и "радио-кнопок" (radio button) - многопозиционных переключателей. Первые служат для задания логических параметров, т.е. имеющих два значения. Вторые служат аналогичной цели, но множество значений в данном случае конечно и содержит более двух элементов. При этом форма графического представления объекта типа XmToggleButton зависит от того, используется ли он как "галочка" или "радио" кнопка.

Как правило, widget класса XmToggleButton объединяются в конструкции, которые называются, соответственно, блок отмечаемых кнопок (check box) и блок радио-кнопок (radio box). Эти блоки, в свою очередь, представляют модификации объектов класса XmRowColumn, описанного ниже.

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

XmList. Представители данного класса - это одни из наиболее интересных объектов Motif. Они предназначены для показа списка строк и дают пользователю возможность произвести различные действия с элементами списка. Пользователь может выбрать одну или несколько строк, представленных в этом объекте, при этом они подсвечиваются. Кроме того, если список имеет фокус ввода, то один из его элементов выделяется пунктирной рамкой. Эту рамку называют курсором списка.

XmScrollBar. Объекты данного класса - полосы прокрутки (скролл-бары), как правило, используются в совокупности с другими объектами, такими, как список (XmList), текст (XmText) и другими. Скролл-бар предназначен для прокрутки области, если представленная в ней информация (список, текст, рисунок и т.п.) не может быть показана в окне полностью. Объекты класса XmScrollBar представляют собой полосу (горизонтальную или вертикальную), по краям которой находятся кнопки со стрелками. Нажатие на какую-либо из них приводит к прокрутке в направлении указанном стрелкой. На самой полоске скролл-бара располагается ползунок (бегунок) - выделенный цветом прямоугольник. Если "зацепить" его мышью и "тащить", то это, как правило, также приводит к прокрутке области.

XmSeparator. Объекты данного класса - разделители - используются, как правило, в целях улучшения внешнего вида окон приложения. Такой widget представляет собой вертикальную или горизонтальную полоску (линию), разделяющую группы объектов. Например, разделители могут применяться в меню для отделения одних команд от других, в диалогах - обособляя группу нажимаемых кнопок от остальных элементов и т.д.

XmText. Объекты данного класса позволяют отобразить одну или несколько строк текста. Если строки не помещаются в окне, то изображение можно прокручивать влево-вправо и вверх-вниз. Текст можно редактировать - режим редактирования может изменяться соответствующей установкой ресурсов объектов.

Motif предоставляет ряд удобных процедур, позволяющих производить с widget этого класса самые разнообразные операции: получить и модифицировать данные, скопировать выделенную часть данных в системный буфер (clipboard) и прочая.

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

Класс XmManager. Данный класс является абстрактным, т.е. не используется для порождения объектов. Он определяет базовые параметры, необходимые для построения классов widget, которые могут управлять другими объектами. Эти ресурсы нужны для правильного отображения дочерних widget и управления получением ими фокуса ввода.

Класс XmManager содержит:

XmBulletinBoard. Объекты данного класса могут иметь подобъекты, которые размещаются в окне произвольным образом. Координаты окон дочерних widget измеряются в системе координат, начало которой находится в левом верхнем углу окна объекта класса XmBulletinBoard.

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

Класс XmBulletinBoard содержит:

XmForm. Отличительная особенность объектов данного класса (форм) - возможность управления расположением своих подобъектов за счёт задания связей как между самой формой и дочерней widget, так и между самими подобъектами.

Для каждой дочерней widget можно указать, к чему привязан её левый, правый, нижний или верхний край. Так, если левый и правый края подобъекта привязать к правому краю формы, то расстояние от них до этого края всегда будет оставаться одним и тем же. Если размер формы уменьшится, то подобъект сдвинется влево, а если размер увеличится, то - вправо. Можно привязать один подобъект к другому. Тогда изменение положения подобъекта, к которому привязан widget, приведёт к перемещению привязанного объекта так, чтобы расстояние между ними сохранилось.

При изменении размеров формы все связи между её подобъектами сохраняются.

XmSelectionBox. Объекты данного класса ("блоки выбора") представляют пример составной widget и включают в себя прокручиваемый список, где пользователь может выбрать нужный ему элемент, а также текстовое поле (объект XmTextField), где отображается выбранный в списке пункт. Пользователь может редактировать сделанный выбор. Список и текстовое поле могут иметь поясняющие надписи, задаваемые с помощью соответствующих widget класса XmLabel. Объект класса XmSelectionBox включает также и три нажимаемые кнопки (объекты XmPushButton). По умолчанию на них нанесены надписи "Ok", "Cancel" и "Help". И, наконец, есть ещё один элемент - нажимаемая кнопка, имеющая по умолчанию название "Apply". Первоначально данный подобъект создаётся, но не включается в список управляемых (managed) widget.

Используя блок выбора, пользователь может указать нужную ему подстроку в списке или ввести её в текстовое поле. Установки подтверждаются нажатием кнопки "Ok".

Класс XmSelectionBox включает:

XmCommand. Объекты данного класса дают пользователю возможность сделать выбор нужной команды, используя список уже введённых команд, или введя команду в текстовое поле, специально для этого предусмотренное в widget.

XmFileSelection. Объекты данного класса позволяют просматривать текущее содержимое разных директорий и выбрать тот или иной файл.

Объекты данного класса содержат элементы:

* 2 текстовых поля: "Filter" и "Selection" (объекты класса XmNextField);

* 2 списка: "Directories" и "Files"(объекты класса XmList);

* 4 нажимаемые кнопки: "Ok", "Filter", "Cancel" и "Help" (объекты класса XmPushButton);

Текстовое поле "Filter" задаёт маску (шаблон), для отбора из всего множества файлов некоторого подмножества, удовлетворяющих задаваемому в этом поле условию - подходящих под шаблон - именно это подмножество и показывается в списке "Files". В списке "Directories" отображаются поддиректории текущего каталога. В текстовом поле "Selection" отображается файл (его название), выбранный в списке "Files", и в это же текстовое поле пользователь может ввести и полное имя нужного ему файла вручную. Четыре нажимаемые кнопки используются для осуществления различных действий:

Ok - выбор заданного файла;

Filter - обновление списка файлов, отображаемого в текстовом поле "Files", в соответствии с текущей маской;

Cancel - закрывает окно widget, выбор файла не происходит;

Help - зов о помощи.

XmMessageBox. Объекты данного класса предназначены для выдачи пользователю сообщений, возникающих в процессе работы программы. Этот widget является составным. Он имеет область, в которой отображается строка текста (сообщение) и специальная пиктограмма, характеризующая тип сообщения. Кроме этого, в объекте есть три нажимаемых кнопки. По умолчанию на них нанесены надписи: "Ok", "Cancel" и "Help".

XmDrawingArea. Объекты данного класса предоставляют программе окно для рисования и отображения информации. В самом классе не предусмотрены параметры, которые можно было бы непосредственно применять для вывода графики. Но имеющиеся в этом классе списки сallback -процедур позволяют получать извещения о необходимости перерисовки окна widget и о получении фокуса ввода.

XmFrame. Объекты данного класса используются для того, чтобы выделить некоторые объекты среди остальных, обведя их рамкой. Особенность widget данного класса состоит в том, что они могут иметь и управлять только одним подобъектом.

XmPanedWindow. Объекты данного класса могут объединять разнородные widget. Подобъекты отделяются друг от друга, и между ними помещается специальный элемент, который имеет название sash. Он выглядит, как маленький квадрат, и используется для изменения размеров дочерних widget. Так, если объект класса XmPanedWindow имеет два подобъекта, то можно проделать следующее: "зацепить" sash мышкой и "оттащить" его в нужную сторону (вниз-вверх или влево-вправо) - при этом продольный размер (размер вдоль направления, в котором был "оттащен" sash) одного дочернего объекта увеличится "за счёт" другого (размер другого уменьшится), поперечные размеры обоих подобъектов сохранятся. "Поперечный" размер объекта класса XmPanedWindow определяется максимальным аналогичным размером его подобъектов.

XmRowColumn. Объекты данного класса могут объединять разнородные widget. Подобъекты располагаются в определённом порядке - в виде матрицы. widget класса XmRowColumn являются основой для создания следующих объектов:

check box - "блок отмечаемых кнопок" (т.е. объектов класса XmToggleButton или класса XmToggleButtonGadget); среди имеющихся в "блоке" кнопок одновременно может быть выбрано ("включено") несколько;

radio box - "блок радио-кнопок" (т.е. объектов XmToggleButton или XmToggleButtonGadget); среди имеющихся в "блоке" кнопок одновременно может быть выбрана ("включена") только одна;

pulldown menu - "выпадающее меню" - окно подменю, которое появляется после выбора кнопки в меню верхнего уровня (menu bar); пункты меню располагаются вертикально;

option menu - кнопка с ассоциированным меню; при нажатии на кнопку возникает окно меню, из которого выбирается одно значение параметра; пункты меню располагаются вертикально;

popup menu - "всплывающее меню", которое, как правило, вызывается нажатием на третью кнопку мышки; окно меню появляется в том месте, где находится её курсор; пункты меню располагаются вертикально;

menu bar - меню верхнего уровня, содержащее ряд кнопок (объектов класса XmCascadeButton или XmCascadeButtonGadget), которые используются для вызова различных подменю (pulldown menu); пункты меню располагаются горизонтально.

XmScale. Объект данного класса представляет собой прямоугольную область, содержащую фиксирующий бегунок (slider), используя который пользователь может выбрать значение параметра, ассоциированного с объектом, из указанного диапазоне.

XmScrolledWindow. Объект данного класса предоставляет возможность выводить и просматривать некоторую информацию (текст, рисунок, список). Такой widget, как правило, содержит подобъект, в котором расположены данные, предназначенные для просмотра (это может быть объект класса XmText, XmDrawingArea и др.) Для более удобного просмотра данных могут использоваться горизонтальные и вертикальные полосы прокрутки.

Данный класс содержит подкласс

XmMainWindow. Объекты данного класса представляют отдельную компоненту интерфейса, состоящую, как правило, из следующих частей:

* меню верхнего уровня,

* окно команд,

* "рабочая" область,

* окно сообщений,

* и два скролл-бара (горизонтальный и вертикальный).

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

Классы XmMenuShell и XmDialogShell. Motif предусматривает класс объектов XmMenuShell для создания различных меню. Этот класс наследуется от класса OverrideShell (из Xt).

Как уже упоминалось при описании Xt, класс TransientShell используется для создания объектов программы, которые, с одной стороны, непосредственно контактируют с менеджером окон, а с другой стороны, имеют особенности, отличающие их от обычных окон верхнего уровня. Основной из этих особенностей является та, что widget класса TransientShell нельзя минимизировать. Но они убираются с экрана, если в пиктограмму превращается родитель. Такого рода widget, как правило, используются для создания вспомогательных окон программы.

Motif использует указанные свойства класса TransientShell и развивает их в производном классе XmDialogShell. Последний служит в качестве shell -объекта диалога.

Структуру диалогового окна в Motif может представить следующим образом:

Объект класса XmDialogShell

Объект подкласса XmManager, например, XmBulletinBoard или XmForm

Разнообразные управляющие элементы: кнопки, поля ввода текста и т.д.

Библиотека имеет набор процедур, облегчающих создание описанной конструкции.

Диалоги

Как было указано, конструкция диалогового окна в Motif следующая: сначала идёт объект класса XmDialogShell, в который потом включается widget одного из подклассов класса XmManager, этот объект используется для размещения разнообразных объектов.

В библиотеке предусматриваются специальные процедуры для создания диалогов. Они различаются по типу widget, являющейся дочерней по отношению к объекту класса XmDialogShell.

Вывод текста

В библиотеке достаточно большое количество widget, которые используются для отображения текстовой информации. Это XmLabel со подклассы, XmText и др. Для задания возможных шрифтов, которые можно применять при рисовании строк, используется ресурс XmNfontlist. Он имеет тип XmFontlist. Значение его - множество пар "шрифт"/"тэг шрифта".

Тэги (метки) предназначены для того, чтобы сделать программы независимыми от конкретных шрифтов, задаваемых пользователем. Делается это следующим образом: приложение создаётся так, что во всех функциях, работающих со строками текста, присутствуют не сами шрифты, а их метки. Когда задача скомпилирована и стартует, определяется соответствие между тэгами и конкретными шрифтами. Последние и используются для рисования.

Motif имеет средства не только для работы со строками текстов, выводимыми единым шрифтом, но и позволяет работать с такими объектами, как "составные строки" - т.е. строками текста, в которых используется много шрифтов. Имеется набор средств для создания таких строк, работы с ними и преобразования их к обычным, "одношрифтовым", строкам.

Работа с изображениями

Сам Motif работает с изображениями, представляя их во внутреннем формате, представляющем собой простейшую битовую карту (bitmap), которая задаётся с помощью структуры XImage.

Управление фокусом ввода

Motif поддерживает две модели передачи фокуса ввода. Первая из них неявная (pointer): фокус отдаётся той widget, в которую перемещается курсор мыши. Вторая модель - явная (explicit): для передачи фокуса надо поместить курсор мыши в окно widget и нажать на левую кнопку мыши. Когда widget или gadget получают фокус ввода, их граница подсвечивается.

Кроме этих моделей передачи и получения фокуса ввода существует ещё механизм передачи фокуса ввода от одной widget к другой. Объекты могут быть объединены в группы - это может делаться заданием необходимых значений соответствующих ресурсов, а может быть отдано на откуп системе. В последнем случае Motif автоматически связывает widget, используя встроенные правила. Так, например, объект класса XmMessageBox содержит три группы: одна - "основной" объект диалога (класс XmForm), вторая - "метка", в которой представлено сообщение пользователю, третья - нажимаемые кнопки.

Фокус ввода передаётся как от одного объекта (в группе) к другому, так и от группы к группе.

Передача фокуса внутри группы производится с помощью клавиш стрелок, а от группы к группе - с помощью клавиши табуляции (поэтому сами группы называют Tab -группами). При передачи фокуса группе, фокус ввода в ней передаётся первому объекту, который может получить фокус (объекту можно запретить получать фокус, установкой подобающего значения соответствующего ресурса). Порядок передачи фокуса ввода внутри группы совпадает с порядком, в котором созданы её widget. При этом, обычно, комбинация клавиш перемещает фокус в противоположном направлении.

Motif предоставляет также ряд процедур, с помощью которых можно управлять фокусом ввода.

Lesstif Совсем недавно вышел freeware аналог Motif, полностью с ним совместимый. Он называется Lesstif. Его можно свободно получить в исходном и скомпилированном для различных платформ виде в Internet.

Tk/tcl

Tcl - читается: - расшифровывается: "tool command language" (инструментальный командный язык). Состоит из двух частей: собственно языка и библиотеки.

Язык tcl имеет простой синтаксис, программировать на нём легко. В исходном своём виде tcl - это интерпретатор. Позволяет создавать новые конструкции, как функции или программы, что предоставляет умелому программисту мощный инструмент разработки не только конечных приложений, но и своего собственного расширения языка tcl, создания и поддержки своего собственного стиля.

Библиотека tcl предоставляет возможность использовать в прикладных программах интерпретаторы языка tcl, а значит и включать в программы скрипты, написанные на командном языке tcl. Библиотека содержит лексический анализатор языка tcl, функции, реализующие встроенные команды tcl, позволяет пристраивать пользовательские подпрограммы (вызовы функций) к командам tcl. Такая компоновка возможна и для C, и для C++.

Tk представляет собой Motif -совместимый инструментарий (toolkit) для разработки графических пользовательских интерфейсов в среде X Window. В дополнение к стандартному интерфейсу с C и C++, он включает интерфейс с tcl, предоставляя возможность использовать средства Tk из среды интерпретатора команд tcl. Это означает, что помимо стандартного программирования на C и C++, интерфейсные части приложения могут быть реализованы в виде скриптов на языке tcl и эти интерфейсные части (диалоги, планировки экранов и т.д.) можно править динамически, в ходе работы конечной программы, используя команды tcl.

Оконная среда " wish" позволяет создавать приложения с графическими пользовательскими интерфейсами, пользуясь только средствами языка tcl.

Подобные документы

    Системы программирования и их графические возможности. Разработка мультимедиа курса, способствующего эффективному усвоению учащимися базовой школы темы "Графические возможности языка программирования" (на примере языков программирования Basic и Pascal).

    дипломная работа , добавлен 29.12.2010

    Графические компоненты экрана, системные объекты и функции. Система средств взаимодействия пользователя с устройством. История графических пользовательских интерфейсов персональных компьютеров, их классификация. Оконная система X Window System.

    презентация , добавлен 22.05.2012

    Программирование и простейшие графические возможности. Основные структуры для представления и два конструктора с аргументами. Дальнейшие координаты точки и инициализирование новой. Хранение и изменение координат левого верхнего угла прямоугольника.

    лабораторная работа , добавлен 01.12.2011

    Векторная компьютерная графика. Графические примитивы. Графические возможности языка программирования Pascal. Методические рекомендации к изучению графики в языке программирования Pascal. Построение графиков функций.

    курсовая работа , добавлен 13.06.2007

    Разработка программы для операционной системы Windows с использованием VisualC++ (6.0, .NET). Рассмотрение основ программного моделирования работы прибора (электрического чайника). Правила создания классов устройства и его графического интерфейса.

    курсовая работа , добавлен 03.06.2014

    Компьютерная графика. Представление графической информации в компьютере. Графические форматы. Графические редакторы. Векторная графика. CorelDraw. Характеристика программы, интерфейса. Технологические возможности и использование программы CorelDraw.

    курсовая работа , добавлен 19.05.2007

    Роль распределенных вычислительных систем в решении современных задач. Инструментальная система DVM для разработки параллельных программ. Средства построения формальной модели графического интерфейса. Требования к графическому интерфейсу DVM-системы.

    курсовая работа , добавлен 15.10.2010

    Сущность программирования с использованием среды Delphi 7 и ее основные графические возможности. Структура автономно компилируемого программного модуля и его принципы. Основные приемы работы с графическими процедурами, построение дуги, круга и эллипса.

    курсовая работа , добавлен 16.12.2011

    Сферы применения машинной графики. Виды компьютерной графики. Цветовое разрешение и цветовые модели. Программное обеспечение для создания, просмотра и обработки графической информации. Графические возможности текстовых процессоров, графические редакторы.

    контрольная работа , добавлен 07.06.2010

    Эволюция графических пользовательских интерфейсов. Устройство системы X Window и менеджеры окон. Описание рабочего стола и приложения KDE и GNOME. Обзор основных принципов организации интерфейса в системе Windows, описание пакета ее прикладных программ.

При разработке прикладных программ представляется полезным создание графического интерфейса пользователя . Фактически, это создание среды расчета задач определенного класса без программирования со стороны пользователя. Как правило, такие интерфейсы имеет смысл разрабатывать для задач с несколькими параметрами если предполагается неоднократное решение подобных задач. В таком случае целесообразно разработать графический интерфейс, который помогает пользователю получать результаты решения задачи (как правило в графическом виде) при определенном выборе параметров. Такой интерфейс может быть также удобен при создании учебных задач, потому что обучающийся в таком случае основное внимание тратит не на программирование или решение задачи, а на подбор требуемых параметров, анализ и осмысление получающихся результатов.

Из приведенного выше краткого введения понятно, что обязателными элементами графического интерфейса при решении научных и/или учебных задач должны быть:

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

2. Несколько редактируемых окон, с помощью которых задаются и/или изменяются значения параметров задачи.

3. Управляющие кнопки, которые позволяют запускать и останавливать процесс расчета, перерисовывать результаты, выходить из задачи.

4. Поясняющие надписи (статический текст).

Конечно, возможны и другие элементы управления, такие как прокручиваемые списки, радио-кнопки для выбора одного из многих вариантов и т.д., но в настоящем пособии мы рассмотрим подробно только перечисленные в списке четыре типа. На рис.8 показан простейший интерфейс, созданный для исследования биений, образующихся при сложении двух гармонических колебаний с близкими частотами. Как видно из рисунка, все вышеперечисленные элементы в нем присутствуют.

Для создания такого интерфейса можно воспользоваться функциями графического вывода, а также специальной функцией, разработанной для интерактивного взаимодействия пользователя с рисунком. Эта функция называется uicontrol . Но для упрощения работы и создания однотипных элементов интерфейса в системеMATLAB имеется специальная программа, которая позволяет на уровне визуального программирования, почти без написания кода создать требуемые элементы.

Рис. 8. Простейщий графический интерфейс пользователя для решения задачи “Биения”

9.1. Создание внешнего вида интерфейса

В этом параграфе мы рассмотрим использование MATLAB для разработки внешнего вида графического интерфейса (GUI -GraphicsUserInterface) с использованием средств графического (визуального) программирования. Для вызова визуального редактора необходимо в командном окнеMATLAB набрать командуguide . По истечении определенного времени, определяемого быстродействием вашего компьютера, появятся два новых окна, показанные на рис.9 . Одно из них – панель управления (Control Panel , на рисунке слева) и форма или область рисования (Figure , на рисунке справа). Эти окна могут перекрываться, но мы для ясности изложения расположили их рядом. Показанная выше картинка появится на экране в том случае, если перед вызовомguide отсутствует какой-либо открытый рисунок. В случае же если функцияguide вызывается после отрисовки какого-либо рисунка, то он открывается вместо пустого. Мы же рассмотрим создание графического интерфейса с самого начала.

Перед созданием графического интерфейса желательно “разработать проект” того, что вы хотите иметь в качестве интерфейса. Мы рассмотрим пример вывода трех разных сигналов в трех подокнах, что в терминах графики высокого уровня определялось бы операторами subplot(3,1,k), где k - номер графика. Кроме того,

Рис. 9. Общий вид визуального графического редактора и окна редактирования

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

ля, в которых можно осуществлять ввод/редактирование числовых значений трех

переменных. Пусть эти переменные принимают произвольные значения.

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

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

можно. Назовем эти переменные N, R, C. В данном примере имеется в виду расчет

тока в RC-цепи при подаче на зажимы сигнала с номером N, а R и C - сопротив-

ление и емкость в цепи (подробное описание задачи см. в параграфе 10 основного

текста пособия).

Наш интерфейс должен позволить менять зна-

чения N, R, и C, получая в трех расположенных

друг над другом подокнах сигнал (напряжение,

подаваемое на зажимы), производную от сигна-

ла и напряжение на сопротивлении U r . Помимо

окон для вывода графиков и редактируемых окон

R u n E x i t

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

са еще две кнопки - RUN - запуск программы на

Рис. 10. Вид интерфейса

счет и EXIT - прекращение работы и удаление

графического окна.

На первом этапе необходимо разработать внешний вид интерфейса. Пусть по

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

следующим образом (рис. 10 ). Элементами этого интерфейса являются три окна

вывода графиков (axes в терминах панели управления), три статических надписи N,R,C (text ), три окна ввода/редактирования данных (edit ) и две кнопки (push ).

Для создания подокон, в которые будут выводиться графики, ис- пользуется кнопка, показанная справа на рисунке (окно и оси). Щелк-нув по этому элементу на панели управления и переведя мышь на панель рисунка, необходимо поместить крест, котрый будет на кончике мыши, в то

место, где должен находиться левый верхний угол первого подокна. Нажав и удерживая левую кнопку мыши, необходимо вытянуть получающийся прямоугольник до нужных размеров. После этого процедура построения двух других окон повторяется аналогично.

Для создания редактируемых окон ввода используется кнопка edit , показанная справа. Используется она так же, как при создании подокон с осями. Сначала появляется мышь, нагруженная крестиком, с помощью которой строится прямоугольник ввода.

Надписи на панели рисунка создаются с помощью кнопки text , которая переносится и выравнивается аналогично вышеописанному. Для того чтобы внутри области статического текста появилась какая-либо

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

Для создания и размещения кнопок используется панель с надписью Push . Способ размещения кнопки и выбора ее размера полностью совпадает с методом, описанным выше для окна редактирования и окна статического текста.

Построенные таким образом окна вывода и редактирования, окна статического текста и кнопки, а также другие объекты можно выровнять и установить определенные промежутки между ними с помощью панели выравнивания (Alignment Tools ).

Для этого необходимо на панели управления щелкнуть по соответствующей кнопке, и появится панель выравнивания. Для задания ряда объектов, с которыми будут выполняться какие-либо действия, необходимо их выделить, щелкая по каждому из них при нажатой клавишеShift . Выделенные объекты отмечаются

черными точками вокруг соответствующих объектов. При необходимости изменить размер какого-либо объекта (кнопки, окна и т.д.) необходимо щелкнуть по этому объекту с помощью левой кнопки мыши и с помощью мыши изменить требуемый размер так же, как и размер любого окна Windows.

При работе с графическими объектами на панели рисунка желательно раскрыть (с помощью соответствующей кнопки окна Windows) панель рисунка на весь экран и выбрать размер всех объектов на панели рисунка.

Поскольку по умолчанию размеры всех объектов задаются в пикселях, это может привести к тому, что при изменении размера окна вывода кнопки и/или окна могут наехать друг на друга. Для избежания такого нежелательного явления необходимо задать единицы размера всех объектов в безразмерных переменных – долях размера окна. Этот размер называется normalized . Для этого необходимо вызвать редактор свойст щелкнув на панели управления на кнопке с над-

писью Property editor . Выделив в верхнем окне редактора свойств все введенные нами объекты (с помощью удерживаемой клавишиCtrl и выделения объектов левой кнопкой мыши), в нижнем окне редактора свойств находим свойствоUnits (единицы измерения) и выбираем его щелчком левой кнопки мыши. После этого в средней части редактора в специальном окне слева появится свойствоUnits , а справа - окно выбора значений, в котором имеется раскрывающийся список с допустимыми значениями свойства. Для свойстваUnits необходимо выбрать значениеnormalized . Анологично надо задать значение свойстваFontUnits – единицы измерения размера шрифтов. Это обеспечивает изменение размера шрифта при изменении размера окна.

Для размещения надписей на кнопках и в области статического текста необходимо выделить соответствующий объект (либо двойным щелчком прямо в области рисунка, либо в верхнем окне редактора свойств) и в нижнем окне редактора свойств найти свойство String , и после его выделения вписать между кавычками требуемый текст (например, ’Пуск’ на соответствующей кнопке). Для задания надписей над каждым из окон вывода необходимо выделить соответствующее окно и вызвать редактор свойств8 , в нижнем окне которого надо найти свойствоTitle .

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

и двойным щелчком на соответствующем объекте.

Стандарт GUI.

Одно из важнейших изменений в компьютерной индустрии – появление графического интерфейса. Поэтому возникла необходимость принять стандарты GUI, которые определяют, как должны выглядеть приложения под Windows? Macintosh и т.д. Существуют даже сертификационные программы к требованbям которых продавцы приспосабливают свои приложения, чтобы получить значок Windows. Это делается по нескольким причинам.

Одно из достоинств Windows или Mac – их стандартный вид. Когда вы научились работать в одном из них, считайте, что владеете и остальными. Большинство приложений под Windows используют одни и те же соглашения, поэтому вы знаете как открыть, сохранить, распечатать, закрыть и скопировать файл в любом из них. Стандартный интерфейс очень удобен для пользователей. Нужно стараться, чтобы ваши приложения были похожи на другие приложения под Windows с которыми пользователи уже научились работать. Есть семь общих принципов разработки GUI. Если вы изучите их и будете им следовать, с дизайном ваших приложений будет все в порядке.

Семь принципов разработки GUI.

Семь общих принципов разработки GUI взяты из руководства по интерфейсу Micrisoft Windows. Они формируют схему, на основании которой вы можете создавать собственные стандарты. Эта схема дает разработчикам и пользователям два существенных преимущества. Во-первых, приложения выглядят профессионально. Во-вторых, они функциональны, согласуются с другими приложениями и легко осваиваются пользователями.

Разумеется, чтобы приложение имело успех, оно должно быть хорошо написанным и полезным – таково главное требование. Принципы, о которых мы говорим, просто дают разработчику пищу для размышлений.

1. Позволяйте пользователю контролировать приложение.

2. Следуйте парадигме объект/действие.

3. Будьте последовательны.

4. Сделайте работу с приложениями простой и очевидной.

5. Стремитесь к гармонии.

6. Обеспечьте пользователю обратную связь.

7. Будьте снисходительны

Принцип первый: дайте возможность пользователю контролировать приложение.

Пользователь должен управлять приложением, то есть иметь доступ к каждому модулю приложения из любого другого модуля. Раньше для такого доступа использовалось иерархическое меню.


Допустим пользователь хочет добавить нового клиента В примере, пользователь должен для этого перейти в модуль ACCOUNTS RECCIEVAble и затем добавить откуда нового клиента. Откуда ему знать, что нужно делать? Вероятно, из своего опыта работы с этим приложением. А в мире GUI пользователь просто выбирает в меню сначала команду New (Новый), потом Customer (Клиент), как показано на рис. В этой современной системе можно добавить нового клиента, продавца или пункт инвентаризационной записи посредством меню File (Файл). Это позволяет изменить запись клиента, находясь в экране продавца, и наоборот. Пользователю не нужно больше разбираться в сложном и запутанном иерархическом меню.

Принцип второй: следуйте парадигме объект/действие.

Парадигма объект/действие гласит, что над всеми объектами системы можно выполнить какую-либо операцию. Наиболее простой и очевидный пример – экран поддержки базы клиентов (рис). Экран содержит набор кнопок и каждая из низ позволяет произвести некоторое действие над информацией о выбранном клиенте. Можно удалить ее, отредактировать, распечатать и т.д. Действия, которые можно выполнить над определенным клиентом, должны быть доступны или недоступны в соответствующие моменты времени. Например, когда запись покупателя находится в режиме редактирования, кнопки Delete (Удалить) и New (Новый) следует деактивировать.

Принцип третий: будьте последовательны.

Последовательность – один из важнейших принципов разработки GUI. GUI – позволяют пользователям изучить больше приложений, чем старые программы. И все это благодаря принципу последовательности. Когда пользователь сталкивается с новым приложением, он уже знаком с основными командами: открытие, печать и сохранение файлов. Разработанные на этих платформах приложения обычно согласуются между собой.

Таким образом, создавая новые приложения, будьте последовательны. Если для добавления новой записи употреблена команда New (Новый), используйте ее везде. Не следует заменять это слово другими – например, словом Add 9добавить). Благодаря вашей последовательности пользователи будут знать: где им ни встретилась команда New (Новый), е можно использовать для добавления новой записи.

Принцип четвертый: сделайте работу с приложением простой и очевидной.

Можно выразить эту мысль и так: не употребляйте жаргона. Есть экран с двумя кнопками. На одной из них написано «Упаковать базу данных», а на другой – «Убрать записи с пометкой на удаление». Вторая запись наверняка будет более понятна пользователю.

При разработке приложений часто возникает соблазн применить в интерфейсе программистский сленг. Старайтесь по возможности избегать этого.

Принцип пятый: стремитесь к гармонии

Даже в черно белом виде этот экран имеет существенный эстетический недостаток: белый фон и на нем контрастные объекты. На рис. Тот же самый экран выглядит хорошо сбалансированным в цветовом отношении.

В Windows можно передать миллионы цветовых комбинаций. Означает ли это, что их все нужно использовать? Разумеется, нет. Следует выбирать простые, спокойные цвета и избегать их беспорядочного смешения, которое почему-то нравится некоторым программистам.

Принцип шестой. Обеспечивайте пользователю обратную связь.

Представьте себе, что в вашем приложении есть процесс, который долго выполняется. В течение этого времени на экран можно выводить сообщение примерно такого содержания: «Программа работает, подождите пожалуйста». Удобное решение; но откуда пользователю знать, что она не зависла? Поэтому весьма вероятно, что он отдаст приложению «салют тремя пальцами» (Ctrl+Alt+Del), хотя с программой все будет в порядке.

Лучше показать пользователю, какая часть процесса выполнена. Тогда он не прервет программу понапрасну, сможет оценить, как далеко продвинулась работа, и заняться другими делами, пока процесс не завершится. Таким образом, производительность труда пользователя повысится примерно на 25 процентов. Этого результата можно достичь простым выводом измерителя на экран. Обычно выводятся сообщения типа «10 из 100 записей обработано» или «40% завершено». Еще лучше показать как число обработанных записей, так и их процент»

Принцип седьмой: будьте снисходительны

Каждый из нас иногда удалял запись, нечаянно нажав не ту кнопку. Поэтому оставьте пользователю возможность передумать или отменить только что произведенные действия. Если процесс занимает длительное время, изменяет большой объем данных или требует, чтобы пользователь создал резервную копию данных перед выполнением действия, необходимо выдать соответствующее предупреждение, Мне приходилось видеть приложения, которые требуют подтверждения дважды, а потом еще спрашивают пароль. Нужны ли вашим программам защиты такого уровня? Возможно. Задача разработчика – помочь пользователю, если тот сделал ошибку на любом этапе работе.

Важность соглашений по стандарту GUI.

Как видите, принципы разработки GUI очень просты, и их нужно использовать при создании экранов. Однако прежде чем разрабатывать экран, надо установить, как он будет выглядеть. Выберите его размеры, шрифты, цвета, стили сообщений и т.д. Решив эти вопросы заранее вы значительно ускорите свою работу. Когда впоследствии дело коснется шрифта или стиля сообщений, вы просто посмотрите стандарт.