Có thể tạo đối tượng trong GUI có vị trí tôi có thể xác định bởi vị trí con trỏ (kéo khi được nhấp) bằng cách đặt thuộc tính 'Vị trí' cho bất kỳ vị trí con trỏ nào không? Tôi nên sử dụng chức năng nào?Kéo và thả trong GUI
Trả lời
Bạn có thể sử dụng chức năng SELECTMOVERESIZE để bật di chuyển và thay đổi kích thước cho đối tượng GUI của mình. Sau đó, bạn có thể chỉ cần nhấp và kéo đối tượng bằng chuột. Nó cũng đơn giản như thế này:
set(hObject,'ButtonDownFcn','selectmoveresize');
Có gì không đơn giản như vậy là nếu đối tượng GUI của bạn là một uicontrol object, trong trường hợp này bạn sẽ phải vô hiệu hóa các đối tượng bằng cách thiết lập 'Enable'
property-'off'
hoặc 'inactive'
để có 'ButtonDownFcn'
thực thi hàm thay vì hàm 'Callback'
. Điều này đúng ngay cả khi bạn chưa định nghĩa một cuộc gọi lại cho đối tượng.
Bạn cũng có thể cần phải thêm phương tiện vào GUI để bật và di chuyển kích thước đối tượng và tắt, có thể là nút phụ hoặc mục menu bạn có thể chọn. Để hiển thị cách bạn có thể thực hiện điều này bằng nút ấn, đây là ví dụ đơn giản tạo hình có hộp văn bản có thể chỉnh sửa và nút nhấn bật và tắt khả năng di chuyển và đổi kích thước hộp văn bản có thể chỉnh sửa:
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
Lưu ý: mặc dù tài liệu liệt kê 'Selected'
property là chỉ đọc, tôi có thể sửa đổi nó mà không gặp sự cố. Nó phải là một lỗi đánh máy trong tài liệu.
Bạn có thể tạo một trục vô hình trong GUI của mình và vẽ đồ thị bất kỳ đối tượng nào bạn muốn trong đó. Sau đó, bạn có thể sử dụng DRAGGABLE từ Trao đổi tệp để cho phép kéo đối tượng khắp nơi.
Cảm ơn bạn đã phản hồi nhanh! Bạn có thể cho tôi biết nơi mà các chức năng có được các đối số đầu vào của nó từ? – straits
@Adam: Chức năng nào? SELECTMOVERESIZE không nhận bất kỳ đối số nào làm đầu vào. – gnovice
Chức năng button_callback dùng trong hSource và eventData. – straits