% Переключатель Маркеры-квадраты должен быть выключен
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
Полосы скроллинга
Усовершенствуйте интерфейс приложения mygui, предоставив пользователю возможность устанавливать ширину линии при помощи полосы скроллинга. Добавьте полосу скроллинга в окно приложения и задайте название scrWidth в свойстве Tag полосы. Снабдите полосу скроллинга текстовым пояснением "Толщина линии" так же, как и раскрывающийся список (рис. 10).
Рис. 10. Окно с полосой скроллинга
Теперь следует определить соответствие между положением бегунка полосы и числовым значением свойства value.
Выполните следующие установки из редактора свойств.
1.В Mах занесите десять, а в Min - единицу. Свойства Mах и Min полосы скроллинга отвечают за границы значений, записываемых в value, при перемещении бегунка.
2.Определите начальное положение, записав в value единицу. Нажмите кнопку в строке с названием свойства и в появившемся окне Value измените значение на единицу.
3.Обратитесь к свойству Sliderstep. Его значением является вектор из двух компонентов, первый из которых определяет относительное изменение value при нажатии на кнопки со стрелками полосы скроллинга, а второй - при перетаскивании бегунка мышью. Следует установить значение [0.1 0.2] свойства Sliderstep для того, чтобы нажатие на кнопки полосы изменяло value на десять процентов, а щелчок мыши справа или слева от бегунка на двадцать. Раскройте строку Sliderstep щелчком мыши по знаку плюс слева от названия свойства и в появившихся строках х и у введите 0.1 и 0.2 (рис. 11).
Осталось запрограммировать событие Callback полосы скроллинга с именем scrWidth, которое состоит в задании ширины линии, равной округленному значению value. Перейдите к подфункции scrWidth_Callback и добавьте в ней оператор установки ширины линии
Рис. 11. SliderStep
Листинг 8. Изменение толщины линии
function scrWidth_Callback(hObject, eventdata, handles)
% Получаем текущее значение value скроллбара
w = get(hObject,'Value');
% Устанавливаем в качестве толщины линии округленное значение value set(handles.line,'LineWidth',round(w));
Область ввода текста
Обычные текстовые области, использовавшиеся на протяжении предыдущих разделов, позволяют лишь вывести некоторый текст в окно приложения. Обмен текстовой информацией между пользователем и приложением осуществляется при помощи областей ввода текста. Предоставьте пользователю возможность размещать заголовок на графике. Текст заголовка пользователь вводит в соответствующей строке.
Добавьте в окно приложения область ввода текста, установите значение editTitle свойству Tag области ввода и снабдите ее пояснением в текстовой области, расположенной выше так, как показано на рис. 12. В редакторе свойств удалите из String строку Edit Text, для чего нажмите кнопку в строке с названием свойства и сотрите текст в окне String.
Листинг 9. Изменение заголовка графика
function btnPlot_Callback(hObject, eventdata, handles)
%
% Операторы, отвечающие за построение графика и т.д.
%
title(get(handles.editTitle,'String'))
Рис. 12. Окно с областью ввода текста
Диалоговые окна и меню приложения
Удобный интерфейс приложения во многом определяется диалоговыми окнами, облегчающими работу с файлами, или предназначенными для предостережения пользователя о событиях, которые могут повлечь его действия. MatLab предоставляет разработчику приложения возможность использовать стандартные диалоговые окна Windows.
Окно подтверждения
Некоторые действия приложения требуют повторного подтверждения пользователя. Например, пользователь приложения mygui может случайно нажать кнопку Очистить, предназначенную для очистки осей. Следует вывести диалоговое окно, в котором пользователь укажет, действительно ли требуется очистить оси.
Диалоговое окно подтверждения создается функцией questdlg, которая в самом простом случае имеет два входных параметра - строки с текстом внутри диалогового окна и заголовком окна. Окно, создаваемое таким образом, имеет три кнопки - Yes, No и Cancel. Выбор пользователя возвращается в строковом выходном аргументе функции questdlg, его значение совпадает с надписью на кнопке.
Усовершенствуйте обработку нажатия кнопки Очистить так, чтобы соответствующие операторы выполнялись только в том случае, если пользователь нажал кнопку Yes в появляющемся диалоговом окне с текстом Очистить оси? и заголовком mygui. Используйте условный оператор if и функцию strcmp для сравнения выходного аргумента questdlg со строкой Yes (листинг 6).
Листинг 10. Программирование диалогового окна запроса
button = questdlg('Очистить оси?','mygui');
if strcmp(button, 'Yes')
% здесь размещаются все операторы,
% обрабатывающие нажатие на кнопку Очистить
end
Нажатие на кнопку Очистить приводит к появлению диалогового окна, изображенного на рис. 13. Выбор пользователя определяет дальнейшие действия приложения mygui.
Рис. 13. Диалоговое окно подтверждения
Функция questdlg позволяет управлять видом диалогового окна. Строка с названием кнопки, переданная в третьем дополнительном аргументе, определяет кнопку окна, которая может быть нажата пользователем при помощи клавиши <Enter>. Например, вызов
Button = questdlg('Очистить оси?','mygui', 'Yes');
предполагает, что в диалоговом окне нажатие клавиши <Enter> эквивалентно выбору кнопки Yes.
Число кнопок и надписи на них определяются создателем приложения, например, следующая форма обращения к функции questdlg
Button = questdlg('Очистить оси?', 'mygui','Да','Нет','Нет')
приводит к появлению диалогового окна с текстом Очистить оси?, заголовком mygui и двумя кнопками Да и Нет, причем нажатие <Enter> заменяет выбор Нет.
Окно с сообщением об ошибке
Некоторые действия пользователя, в частности открытие файла с данными в неизвестном формате, могут привести к ошибке в работе приложения. Такие исключительные ситуации следует предусматривать при написании алгоритма приложения и сопровождать их сообщением об ошибке. Лучше всего выводить сообщение в диалоговое окно, которое автоматически размещается поверх всех остальных окон и требует нажатия кнопки ОК для продолжения работы.
Функция errordlg предназначена для создания диалогового окна с сообщением об ошибке. Входными аргументами errordlg являются строки с текстом и заголовком окна.
Дополните построение графика данных проверкой на размерность и тип содержимого массива Mas при помощи функций size, ndims и isnumeric и выведите сообщение в случае несоответствующего формата данных. Заключите считывание и визуализацию данных в блок try...catch end для предотвращения ошибки при обращении к load (листинг 7). При работе в MatLab 6.x следует записать указатель на линию в структуру handles.line и сохранить, используя функцию guidata.
Листинг 11. Обработка исключительных ситуаций с сообщением об ошибке
try