Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Создание законченных приложений на основе графического интерфейса пользователя




#$+ Графические окна системы MATLAB и элементы управления.

Работая в интерактивном режиме, мы имели дело с графическими окнами (команда figure), в которых сама система MATLAB создавала графический объект Axes, на поверхности которого осуществлялась прорисовка осей системы координат и изображение графиков функций (в том числе трёхмерных).

Для подготовки информации, необходимой для построения графиков функций, мы вводили команды в командном окне MATLABа, получая необходимую числовую информацию и накапливая её в переменных рабочего пространства.

Если требуются громоздкие и сложные предварительные вычисления, то такую работу лучше всего оформить в виде отдельных M-функций. Вызывая эти функции из командного окна MATLABа, получаем необходимую информацию и запоминаем её в переменных-массивах системы MATLAB. Затем по команде figure создаём новое графическое окно, после чего командами plot, plot3, mesh, surf или surfl воспроизводим графики.

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

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

Мы будем рассматривать следующие графические объекты управления: объект Axes, предназначенном для построения графиков функций, а также несколько объектов общего типа uicontrol. К последним относятся командные кнопки, текстовые поля с возможностью редактирования текста и без такой возможности, переключатели и списки.

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

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

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

Например, команда figure создаёт графическое окно стандартного (заданного по умолчанию) цвета. Если нам требуется изменить цвет на красный, то это легко выполнить, получив описатель окна функцией gcf, а затем присвоив новое значение свойству 'Color' (цвет):

hWnd = gcf; set(hWnd, 'Color', 'red');

или ещё короче

set(gcf, 'Color', 'red')

Все графические объекты (они сами являются окнами в смысле операционной системы Windows) на поверхности графического окна создаются по иерархичнское схеме "родитель - потомство". Родительским окном для элементов управления служит само графическое окно MATLABа. С учётом введённого понятия становится удобным применение для поиска описателей графических объектов функции findobj:

hArray = findobj(hParent, 'имя_свойства', значение_свойства )

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

А теперь создадим для примера командную кнопку на поверхности графического окна:

hF1 = figure;

uicontrol(hF1, 'Style','pushbutton', 'String', 'MyButton1',…

'Position', [ 10 10 70 30 ]);

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

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

В функции uicontrol, создающей элемент управления, самым важным параметром после описателя родительского окна является свойство 'Style', так как оно задаёт тип управляющего элемента. Задав для этого свойства значение 'pushbutton', мы создали именно кнопку (а не редактируемое поле, или что-нибудь ещё).

Имена двух других свойств говорят сами за себя: String задаёт надпись на поверхности кнопки (в данном случае это MyButton1), а Position имеет значением вектор-строку из четырёх чисел и задаёт положение управляющего элемента относительно левого нижнего угла графического окна. < /P >


#$+ Создание основных элементов управления.

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

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

uicontrol(hParent, 'Style', 'edit', …)

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

uicontrol(hF1, 'Style', 'edit', 'Position', [ 100 10 70 30 ],…

'BackgroundColor', 'white',…

'HorizontalAlignment', 'left');

то графическое окно примет следующий вид:

Для редактирующего элемента мы прописали свойство 'BackgroundColor' (цвет фона - сделали его белым вместо тёмно-серого по умолчанию) и свойство 'HorizontalAlignment' (тип выравнивания текста в горизонтальном направлении - сделали " выравнивание по левой границе " вместо " выравнивание по центру ", имеющему место по умолчанию).

Заметим здесь, что свойство 'BackgroundColor' нельзя произвольно задавать для кнопок (требование операционной системы Windows).

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

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

uicontrol(hF1, 'Style', 'text', 'Position', [ 100 50 70 30 ],…

'BackgroundColor', 'white', 'String','Hello, World!',…

'HorizontalAlignment', 'center');

Теперь наше графическое окно содержит уже три элемента управления:

Как видно из приведённого фрагмента, для создания нерадактируемого элемента свойство 'Style' должно иметь значение 'text'.

Создадим теперь элемент управления, называемый " флажком " (checkbox):

uicontrol(hF1, 'Style', 'checkbox', 'Position',[10 100 150 30],…

'String','Important option','HorizontalAlignment', 'left');

Графическое окно примет вид:

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

Наконец, создадим список, содержащий несколько имён функций:

uicontrol(hF1, 'Style', 'listbox', 'Position',[200 10 100 80],…

'String',{'sin','cos','tan'},'HorizontalAlignment', 'left');

Так как список (свойство 'Style' должно быть 'listbox') содержит сразу несколько строковых значений для свойства 'String', а должно быть одно значение, то это единственное значение является массивом ячеек (каждый элемент этого массива есть текстовая строка, то есть массив типа char).

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


#$+Создание графического объекта Axes.

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

Создаётся объект Axes с помощью функции axes (конструктор объекта). На нашем учебном окне осталось мало свободного места, однако мы ухитримся втиснуть туда графический объект Axes, для чего специально уменьшим размер шрифта ('FontSize'), используемого для надписей на осях координат объекта Axes:

axes('Parent', hF1, 'Color', [ 1 1 1], …

'Units', 'points', 'Position', [ 12 33 40 22 ], …

'FontSize', 6);

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

Все команды, создающие графическое окно, объект Axes и элементы пользовательского интерфейса удобно поместить в M-файл. Этот файл будет служить сценарием создания такого окна, причём от пользователя потребуется минимальное количество действий - набрать в командном окне MATLABа имя M-файла и нажать клавишу Enter.

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

global hFig1, hAxes, %----- the file Proj1Script.m ------------------





Дата публикования: 2015-01-23; Прочитано: 336 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.011 с)...