Giving 'Static Text' a callback

18 次查看(过去 30 天)
I would like to give a 'static text' in a gui a callback. i.e i would like to be able to click on the static text box, and have that complete a command. Ideally, if there is a way i would like to make a callback for a right click only. Not sure if this is possible but any feedback helps.

采纳的回答

Walter Roberson
Walter Roberson 2013-5-29
In some ways similar to Andrew's suggestion:
You can set HitTest off for the static text box, and then you can define a ButtonDownFcn for the figure (or uipanel as relevant) that detects whether it is over the text and if so does what you want.
Alternately, perhaps defining a uicontext menu for the uicontrol would be suitable for your situation.
  2 个评论
Sean de Wolski
Sean de Wolski 2013-5-29
This all seems like overkill (and dangerous, what if the text is invisible right now?>, just use the buttondownfcn
Walter Roberson
Walter Roberson 2013-5-29
Note that for uicontrol style text, the buttondownfcn callback will only be invoked for right click (I think it is... control-click on a Mac trackpad.)

请先登录,再进行评论。

更多回答(2 个)

Andrew Reibold
Andrew Reibold 2013-5-29
Ok, so what you need to do is make a button instead of a static text box! You can still keep a string of text in it and it can look exactly like a static text box too except maybe it will have a slightly different outline!
There are two properties which can be used in conjunction to accomplish a right click response.
One is the button's 'ButtonDownFcn' callback function. This callback function executes when pressing a mouse button on or near a UICONTROL object -- including when pressing the right mouse button.
The other property is the figure's 'SelectionType' property. This property indicates which kind of click was registered in the figure window -- including clicks on controls within the figure.
Putting these two together, you can define a 'ButtonDownFcn' callback for a push button which checks the figure's 'SelectionType' property to detect a right-click. An example is shown below. (In that example, the ANCESTOR function is used to get the figure's handle. If this is being done in a GUIDE-created GUI, this is unnecessary as the 'handles' structure already provides access to the figure's handle.)
function test
uicontrol('Style', 'pushbutton', ...
'ButtonDownFcn', @myCallback);
end
function myCallback(src, evt)
figHandle = ancestor(src, 'figure');
clickType = get(figHandle, 'SelectionType');
if strcmp(clickType, 'alt')
disp('right click action goes here!');
end
end
  2 个评论
Sean de Wolski
Sean de Wolski 2013-5-29
This should work with the uicontrol being a textbox too!
etc.
uicontrol('Style', 'text', ...
etc
Walter Roberson
Walter Roberson 2013-5-29
To get rid of the button look itself, you can define its CData property -- possibly even to a rendered version of the text you want to show.

请先登录,再进行评论。


ryan
ryan 2013-5-30
@Walter How would you go about changing the CData property?
the only thing with the uicontrol: where do i define the object name (i.e. handles.example)
I have tried this:
set(gca, 'buttondownfcn', @Example_ButtonDownFcn);
and it works. But I am just having trouble with switching out gca with a specified object.

类别

Help CenterFile Exchange 中查找有关 Migrate GUIDE Apps 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by