Глава 4

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

 

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

 

Глава 1
Вычисления в интерактивном режиме

Глава 2
Графика в системе MATLAB

Глава 3
Программирование M-функций

Глава 5
Дополнительные возможности системы MATLAB


 

 

1. Графические окна системы 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 >