Большинство свойств объектов можно устанавливать программно прямо в ходе работы приложения. Усовершенствуйте приложениеmygui следующим образом. Пусть при запуске доступной является только кнопка Построить, при нажатии на кнопку Построить выводится график и она становится недоступной, зато пользователь может нажать кнопку Очистить для очистки осей, и наоборот.
Решение поставленной задачи требует привлечения свойства Enable. Свойство Enable объекта отвечает за возможность доступа к нему пользователем, значение on разрешает доступ, a off, соответственно, запрещает. Установка значений свойствам объектов в программе производится при помощи функции set.
Функция set вызывается с тремя входными аргументами - указателем на объект, названием свойства и его значением, последние два аргумента заключаются в апострофы. Свойства одного объекта должны изменяться в блоке операторов обработки события Сallback другого объекта. Следовательно, должна иметься возможность доступа к указателю на любой существующий объект. Аргументы hObject и handlesподфункций, которые обрабатывают события элементов управления, содержат требуемые указатели. В hObject хранится указатель на тот объект, событие которого обрабатывается в данный момент, a handles является структурой указателей. Поля структуры совпадают со значениями свойств Tag существующих элементов интерфейса. Например, handles.btnPlot является указателем на кнопку Построить с именемbtnPlot. Доступ к Очистить должен быть запрещен в начале работы приложения, пока пользователь не нажмет Построить Установите в редакторе свойств для кнопки Очистить свойство Enable в off, используйте кнопку со стрелкой в строке со значением свойства. Остальные изменения значения Enable кнопок должны происходить в ходе работы приложения. Для разрешения и запрещения доступа к кнопкам нужно внести дополнения в обработку их событий Callback.
В подфункцию обработки события Callback кнопки Построить добавьте при помощи редактора вызовов:
- установку свойства Enable кнопки Очистить в значение on (после вывода графика следует разрешить доступ к Очистить);
- установку свойства Enable кнопки Построить в значение off (после вывода графика следует запретить доступ к Построить);
Аналогичные изменения произведите в обработке события Callback кнопки Очистить, а именно:
- установку свойства Enable кнопки Построить в значение on (после очистки осей следует разрешить доступ к Построить);
- установку свойства Enable кнопки Очистить в значение off (после очистки осей следует запретить доступ к кнопке);
Подфункции btnPlot_Callback и btnClear_Callback должны быть запрограммированы так, как показано на листинге 4.
Листинг 4. Обработка событий Callback кнопок btnPlot и btnClear
function btnPlot_Callback(hObject, eventdata, handles)
% Построение графика функции
x=[-2:0.2:2];
y=exp(-x.^2);
plot(x,y)
% Кнопка Построить должна стать недоступной после вывода графика
set(hObject, 'Enable', 'off')
% Кнопка Очистить должна стать доступной
set(handles.btnClear, 'Enable', 'on')
function btnClear_Callback(hObject, eventdata, handles)
cla % очистка осей
% Кнопка Очистить должна стать недоступной после очистки осей
set(hObject, 'Enable', 'off')
% Кнопка Построить должна стать доступной
set(handles.btnPlot, 'Enable', 'on')
Сохраните изменения в редакторе М-файлов. Запустите приложение mygui и убедитесь, что всегда доступной является только одна из кнопок Построить или Очистить, что является хорошей подсказкой для пользователя о возможных действиях. Закройте окно приложения и редактор приложений.