⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inputdlg.m

📁 sfrmat is a Matlab function that provides a spatial frequency response* (SFR) from a digital image f
💻 M
字号:
function Answer=inputdlg(Prompt, Title, NumLines, DefAns,Resize)%INPUTDLG Input dialog box.%  Answer = inputdlg(Prompt) creates a modal dialog box that returns%  user input for multiple prompts in the cell array Answer.  Prompt%  is a cell array containing the Prompt strings.%%  Answer = inputdlg(Prompt,Title) specifies the Title for the dialog.%%  Answer = inputdlg(Prompt,Title,LineNo) specifies the number of lines%  for each answer in LineNo.  LineNo may be a constant value or a %  column vector having one element per Prompt that specifies how many%  lines per input.  LineNo may also be a matrix where the first%  column specifies how many rows for the input field and the second%  column specifies how many columns wide the input field should be.%%  Answer = inputdlg(Prompt,Title,LineNo,DefAns) specifies the default%  answer to display for each Prompt.  DefAns must contain the same%  number of elements as Prompt and must be a cell array.%%  Answer = inputdlg(Prompt,Title,LineNo,DefAns,AddOpts) specifies whether%  the dialog may be resized or not.  Acceptable values for AddOpts are %  'on' or 'off'.  If the dialog can be resized, then the dialog is%  not modal.  %%  AddOpts may also be a data structure with fields Resize,%  WindowStyle and Interpreter.  Resize may be 'on' or 'off'.%  WindowStyle may be 'modal' or 'normal' and Interpreter may be%  'tex' or 'none'.  The interpreter applies to the prompt strings.%%  Example:%  prompt={'Enter the matrix size for x^2:','Enter the colormap name:'};%  def={'20','hsv'};%  dlgTitle='Input for Peaks function';%  lineNo=1;%  answer=inputdlg(prompt,dlgTitle,lineNo,def);%%  or%%  AddOpts.Resize='on';%  AddOpts.WindowStyle='normal';%  AddOpts.Interpreter='tex';%  answer=inputdlg(prompt,dlgTitle,lineNo,def,AddOpts);%%  See also TEXTWRAP, QUESTDLG.%  Loren Dean   May 24, 1995.%  Copyright (c) 1984-98 by The MathWorks, Inc.%  $Revision: 1.48 $%%%%%%%%%%%%%%%%%%%%%%%% General Info. %%%%%%%%%%%%%%%%%%%%%%%%Black      =[0       0        0      ]/255;LightGray  =[192     192      192    ]/255;LightGray2 =[160     160      164    ]/255;MediumGray =[128     128      128    ]/255;White      =[255     255      255    ]/255;%%%%%%%%%%%%%%%%%%%%%%% Nargin Check %%%%%%%%%%%%%%%%%%%%%%%if nargin == 1 & nargout == 0,  if strcmp(Prompt,'InputDlgResizeCB'),    LocalResizeFcn(gcbf)    return  endendif nargout~=1,error('Wrong number of output arguments for INPUTDLG');endif nargin<1,error('Too few arguments for INPUTDLG');endif nargin==1,  Title=' ';endif nargin<=2, NumLines=1;endif ~iscell(Prompt),  Prompt={Prompt};endNumQuest=prod(size(Prompt));    if nargin<=3,   DefAns=cell(NumQuest,1);  for lp=1:NumQuest, DefAns{lp}=''; endendWindowStyle='modal';Interpreter='none';if nargin<=4,  Resize = 'off';endif nargin==5 & isstruct(Resize),  Interpreter=Resize.Interpreter;  WindowStyle=Resize.WindowStyle;  Resize=Resize.Resize;endif strcmp(Resize,'on'),  WindowStyle='normal';endif nargin>5,error('Too many input arguments');end% Backwards Compatibilityif isstr(NumLines),  warning(['Please see the INPUTDLG help for correct input syntax.' 10 ...           '         OKCallback no longer supported.' ]);  NumLines=1;end[rw,cl]=size(NumLines);OneVect = ones(NumQuest,1);if (rw == 1 & cl == 2)  NumLines=NumLines(OneVect,:);elseif (rw == 1 & cl == 1)  NumLines=NumLines(OneVect);elseif (rw == 1 & cl == NumQuest)  NumLines = NumLines'elseif rw ~= NumQuest | cl > 2,  error('NumLines size is incorrect.')endif ~iscell(DefAns),  error('Default Answer must be a cell array in INPUTDLG.');  end%%%%%%%%%%%%%%%%%%%%%%%%%% Create InputFig %%%%%%%%%%%%%%%%%%%%%%%%%%FigWidth=300;FigHeight=100;FigPos(3:4)=[FigWidth FigHeight];FigColor=get(0,'Defaultuicontrolbackgroundcolor');InputFig=dialog(                               ...               'Visible'         ,'off'      , ...               'Name'            ,Title      , ...               'Pointer'         ,'arrow'    , ...               'Units'           ,'points'   , ...               'UserData'        ,''         , ...               'Tag'             ,Title      , ...               'HandleVisibility','on'       , ...               'Color'           ,FigColor   , ...               'NextPlot'        ,'add'      , ...               'WindowStyle'     ,WindowStyle, ...               'Resize'          ,Resize       ...               );  %%%%%%%%%%%%%%%%%%%%%%%% Set Positions %%%%%%%%%%%%%%%%%%%%%%%%DefOffset=5;SmallOffset=2;DefBtnWidth=50;BtnHeight=20;BtnYOffset=DefOffset;BtnFontSize=get(0,'FactoryUIControlFontSize');BtnWidth=DefBtnWidth;TxtBackClr=FigColor;TxtForeClr=Black;TextInfo.Units              ='points'   ;   TextInfo.FontSize           =BtnFontSize;TextInfo.HorizontalAlignment='left'     ;TextInfo.HandleVisibility   ='callback' ;StInfo=TextInfo;StInfo.Style              ='text'     ;StInfo.BackgroundColor    =TxtBackClr ;StInfo.ForegroundColor    =TxtForeClr ;TextInfo.VerticalAlignment='bottom';EdInfo=StInfo;EdInfo.Style='edit';EdInfo.BackgroundColor=White;BtnInfo=StInfo;BtnInfo.Style='pushbutton';BtnInfo.HorizontalAlignment='center';% Determine # of lines for all PromptsExtControl=uicontrol(StInfo, ...                     'String'   ,''         , ...                         'Position' ,[DefOffset                  DefOffset  ...                                 0.96*(FigWidth-2*DefOffset) BtnHeight  ...                                ]            , ...                     'Visible'  ,'off'         ...                     );                     WrapQuest=cell(NumQuest,1);QuestPos=zeros(NumQuest,4);for ExtLp=1:NumQuest,  if size(NumLines,2)==2    [WrapQuest{ExtLp},QuestPos(ExtLp,1:4)]= ...        textwrap(ExtControl,Prompt(ExtLp),NumLines(ExtLp,2));  else,    [WrapQuest{ExtLp},QuestPos(ExtLp,1:4)]= ...        textwrap(ExtControl,Prompt(ExtLp),80);  endend % for ExtLpdelete(ExtControl);QuestHeight=QuestPos(:,4);TxtHeight=QuestHeight(1)/size(WrapQuest{1,1},1);EditHeight=TxtHeight*NumLines(:,1);EditHeight(NumLines(:,1)==1)=EditHeight(NumLines(:,1)==1)+4;FigHeight=(NumQuest+2)*DefOffset    + ...          BtnHeight+sum(EditHeight) + ...          sum(QuestHeight);TxtXOffset=DefOffset;TxtWidth=FigWidth-2*DefOffset;TxtForeClr=Black;TxtBackClr=get(InputFig,'Color');QuestYOffset=zeros(NumQuest,1);EditYOffset=zeros(NumQuest,1);QuestYOffset(1)=FigHeight-DefOffset-QuestHeight(1);EditYOffset(1)=QuestYOffset(1)-EditHeight(1);% -SmallOffset;for YOffLp=2:NumQuest,  QuestYOffset(YOffLp)=EditYOffset(YOffLp-1)-QuestHeight(YOffLp)-DefOffset;  EditYOffset(YOffLp)=QuestYOffset(YOffLp)-EditHeight(YOffLp); %-SmallOffset;end % for YOffLpQuestHandle=[];EditHandle=[];FigWidth =1;AxesHandle=axes('Parent',InputFig,'Position',[0 0 1 1],'Visible','off');for lp=1:NumQuest,  QuestTag=['Prompt' num2str(lp)];  EditTag=['Edit' num2str(lp)];  if ~ischar(DefAns{lp}),    delete(InputFig);    error('Default answers must be strings in INPUTDLG.');  end  QuestHandle(lp)=text('Parent',AxesHandle, ...                        TextInfo     , ...                        'Position'   ,[ TxtXOffset QuestYOffset(lp)], ...                        'String'     ,WrapQuest{lp}                 , ...                        'Interpreter',Interpreter                   , ...                        'Tag'        ,QuestTag                        ...                        );%  QuestHandle(lp)=uicontrol(InputFig  ,                         ...%                           StInfo     , ...%                           'Max'      ,size(Prompt{lp},1), ...%                           'Position' ,[ TxtXOffset QuestYOffset(lp) ...%                                         TxtWidth   QuestHeight(lp)  ...%                                       ]                      , ...%                           'String'   ,WrapQuest{lp}       , ...%                           'Tag'      ,QuestTag                 ...%                           );  EditHandle(lp)=uicontrol(InputFig   ,EdInfo     , ...                          'Max'       ,NumLines(lp,1)       , ...                          'Position'  ,[ TxtXOffset EditYOffset(lp) ...                                         TxtWidth   EditHeight(lp)  ...                                       ]                    , ...                          'String'    ,DefAns{lp}           , ...                          'Tag'       ,QuestTag               ...                          );  if size(NumLines,2) == 2,    set(EditHandle(lp),'String',char(ones(1,NumLines(lp,2))*'x'));    Extent = get(EditHandle(lp),'Extent');    NewPos = [TxtXOffset EditYOffset(lp)  Extent(3) EditHeight(lp) ];%    NewPos1= [TxtXOffset QuestYOffset(lp) Extent(3) QuestHeight(lp)];    NewPos1= [TxtXOffset QuestYOffset(lp)];    set(EditHandle(lp),'Position',NewPos,'String',DefAns{lp})    set(QuestHandle(lp),'Position',NewPos1)        FigWidth=max(FigWidth,Extent(3)+2*DefOffset);  else    FigWidth=max(175,TxtWidth+2*DefOffset);  endend % for lpFigPos=get(InputFig,'Position');Temp=get(0,'Units');set(0,'Units','points');ScreenSize=get(0,'ScreenSize');set(0,'Units',Temp);FigWidth=max(FigWidth,2*(BtnWidth+DefOffset)+DefOffset);FigPos(1)=(ScreenSize(3)-FigWidth)/2;FigPos(2)=(ScreenSize(4)-FigHeight)/2;FigPos(3)=FigWidth;FigPos(4)=FigHeight;set(InputFig,'Position',FigPos);CBString='set(gcbf,''UserData'',''Cancel'');uiresume';CancelHandle=uicontrol(InputFig   ,              ...                      BtnInfo     , ...                      'Position'  ,[ DefOffset DefOffset ...                                    BtnWidth  BtnHeight  ...                                   ]           , ...                      'String'    ,'Cancel'    , ...                      'Callback'  ,CBString    , ...                      'Tag'       ,'Cancel'      ...                      );                                                                      CBString='set(gcbf,''UserData'',''OK'');uiresume';OKHandle=uicontrol(InputFig    ,              ...                   BtnInfo     , ...                   'Position'  ,[ FigWidth-BtnWidth-DefOffset DefOffset ...                                  BtnWidth                    BtnHeight ...                                ]           , ...                  'String'     ,'OK'        , ...                  'Callback'   ,CBString    , ...                  'Tag'        ,'OK'          ...                  );    Data.OKHandle = OKHandle;Data.CancelHandle = CancelHandle;Data.EditHandles = EditHandle;Data.QuestHandles = QuestHandle;Data.LineInfo = NumLines;Data.ButtonWidth = BtnWidth;Data.ButtonHeight = BtnHeight;Data.EditHeight = TxtHeight+4;Data.Offset = DefOffset;set(InputFig ,'Visible','on','UserData',Data);% This drawnow is a hack to work around a bugdrawnowset(findall(InputFig),'Units','normalized','HandleVisibility','callback');set(InputFig,'Units','points')uiwait(InputFig);TempHide=get(0,'ShowHiddenHandles');set(0,'ShowHiddenHandles','on');if any(get(0,'Children')==InputFig),  Answer={};  if strcmp(get(InputFig,'UserData'),'OK'),    Answer=cell(NumQuest,1);    for lp=1:NumQuest,      Answer(lp)=get(EditHandle(lp),{'String'});    end % for  end % if strcmp  delete(InputFig);else,  Answer={};end % if anyset(0,'ShowHiddenHandles',TempHide);function LocalResizeFcn(FigHandle)  Data=get(FigHandle,'UserData');    %Data.ButtonHandles = [ OKHandles CancelHandle];  %Data.EditHandles = EditHandle;  %Data.QuestHandles = QuestHandle;  %Data.LineInfo = NumLines;  %Data.ButtonWidth = BtnWidth;  %Data.ButtonHeight = BtnHeight;  %Data.EditHeight = TxtHeight;    set(findall(FigHandle),'Units','points');    FigPos = get(FigHandle,'Position');  FigWidth = FigPos(3); FigHeight = FigPos(4);    OKPos = [ FigWidth-Data.ButtonWidth-Data.Offset Data.Offset ...	    Data.ButtonWidth                      Data.ButtonHeight ];  CancelPos =[Data.Offset Data.Offset Data.ButtonWidth  Data.ButtonHeight];  set(Data.OKHandle,'Position',OKPos);  set(Data.CancelHandle,'Position',CancelPos);  % Determine the height of all question fields  YPos = sum(OKPos(1,[2 4]))+Data.Offset;  QuestPos = get(Data.QuestHandles,{'Extent'});  QuestPos = cat(1,QuestPos{:});  QuestPos(:,1) = Data.Offset;  RemainingFigHeight = FigHeight - YPos - sum(QuestPos(:,4)) - ...                       Data.Offset - size(Data.LineInfo,1)*Data.Offset;    Num1Liners = length(find(Data.LineInfo(:,1)==1));    RemainingFigHeight = RemainingFigHeight - ...      Num1Liners*Data.EditHeight;    Not1Liners = find(Data.LineInfo(:,1)~=1);  %Scale the 1 liner heights appropriately with remaining fig height  TotalLines = sum(Data.LineInfo(Not1Liners,1));    % Loop over each quest/text pair    for lp = 1:length(Data.QuestHandles),   %if size(Data.LineInfo,2) == 2,   %  CurString = get(Data.EditHandles(lp),'String');   %  set(Data.EditHandles(lp),'String', ...   %	 char(ones(1,Data.LineInfo(lp,2))*'x'));   %  Extent = get(Data.EditHandles(lp),'Extent');   %  set(Data.EditHandles(lp),'String',CurString)   %  if Extent(3) > FigWidth-2*Data.Offset,   %    Extent(3) = FigWidth -2*Data.Offset;   %  end   %else   %  Extent(3) = FigWidth -2*Data.Offset;   %end   CurPos = get(Data.EditHandles(lp),'Position');   NewPos = [Data.Offset YPos  CurPos(3) Data.EditHeight ];   if Data.LineInfo(lp,1) ~= 1,     NewPos(4) = RemainingFigPos*Data.NumLines(lp,1)/TotalLines;   end       set(Data.EditHandles(lp),'Position',NewPos)   YPos = sum(NewPos(1,[2 4]));   QuestPos(lp,2) = YPos;QuestPos(lp,3) = NewPos(3);   set(Data.QuestHandles(lp),'Position',QuestPos(lp,:));   YPos = sum(QuestPos(lp,[2 4]))+Data.Offset; end  if YPos>FigHeight - Data.Offset,   FigHeight = YPos+Data.Offset;   FigPos(4)=FigHeight;   set(FigHandle,'Position',FigPos);     drawnow end set(FigHandle,'ResizeFcn','inputdlg InputDlgResizeCB');  set(findall(FigHandle),'Units','normalized') 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -