または、グラフィックス オブジェクトのハンドルを格納し、それらを使用して他の関数で値を取得することもできます。
例えば:
function testcode
% Initialize sample GUI
h.fig = figure( 'MenuBar', 'none', 'ToolBar', 'none');
h.sld(1) = uicontrol( ...
'Parent', h.fig, ...
'Style', 'slider',...
'Min', 0, 'Max', 255, 'Value', 0, ...
'Units', 'Normalized', 'Position', [0.1 0.65 0.4 0.1], ...
'Tag', 'Red' ...
);
h.sld(2) = uicontrol( ...
'Parent', h.fig, ...
'Style', 'slider', ...
'Min', 0, 'Max', 255, 'Value', 0, ...
'Units', 'Normalized', 'Position', [0.1 0.45 0.4 0.1], ...
'Tag', 'Green' ...
);
h.sld(3) = uicontrol( ...
'Parent', h.fig, ...
'Style', 'slider', ...
'Min', 0, 'Max', 255, 'Value', 255, ...
'Units', 'Normalized', 'Position', [0.1 0.25 0.4 0.1], ...
'Tag', 'Blue' ...
);
% Use an axes object as a color display box
% Get starting RGB values for the color display, normalized so 0 <= x <= 1
startRGB = [get(h.sld(1), 'Value'), get(h.sld(2), 'Value'), get(h.sld(3), 'Value')]/255;
h.ax = axes( ...
'Parent', h.fig, ...
'Units', 'Normalized', 'Position', [0.6 0.36 0.3 0.3], ...
'XTickLabels', '', 'YTickLabels', '', ...
'Color', startRGB ...
);
% Need to set callback after all our elements are initialized
nsliders = length(h.sld);
set(h.sld, {'Callback'}, repmat({{@slidercallback, h}}, nsliders, 1));
end
function slidercallback(~, ~, h)
% Update background color of our axes object every time the slider is updated
RGB = [get(h.sld(1), 'Value'), get(h.sld(2), 'Value'), get(h.sld(3), 'Value')]/255;
set(h.ax, 'Color', RGB');
end
コールバックが実行されると、デフォルトで、呼び出しオブジェクトとイベント データの構造の 2 つの入力が渡されます。コールバックのドキュメントで説明されているように、すべてを cell 配列にラップすることで、追加の入力をコールバックに渡すことができます。注意すべきことの 1 つは、コールバックに渡される変数の値は、コールバックを定義したときに存在する値であるということです。言い換えれば、スライダーの作成と同時にスライダーのコールバックを設定すると、Red のコールバックが起動h
されたときは Figure へのハンドルのみが含まれ、Green のコールバックが起動されたときは Figureh
へのハンドルが含まれます。赤のスライダーなどに。
このため、すべてのグラフィックス オブジェクトを初期化すると、コールバックが定義されたことがわかります。中かっこを使用して複数のオブジェクトのプロパティを設定する方法については、MATLAB の のドキュメンテーションで説明されていset
ます。repmat
セル配列のサイズがスライダー オブジェクトの配列と同じサイズになるように使用します。