на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Создание графического интерфейса пользователя
p align="left">Программирование контекстного меню

Обработка событий Callback пунктов контекстного меню производится аналогично программированию меню приложения. Установите в редакторе меню для пунктов cmLineBlue, cmLineRed, cmLineGreen соответственно вызовы:

mygui('cmLineBlue_Callback',gcbo,[ ],guidata(gcbo))

mygui('cmLineRed_Callback',gcbo,[],guidata(gcbo)) mygui('cmLineGreen_Callback',gcbo,[],guidata(gcbo))

а в файле mygui.m опишите данные подфункции в соответствии с листингом 14.

Листинг 14. Программирование контекстного меню

function cmLineBlue_Callback(hObject, eventdata, handles)

%Пользователь выбрал синий цвет линии в контекстном меню

set(handles.line,'Color', 'b')

function cmLineRed_Callback(hObject, eventdata, handles)

% Пользователь выбрал красный цвет линии в контекстном меню

set(handles.line,'Color', 'r')

function cmLineGreen_Callback(hObject, eventdata, handles)

% Пользователь выбрал зеленый цвет линии в контекстном меню

set(handles.line,'Color', 'g')

Запрограммированное и связанное с линией контекстное меню разрешает быстрый доступ пользователя к цвету линии. Осталось обеспечить согласованную работу контекстного меню со списком Цвет линии с именем pmColor. Выбор цвета из меню должен приводить не только к изменению цвета линии, но и к появлению соответствующей строки в раскрывающемся списке. В каждую подфункцию обработки события Callback пункта контекстного меню следует добавить операторы, устанавливающие нужное значение (1, 2 или 3) свойства value раскрывающегося списка (листинг 15).

Листинг 15. Согласованная работа меню и списка выбора цвета

function cmLineBlue_Callback(hObject, eventdata, handles)

%Пользователь выбрал синий цвет линии в контекстном меню

set(handles.line,'Color', 'b')

set(handles.pmColor, 'Value', 1)

function cmLineRed_Callback(hObject, eventdata, handles)

% Пользователь выбрал красный цвет линии в контекстном меню

set(handles.line,'Color', 'r')

set(handles.pmColor, 'Value', 2)

function cmLineGreen_Callback(hObject, eventdata, handles)

% Пользователь выбрал зеленый цвет линии в контекстном меню

set(handles.line,'Color', 'g')

set(handles.pmColor, 'Value', 3)

Задание на лабораторную работу

Цель данной лабораторной работы - изучение основных принципов создания приложений в пакете MATLAB 6.x и основ программирования событий от элементов интерфейса.

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

В одно из текстовых полей вводится функция, в другое - количество членов, которые нужно получить из разложения данной функции в ряд Тейлора. Нажатие на одну кнопку позволяет получить график исходной функции. Нажатие на вторую кнопку позволяет получить график суммы заданного количества членов ряда Тейлора и добавить его к ранее построенным графикам. Графики должны иметь разный цвет. Нажатие на третью кнопку приводит к очистке окна, в которое выводятся графики.

Заключение

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

В Приложении приведен образец лабораторной работы по дисциплине «Автоматизация инженерных вычислений». Работа направлена на изучение основных принципов создания приложений в пакете MATLAB 6.x и основ программирования событий от элементов интерфейса.

Приложение

function varargout = mygui(varargin)

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @mygui_OpeningFcn, ...

'gui_OutputFcn', @mygui_OutputFcn, ...

'gui_LayoutFcn', [] , ...

'gui_Callback', []);

if nargin & isstr(varargin{1})

gui_State.gui_Callback = str2func(varargin{1});

end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

else

gui_mainfcn(gui_State, varargin{:});

end

% --------------------------------------------------------------------

function mygui_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;

guidata(hObject, handles);

% --------------------------------------------------------------------

function varargout = mygui_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

% --------------------------------------------------------------------

function btnPlot_Callback(hObject, eventdata, handles)

% Выводим диалоговое окно для выбора вырианта получения исходных данных

button = questdlg('Данные','mygui','По умолчанию','Из файла','По умолчанию');

% Выбран вариант "Из файла"

if strcmp(button, 'Из файла')

try

% Считывание данных из файла в массив

Mas = load('data.txt');

% Определение размеров массива

SMas = size(Mas);

% Проверка массива данных

if ((SMas(2) ~= 2) | (ndims(Mas) ~= 2) | ~isnumeric(Mas))

errordlg('Неизвестный формат файла с данными', 'Ошибка!')

else

% Графическое отображение данных

handles.line = plot(Mas(:,1),Mas(:,2));

guidata(gcbo, handles);

set(handles.line, 'UIContextMenu', handles.cmLine);

end

catch

% Произошла ошибка при выполнении load

errordlg('Неизвестный формат файла с данными', 'Ошибка!')

end

else

% Выбран выриант "По умолчанию"

% Построение графика функции

x=[-2:0.2:2];

y=exp(-x.^2);

handles.line = plot (x,y);

guidata(gcbo,handles);

set(handles.line, 'UIContextMenu', handles.cmLine)

%Проверка флага сетка по х

if get(handles.chbxGridX, 'Value')

% Флаг включен, следует добавить линии сетки

set(gca, 'XGrid', 'on')

else

% Флаг выключен, следует убрать линии сетки

set(gca, 'XGrid', 'off')

end

% Проверка флага сетка по х

if get(handles.chbxGridY, 'Value')

% Флаг включен, следует добавить линии сетки

set(gca, 'YGrid', 'on')

else

% Флаг выключен, следует убрать линии сетки

set(gca, 'YGrid', 'off')

end

end

% Кнопка Построить должна стать недоступной после вывода графика

set(hObject, 'Enable', 'off')

% Кнопка Очистить должна стать доступной

set(handles.btnClear, 'Enable', 'on')

% Пункт меню График->Построить должен стать недоступным

set(handles.mnGraphPlot,'Enable','off')

% Пункт меню График->Очистить должен стать доступным

set(handles.mnGraphClear,'Enable','on')

% Переключатель Маркеры-круги должен стать доступным

set(handles.rbMarkcirc,'Enable','on')

% Переключатель Маркеры-квадраты должен стать доступным

set(handles.rbMarkSq,'Enable','on')

% Переключатель Без маркеров должен стать доступным

set(handles.rbMarkNone,'Enable','on')

% Список Цвет линии должен стать доступным

set(handles.pmColor,'Enable','on')

% Скроллбар Толщина линии должен стать доступным

set(handles.scrWidth,'Enable','on')

% Заголовок графика из текстового поля

title(get(handles.editTitle,'String'))

% --------------------------------------------------------------------

function btnClear_Callback(hObject, eventdata, handles)

% Выводим диалоговое окно

button = questdlg('Очистить оси?','mygui');

% Если выбрано "Yes"

if strcmp(button, 'Yes')

% очистка осей

cla

% Кнопка Очистить должна стать недоступной после очистки осей

set(hObject, 'Enable', 'off')

% Кнопка Построить должна стать доступной

set(handles.btnPlot, 'Enable', 'on')

% Убираем сетку

set(gca, 'XGrid', 'off')

set(gca, 'YGrid', 'off')

% Переключатель Маркеры-круги должен стать недоступным

set(handles.rbMarkcirc,'Enable','off')

% Переключатель Маркеры-квадраты должен стать недоступным

set(handles.rbMarkSq,'Enable','off')

% Переключатель Без маркеров должен стать недоступным

set(handles.rbMarkNone,'Enable','off')

% Список Цвет линии должен стать недоступным

set(handles.pmColor,'Enable','off')

% Скроллбар Толщина линии должен стать недоступным

set(handles.scrWidth,'Enable','off')

% Убираем заголовок графика

title('')

% Пункт меню График->Построить должен стать доступным

set(handles.mnGraphPlot,'Enable','on')

% Пункт меню График->Очистить должен стать недоступным

set(handles.mnGraphClear,'Enable','off')

end

% --------------------------------------------------------------------

function chbxGridx_Callback(hObject, eventdata, handles)

% --------------------------------------------------------------------

function chbxGridY_Callback(hObject, eventdata, handles)

% --------------------------------------------------------------------

function chbxGridX_Callback(hObject, eventdata, handles)

% --------------------------------------------------------------------

function rbMarkcirc_Callback(hObject, eventdata, handles)

% Устанавливаем маркеры-круги

set(handles.line, 'Marker', 'o')

% Переключатель Маркеры-квадраты должен быть выключен

set(handles.rbMarkSq, 'Value',0)

% Переключатель Без маркеров должен быть выключен

set(handles.rbMarkNone, 'Value',0)

% --------------------------------------------------------------------

function rbMarkSq_Callback(hObject, eventdata, handles)

% Устанавливаем маркеры-квадраты

set(handles.line,'Marker','s')

% Переключатель Маркеры-круги должен быть выключен

set(handles.rbMarkcirc, 'Value',0)

% Переключатель Без маркеров должен быть выключен

set(handles.rbMarkNone, 'Value',0)

% --------------------------------------------------------------------

function rbMarkNone_Callback(hObject, eventdata, handles)

% Устанавливаем оттображение графика без маркеров

set(handles.line,'Marker','none')

% Переключатель Маркеры-круги должен быть выключен

set(handles.rbMarkcirc, 'Value',0)

% Переключатель Без маркеров должен быть выключен

set(handles.rbMarkSq, 'Value', 0)

% --------------------------------------------------------------------

function pmColor_CreateFcn(hObject, eventdata, handles)

if ispc

set(hObject,'BackgroundColor','white');

else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));

end

% --------------------------------------------------------------------

function pmColor_Callback(hObject, eventdata, handles)

Num=get(hObject, 'Value');

switch Num

case 1

% Устанавливаем синий цвет линии

set (handles.line, 'Color','b');

case 2

% Устанавливаем красный цвет линии

set (handles.line, 'Color','r');

case 3

% Устанавливаем зеленый цвет линии

set (handles.line, 'Color','g');

end

% --------------------------------------------------------------------

function scrWidth_CreateFcn(hObject, eventdata, handles)

usewhitebg = 1;

if usewhitebg

set(hObject,'BackgroundColor',[.9 .9 .9]);

else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));

end

% --------------------------------------------------------------------

function scrWidth_Callback(hObject, eventdata, handles)

% Получаем текущее значение скроллбара

w = get(hObject,'Value');

% Устанавливаем в качестве толщины линее округленное значение скроллбара

set(handles.line,'LineWidth',round(w));

% --------------------------------------------------------------------

function editTitle_CreateFcn(hObject, eventdata, handles)

if ispc

set(hObject,'BackgroundColor','white');

else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));

end

% --------------------------------------------------------------------

function editTitle_Callback(hObject, eventdata, handles)

% --------------------------------------------------------------------

function mnGraph_Callback(hObject, eventdata, handles)

% --------------------------------------------------------------------

function mnGraphPlot_Callback(hObject, eventdata, handles)

% Вызываем обработчик нажатия кнопки Построить

btnPlot_Callback(hObject, eventdata, handles)

% Кнопка Построить должна быть недоступна

set(handles.btnPlot,'Enable','off')

% Кнопка Очистить должна быть доступна

set(handles.btnClear,'Enable','on')

% --------------------------------------------------------------------

function mnGraphClear_Callback(hObject, eventdata, handles)

% Вызываем обработчик нажатия кнопки Очистить

btnClear_Callback(hObject, eventdata, handles)

% Кнопка Построить должна быть доступна

set(handles.btnPlot,'Enable','on')

% Кнопка Очистить должна быть недоступна

set(handles.btnClear,'Enable','off')

% --------------------------------------------------------------------

function cmLine_Callback(hObject, eventdata, handles)

% --------------------------------------------------------------------

function cmLineBlue_Callback(hObject, eventdata, handles)

% Пользователь выбрал синий цвет линии в контекстном меню

% Устанавливаем синий цвет линии

set(handles.line,'Color', 'b')

% Изменяем значение списка Цвет линии на "синий"

set(handles.pmColor, 'Value', 1)

% --------------------------------------------------------------------

function cmLineRed_Callback(hObject, eventdata, handles)

% Пользователь выбрал красный цвет линии в контекстном меню

% Устанавливаем красный цвет линии

set(handles.line,'Color', 'r')

% Изменяем значение списка Цвет линии на "красный"

set(handles.pmColor, 'Value', 2)

% --------------------------------------------------------------------

function cmLineGreen_Callback(hObject, eventdata, handles)

% Пользователь выбрал зеленый цвет линии в контекстном меню

% Устанавливаем зеленый цвет линии

set(handles.line,'Color', 'g')

% Изменяем значение списка Цвет линии на "зеленый"

set(handles.pmColor, 'Value', 3)

Список литературы

1. Ануфриев И.Е. Самоучитель Matlab 5.3/6.x - СПб.: БХВ-Петербург, 2003.-736с.: ил.

2. В.П.Дьяконов MATLAB 6.5 SPI/7 + Simulink 5/6 в математике и моделировании. Серия «Библиотека профессионала». - М.: СОЛОН-Пресс, 2005. - 576 с.: ил.

3. Ануфриев И.Е. , Смирнов А.Б. , Смирнова Е.Н. MathLab 7. - СПб. : БХВ-Петербург,2005. - 1104 с.: ил.

СОЗДАНИЕ ГРАФИЧЕСКОГО ИНТЕРФЕЙСА ПОЛЬЗОВАТЕЛЯ В MATLAB Методические указания к лабораторной работе по дисциплине «Автоматизация инженерных вычислений» / сост. И.А.Селиванова. Екатеринбург: ГОУ ВПО УГТ-УПИ, 2006. 34 с.

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



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.