吉里吉里改造メモ(1)

終了時の確認ダイアログの表示を設定出来るようにする。

メニューの システム→終了、右上の閉じるボタン、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回表示されてしまう。
製作者側から問答無用で終了させることが出来ない。


コメントを残す

メールアドレスが公開されることはありません。