終了時の確認ダイアログの表示を設定出来るようにする。
メニューの システム→終了、右上の閉じるボタン、kag.closeByScript(%[ask:false])からの各終了時に確認ダイアログを表示するかを、変数sf.exitAskの真偽で決定出来るようにします。
(kag.close()はトラブルが多いので終了にはkag.onCloseQueryを使用した方がいいです。)
一番てっとり早い方法としてどのルートから終了させても必ず呼び出されるkag.onCloseQuery関数を改造することにしました。
以下のコードをAfterInit.tjsに加えてください。(なければ作る)
kag.onCloseQuery = function ()
{
saveSystemVariables();
//変更部分↓
//if(!askOnClose) { global.Window.onCloseQuery(true); return; }
if(!sf.exitAsk) { global.Window.onCloseQuery(true); return; }
//変更部分↑
global.Window.onCloseQuery(askYesNo("終了しますか?"));
} incontextof kag;
kag.onHelpAboutMenuItemClick = function (sender)
{
// 「このソフトについて」ウィンドウを表示
//追加部分↓
tf.exitAsktemp=sf.exitAsk;
sf.exitAsk=0;
//追加部分↑
var win = new global.KAGWindow(false, aboutWidth, aboutHeight);
win.setPos(left + ((width - win.width)>>1), top + ((height - win.height)>>1));
win.process('about.ks' ,,, true); // about.ks を immediate で表示
win.showModal(); // モード付きで表示
invalidate win;
//追加部分↓
sf.exitAsk=tf.exitAsktemp;
//追加部分↑
} incontextof kag;
変数kag.askOnCloseの代りに変数sf.exitAskを使用するようにしたのは変数の状態を保存するためです。
これでどこから終了させてもsf.exitAskの真偽によって確認ダイアログの表示を決定出来ます。
しかしこのままでは ヘルプ→このソフトについて から表示されたabout画面を閉じる時にもダイアログが表示されてしまうので、この画面を開く時だけsf.exitAskが偽になるようにしておきます。
後は設定画面から、sf.exitAskの値を変更出来るようにしましょう。
但し以下のことがらに注意してください。
sf.exitAskが真の時にkag.closeByScript(%[ask:true])を使用してしてしまうとダイアログが2回表示されてしまう。
製作者側から問答無用で終了させることが出来ない。