Переключатели
Переключатели обычно группируются по их предназначению, и пользователь может выбрать только одну опцию. Всегда установлен единственный переключатель из группы. Обработка событий переключателя должна влиять на состояние остальных переключателей всей группы. Модернизируйте интерфейс приложения mygui, предоставьте пользователю возможность выбирать тип маркера (кружок, квадрат или отсутствие маркера).
Добавьте в окно приложения новую рамку и нанесите на нее три переключателя, установите свойствам Tag значения rbMarkcirc,rbMarkSq, rbMarkNone, a String - маркеры-круги, маркеры-квадраты, без маркеров соответственно (рис. 6).
Состояние переключателя определяется его свойством value: если value равно единице, то переключатель включен, ноль - нет. Задайте в редакторе свойств значение 1 свойству value переключателя с надписью без маркеров, он будет включен при запуске программы. Значение свойства Value в версии MatLab 6.x устанавливается следующим образом. Выделите переключатель и перейдите к его свойствам. В редакторе свойств нажмите кнопку в строке с Value. Появляется окно Value, изображенное на рис. 7.
Выделите при помощи мыши строку со значением 0.0 и перейдите в режим редактирования значения двойным щелчком мыши. Измените 0.0 на единицу и нажмите ОК. Обратите внимание, что в редакторе свойств значение Value изменилось на единицу, и включился переключатель без маркеров на окне приложения в редакторе приложений. Вышеописанным образом устанавливаются значения Value в редакторе свойств. Дальнейшее управление значением Value переключателей должно осуществляться программно в ходе работы приложения mygui.
Листинг 6. Выбор типа маркеров
function btnPlot_Callback(hObject, eventdata, handles)
% Построение графика функции
x=[-2:0.2:2];
y=exp(-x.^2);
handles.line = plot (x,y)
guidata(gcbo,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)
Рис. 6 Добавление группы переключателей
Рис. 7 Окно Value для установки значения
Списки
Модернизируйте интерфейс приложения mygui, предоставьте пользователю возможность выбора цвета линии графика из раскрывающегося списка (синий, красный, зеленый). Перейдите в режим редактирования и добавьте при помощи панели управления раскрывающийся список (рис. 8). В редакторе свойств установите свойство Tag в значение 'pmColor'.
Рис. 8. Добавление раскрывающегося списка
Элементами раскрывающегося списка являются строки, которые вводятся в редакторе свойств. Нажмите кнопку в строке со свойством Stringраскрывающегося списка, появляется окно String. Наберите в нем строки "синий", "красный", "зеленый" (без кавычек), разделяя их при помощи клавиши <Enter> (рис. 9).
Рис. 9. Окно String
Запустите mygui и убедитесь, что раскрывающийся список содержит требуемые строки. Выбор различных строк пока не приводит к изменению цвета линии - требуется запрограммировать событие Callback раскрывающегося списка.
Обработка события Callback раскрывающегося списка состоит в определении выбора пользователя и соответствующем изменении цвета линии. Свойство списка value содержит номер выбранной строки (строки списка нумеруются с единицы). Перейдите к подфункцииpmColor_Callback и запрограммируйте обработку выбора цвета линии пользователем. Используйте оператор switch для установки цвета линии в зависимости от номера выбранной строки списка.
Листинг 7. Изменение цвета линии
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