喜欢标题中的问题说。我想要一个文本字段,应该可以像浏览器中的文本一样选择,但不能编辑。
我尝试将Enable属性设置为off和inactive。我也尝试使用文本字段和编辑文本和静态文本框。编辑启用设置为开启的文本框允许我选择它,但不能复制它。我不知道是否存在操作系统特定问题(Ubuntu 16.04),因为matlab似乎想在Linux中使用其他关键快捷方式进行复制粘贴。有趣的是,当我右键单击可选文本时,没有任何反应。
它应该在GUIDE中工作,所以我想在我错过的物业经理中只有一些设置。
答案 0 :(得分:1)
有一种方法可以实现这一目标,但(i)不是直接在GUIDE中,(ii)甚至不是在纯MATLAB中。此解决方案依赖于MATLAB edit
框的未记录的底层java属性。
为了能够访问这些属性,首先需要从文件交换中下载finjobj
实用程序。
有了这个,下面的代码在MATLAB R2015a上运行正常,您可能需要调整或调整其他MATLAB版本。
demo_editbox_interception.m
的代码:
function h = demo_editbox_interception
% create minimalistic text box
h.fig = figure('Toolbar','none','Menubar','none') ;
h.ht = uicontrol('style','edit','Position',[20 20 300 30],...
'String','This is a multi-word test string');
% find the handle of the underlying java object
h.jt = findjobj(h.ht) ;
% disable edition of the java text box
h.jt.Editable = 0 ;
% => This leaves you with a text box where you can select all or part of
% the text present, but you cannot modify the text.
%% Now add copy functionality:
% choose which functionality you want from the options below:
% set(h.ht,'ButtonDownFcn',@copy_full_string)
set(h.ht,'ButtonDownFcn',{@copy_selection,h.jt} )
function str = copy_full_string(hobj,~)
% this function will copy the ENTIRE content of the edit box into the
% clipboard. It does NOT rely on the undocumented java properties
str = get(hobj,'String') ;
clipboard('copy',str)
disp(['String: "' str '" copied into the clipboard.'] )
function str = copy_selection(hobj,evt,jt)
% this function will copy the SELECTED content of the edit box into the
% clipboard. It DOES rely on the undocumented java properties
str = jt.SelectedText ;
clipboard('copy',str)
disp(['String: "' str '" copied into the clipboard.'] )
你可以看到它有效。用鼠标左键选择文本,然后用右键激活回调(副本):