ユーザーがダイアログの「OK」または「CANCEL」ボタンを選択すると,ダイアログ手続が終了し,ダイアログボックスが閉じられます。DLGMODAL は,IDOK や IDCANCEL など,ダイアログを終了させたコントロールのコントロール名 (インクルード (.FD) ファイル中で整数識別子に関連付けられているもの) を返します。
ユーザーが「OK」または「CANCEL」ボタンを選択したという以外の条件に基づいてダイアログボックスを終了させたい場合,コールバック・ルーチン中からダイアログ・サブルーチン DLGEXIT を呼び出す必要があります。次に例を示します。
SUBROUTINE EXITSUB (dlg, exit_button_id, callbacktype) USE DFLOGM TYPE (DIALOG) dlg INTEGER exit_button_id, callbacktype ... CALL DLGEXIT (dlg)
DLGEXIT の唯一の引数は dialog 構造型です。ダイアログボックスは,DLGEXIT が呼び出された直後ではなく,DLGEXIT が制御をダイアログ・マネージャに返した後に終了します。つまり,DLGEXIT を含んでいるコールバック・ルーチン中に,DLGEXIT の後に他の文があった場合,これらの文が実行され,コールバック・ルーチンから返った後に,ダイアログボックスが終了します。
DLGMODAL に,ダイアログボックスを終了させたコントロールのコントロール名 (または DLGMODAL がダイアログボックスを開くことに失敗した場合の -1) 以外の値を返させたい場合,サブルーチン DLGSETRETURN を使って独自の戻り値を指定することができます。次に例を示します。
TYPE (DIALOG) dlg INTEGER altreturn ... altreturn = 485 CALL DLGSETRETURN (dlg, altreturn) CALL DLGEXIT(dlg)
基本失敗条件との混乱を避けるために,-1 以外の戻り値を使用するようにしてください。
モードレス・ダイアログボックスの終了時に戻り値を返すことはできません。ただし,DLGSETSUB を呼び出して,ダイアログボックスが破棄される直前に何らかの手続が呼び出されるように DLG_INIT コールバック・ルーチンを設定することはできます。
ユーザーが,システム・メニューから,または ESC キーを押すことでダイアログを閉じられるようにしたい場合,IDCANCEL という ID を持つコントロールを用意する必要があります。システムの escape または close が実行されると,IDCANCEL という ID を持つダイアログ・ボタンが押された時の動作がシュミレーションされます。ダイアログ内に IDCANCEL という ID を持つコントロールがなかった場合,close コマンドは無視されます。したがって,この方法でダイアログを閉じることはできなくなります。
システムの close または ESC でダイアログが閉じられるようにしたいが,「Cancel」ボタンを表示したくない場合,IDCANCEL という ID を持つボタンをダイアログに追加し,ボタンの「Properties」ボックスでその可視プロパティを削除します。ESC を押すと,「Cancel」ボタンの基本クリック・コールバックが呼び出され,ダイアログが閉じられます。