Вы можете использовать функцию SELECTMOVERESIZE , чтобы включить перемещение и изменение размера объекта GUI. Затем вы можете просто нажать и перетащить объект с помощью мыши. Это так просто:
set(hObject,'ButtonDownFcn','selectmoveresize');
Что не так просто, если ваш объект GUI является объектом uicontrol , и в этом случае вам придется отключить объект, установив для свойства 'Enable'
значение 'off'
или 'inactive'
для выполнения функции 'ButtonDownFcn'
вместо функции 'Callback'
. Это верно, даже если вы не определили обратный вызов для объекта.
Возможно, вам также понадобится добавить средства в ваш графический интерфейс для включения и выключения перемещения и изменения размера объекта, возможно, дополнительную кнопку или пункт меню, который вы можете выбрать. Чтобы показать, как вы можете сделать это с помощью кнопки, вот простой пример, который создает фигуру с редактируемым текстовым полем и кнопкой, которая включает и отключает возможность перемещения и изменения размера редактируемого текстового поля:
function GUI_example
hFigure = figure('Position',[100 100 200 200],... %# Create a figure
'MenuBar','none',...
'ToolBar','none');
hEdit = uicontrol('Style','edit',... %# Create a multi-line
'Parent',hFigure,... %# editable text box
'Position',[10 30 180 160],...
'Max',2,...
'String',{'(type here)'});
hButton = uicontrol('Style','pushbutton',... %# Create a push button
'Parent',hFigure,...
'Position',[50 5 100 20],...
'String','Turn moving on',...
'Callback',@button_callback);
function button_callback(hSource,eventData) %# Nested button callback
if strcmp(get(hSource,'String'),'Turn moving on')
set(hSource,'String','Turn moving off'); %# Change button text
set(hEdit,'Enable','inactive',... %# Disable the callback
'ButtonDownFcn','selectmoveresize',... %# Turn on moving, etc.
'Selected','on'); %# Display as selected
else
set(hSource,'String','Turn moving on'); %# Change button text
set(hEdit,'Enable','on',... %# Re-enable the callback
'ButtonDownFcn','',... %# Turn off moving, etc.
'Selected','off'); %# Display as unselected
end
end
end
Примечание: , хотя в документации перечислено свойство 'Selected'
только для чтения, я смог изменить его без проблем. Это должно быть опечатка в документации.