How can I have a dialog box or user prompt with a time-out period?

48 vues (au cours des 30 derniers jours)
Can I get code that provides time-out functionality for dialog boxes/input functions such as INPUTDLG, QUESTDLG, INPUT?
This function or dialog that times-out after a given period and returns default answers.

Réponse acceptée

MathWorks Support Team
MathWorks Support Team le 15 Fév 2013
Currently, there is no built-in command in MATLAB that includes a time-out period for the dialog/input prompt.
As a workaround, you can use the TIMER function to close the dialog at time-out. An example is provided below.
function varargout = timeoutDlg(dlg, delay, varargin)
% Dialog function with timeout property
% dlg is a handle to the dialog function to be called
% delay is the length of the delay in seconds
% other input arguments as required by the dialog
% EXAMPLE FUNCTION-CALL
% To display an input dialog box (REFER MATLAB HELP DOC) with a
% timeout = 6 second say, the function call would be:
%
% [matrix_size_value, colormap_string] = timeoutdlg(@inputdlg, 6, ...
% {'Enter matrix size:','Enter colormap name:'}, ...
% 'Input for peaks function', 1, {'20','hsv'})
% Setup a timer to close the dialog in a moment
f1 = findall(0, 'Type', 'figures');
t = timer('TimerFcn', {@closeit f1}, 'StartDelay', delay);
start(t);
% Call the dialog
retvals = dlg(varargin{:});
if numel(retvals) == nargout
varargout = retvals(:);
else
varargout = cell(1, nargout);
end
% Delete the timer
if strcmp(t.Running, 'on')
stop(t);
end
delete(t);
function closeit(src, event, f1)
disp('Time out!');
f2 = findall(0, 'Type', 'figure');
fnew = setdiff(f2, f1);
if ishandle(fnew);
close(fnew);
end
  1 commentaire
Kouichi C. Nakamura
Kouichi C. Nakamura le 8 Mar 2017
Modifié(e) : Kouichi C. Nakamura le 9 Mar 2017
Thank you. It worked with brilliantly with questdlg() as well.
function button = questdlgtimeout(delay, varargin)
% questdlg function with timeout property
%
% Based on timeoutDlg by MathWorks Support Team
% https://uk.mathworks.com/matlabcentral/answers/96229-how-can-i-have-a-dialog-box-or-user-prompt-with-a-time-out-period
%
% button = questdlgtimeout(delay,'qstring')
% button = questdlgtimeout(delay,qstring,title)
% button = questdlgtimeout(delay,qstring,title,default)
% button = questdlgtimeout(delay,qstring,title,str1,str2,default)
% button = questdlgtimeout(delay,qstring,title,str1,str2,str3,default)
% button = questdlgtimeout(delay,qstring,title, ..., options)
%
% INPUT ARGUMENTS
% delay Duration in second during withich the dialog is maintained
%
% var1,var2,...
% Accepts input arguments for builtin questdlg. See
% documentation of questdlg
%
% OUTPUT ARGUMENTS
% button The dialog has three default buttons, Yes, No, and Cancel.
% If the user presses one of these three buttons, button is
% set to the name of the button pressed. If the user presses
% the close button on the dialog without making a choice,
% button returns as an empty character vector (''). If the
% user presses the Return key, button returns with a value of
% 'Yes'.
%
% If you provide default or options, button will be the
% default value.
%
%
% See also
% questdlg, timer, scr20170308_154424_questdlgtimeout
%
% Written by Kouichi C. Nakamura Ph.D.
% MRC Brain Network Dynamics Unit
% University of Oxford
% 08-Mar-2017 16:06:58
f1 = findall(0, 'Type', 'figures');
t = timer('TimerFcn', {@closeit f1}, 'StartDelay', delay);
start(t);
dlg = @questdlg;
% Call the dialog
button = dlg(varargin{:});
if isempty(button)
if length(varargin) >= 3
if isstruct(varargin{end})
button = varargin{end}.Default;
elseif ischar(varargin{end})
button = varargin{end};
else
error('unexpected syntax')
end
else % no default provided
% leave button empty
end
end
% Delete the timer
if strcmp(t.Running, 'on')
stop(t);
end
delete(t);
function closeit(src, event, f1)
disp('Time out');
f2 = findall(0, 'Type', 'figure');
fnew = setdiff(f2, f1);
if ishandle(fnew)
close(fnew);
end

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Dialog Boxes dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by