MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем

Приложения с GUI и дескрипторная графика

Базовые графические объекты.

Объект Text

Пример 4. Выделение и удаление текстового объекта.

В этом примере демонстрируется выделение одного или нескольких текстовых объектов при помощи щелчка мыши по ним (и снятие выделения повторным щелчком мыши) и их удаление после нажатия на клавишу Delete. Основная функция называется deltext, она содержит две подфункции: Select и KeyPress, предназначенные, соответственно, для обработки щелчка мышью по тексту и нажатия клавиши. Следует подчеркнуть, что текстовый объект не реагирует на такое событие, как нажатие клавиши. Это делает графическое окно, поэтому функция KeyPress обрабатывает событие KeyPressFcn графического окна, которому по иерархии принадлежат оси, содержащие текстовые объекты.

В основной функции deltext создается графическое окно и его свойству KeyPressFcn присваивается указатель на подфункцию KeyPress. Далее создаются оси и четыре текстовых объекта со случайными координатами от 0 до 1. При создании каждого текстового объекта с его событием ButtonDownFcn связывается подфункция Select для того, чтобы текстовый объект можно было выделить щелчком мыши, или снять выделение.

В подфункции Select проверяется, выделен ли объект, если да, то выделение снимается и наоборот. В подфункции KeyPress проверяется, какая клавиша была нажата. Второй входной аргумент evt подфункции KeyPress является структурой с полями:

Character - отображаемый на экране символ в результате нажатия на клавишу (он может зависеть от того, какая из клавиш Control, Alt или Shift была одновременно нажата);
Modifier - информация о том, была ли нажата одна из клавиш Control, Alt или Shift, или одновременно несколько из них;
Key - название клавиши (символ в нижней раскладке).

Значение поля Key структуры evt сравнивается с 'delete'. Если была нажата клавиша delete, то ищутся все выделенные текстовые потомки окна, т.е. те, свойство Type которых принимает значение text, а свойство Selected - значение 'on'. Указатели на найденные объекты заносятся в вектор h, эти объекты удаляются при помощи функции delete.

function deltext
%  создание графического окна и связывание события KeyPressFcn с подфункцией KeyPress
figure('KeyPressFcn',@KeyPress)
% создание осей
axes
% вывод четырех текстовых объектов и связывание с их событием ButtonDownFcn 
% подфункции Select
text('Position', [rand(1) rand(1)], 'String', 'AAA','FontSize',15,...
    'ButtonDownFcn', @Select)
text('Position', [rand(1) rand(1)], 'String', 'BBB','FontSize',15,...
    'ButtonDownFcn', @Select)
text('Position', [rand(1) rand(1)], 'String', 'CCC','FontSize',15,...
    'ButtonDownFcn', @Select)
text('Position', [rand(1) rand(1)], 'String', 'DDD','FontSize',15,...
    'ButtonDownFcn', @Select)


function Select(src,evt)
% обработка события ButtonDownFcn (щелчка мышью по текстовому объекту)

% проверка, выделен или нет текстовый объект
if isequal(get(src,'Selected'),'off')
    % текстовый объект не выделен - выделяем его
    set(src,'Selected','on')
else
    % текстовый объект выделен - снимаем с него выделение
    set(src,'Selected','off')
end
    
function KeyPress(src,evt)
% обработка нажатия клавиши

% проверка, была ли нажата клавиша delete
if isequal(evt.Key,'delete')
    % ищем все выделенные текстовые объекты, записываем указатели на них в вектор h
    h=findall(src,'Type','text','Selected','on');
    % удаляем найденные объекты
    delete(h)
end

Поиск по сайту:

Система Orphus

Яндекс.Метрика