Graphics | ![]() ![]() |
クローズ要求関数
MATLABは、つぎの場合に必ず、FigureのCloseRequestFcn
で定義されたコールバックルーチンを実行します。
close
コマンドを使用した場合Visible
プロパティをoff
に設定した状態で、MATLABを終了すると、MATLABは、そのCloseRequestFcn
で定義されたコールバックルーチンを実行しません)。クローズ要求関数によって、Figureの終了またはMATLABセッションの終了を妨げたり遅らせたりすることができます。これは、つぎのような動作を実行するのに役立ちます。
CloseRequestFcn
に対するデフォルトのコールバックルーチンは、closereq
と呼ばれるM-ファイルです。それには、つぎのステートメントが含まれています。
shh=get(0,'ShowHiddenHandles'); set(0,'ShowHiddenHandles','on'); delete(get(0,'CurrentFigure')); set(0,'ShowHiddenHandles',shh);
このコールバックは、RootのShowHiddenHandles
プロパティをon
に設定することによってHandleVisibility
コントロールを無効にし、それによってすべてのFigureのハンドル番号が視覚可能となります。
MATLAB の終了
MATLABを終了すると、カレントFigureのCloseRequestFcn
が呼び出され、Figureを削除すると、Rootの子オブジェクトのリスト(すなわち、RootのChildren
プロパティ)のつぎのFigureがカレントFigureとなり、そのCloseRequestFcn
がつぎに実行されます。
Figureを削除しないようにFigureのCloseRequestFcn
を変更する(たとえば、このプロパティを空文字列として定義する)と、そのFigureに対してclose コマンドを発行してもFigureは削除されません。さらに、MATLABを終了しようとしても、MATLABがFigureを削除しないためその終了は中止されます。
クローズ要求関数でのエラー
CloseRequestFcn
の実行時にエラーが発生すると、MATLABは閉じる動作を中止します。しかし、CloseRequestFcn
のエラーは、MATLABの終了を中断することはありません。もし、FigureのCloseRequestFcn
でエラーが発生したとしても、MATLABはquit
またはexit
コマンドに従って無条件にFigureを閉じます。
クローズ要求関数の変更
delete
コマンドは、そのCloseRequestFcn
の値に関係なく、設定したFigureを常に削除します。たとえば、ステートメント
delete(get(0,'Children'))
は、ハンドル番号が隠されていない(すなわち、HandleVisibility
プロパティがon
に設定されている)すべてのFigureを削除します。ハンドル番号が隠されているかどうかに関係なくすべてのFigureを削除するためには、RootのShowHiddenHandles
プロパティをon
に設定してください。その場合、RootのChildren
プロパティは、すべてのFigureのハンドル番号を含みます。たとえば、ステートメント
set(0,'ShowHiddenHandles','yes') delete(get(0,'Children'))
![]() | FigureとAxesの保護 | ハンドルの有効性と可視性 | ![]() |