![]() | Programming Guide | WideStudio/MWT Index 目次 |
EXIT トリガによる終了イベントプロシージャでダイアログを表示するには
ウィンドウを閉じてアプリケーションを終了する場合、データの保存を行った り、終了するか否かをダイアログを表示したい場合があります。そのような場 合、WSCwindow / WSCmainWindow クラスの EXIT トリガでイベントプロシージャ を使うと便利です。WSCwindow/WSCmainWindow クラスは、ウィンドウが不可視 状態になった場合に、EXIT トリガをあげ、アプリケーションが終了する前に、 イベントプロシージャを実行する機能を持っています。
まず、WSCwindow もしくは WSCmainWindow クラスのプロパティ "exit" を True にします。このプロパティは、アプリケーション中のウィンドウで特に メインで用いられるものに設定すると良いでしょう。そしてそのウィンドウに 対して、EXIT トリガでイベントプロシージャを張り付けます。
次のような機能を持つイベントプロシージャを作ってみます。
終了するか否かのダイアログを表示。 「OK」が選択された場合は、処理を行って終了。 「NO」が選択された場合は、処理を行わず終了。 「CANCEL」が選択された場合は、処理を行わず終了もしない。 //in delayproc.java //---------------------------------------------------------- //Function for the event procedure //---------------------------------------------------------- import org.widestudio.mwt.*; // インスタンスを表示しなおすタイマープロシージャ public class delayproc { static WSCvtimer timer = null; static WSCbase target = null; protected static void delayproc(WSCbase object){ if (target != null){ target.setVisible((short)Mwt.True); } } } //in exit_ep.java //---------------------------------------------------------- //Function for the event procedure //---------------------------------------------------------- import org.widestudio.mwt.*; // EXIT イベントプロシージャ本体 // 終了時にダイアログを表示する。 public class exit_ep { protected static void exit_ep(WSCbase object){ if (object.getVisible() != Mwt.False){ return; } WSCmessageDialog msg = Mwt.WSGIappMessageDialog(); //A msg.setProperty("width",500); msg.setProperty("no",Mwt.True); msg.setProperty("defaultPosition",Mwt.True); msg.setProperty("labelString", "Exit and save data?\n If you do not want to save and exit,push NO..."); // ダイアログの表示 long ret = msg.popup(); //B // 初回実行時、タイマーを作成 if (delayproc.timer == null){ WSCbase parent = object.getParentWindow(); delayproc.timer = new WSCvtimer(parent,"objname"); delayproc.timer.init(); delayproc.timer.setVariantData("variable_name","delayproc.timer"); delayproc.timer.setProperty("interval",250); delayproc.timer.setProperty("cont",Mwt.False); delayproc.timer.addProcedure("delay-popup","delayproc.delayproc",Mwt.WSEV_ACTIVATE); } if (ret == Mwt.WS_DIALOG_OK){ // OKボタンがおされた場合 C // saving some data ... System.exit(0); }else if (ret == Mwt.WS_DIALOG_NO){ // NOボタンがおされた場合 D System.exit(0); }else if (ret == Mwt.WS_DIALOG_CANCEL){ // CANCELボタンが押された場合 E delayproc.target = object; delayproc.timer.setProperty("running",Mwt.True); // タイマーの起動 } } }A で、メッセージダイアログインスタンスを取得し、B でメッセージダイアログを 表示します。
C、D、E でダイアログの結果を判定し、OKボタンがおされたならば C、NO ボ タンがおされたならば D、CANCEL ボタンがおされたならば E となります。
E の終了せずに再び、表示しなおす場合、タイマーを使って、少しタイミング を送らせる必要があります。これは、ウィンドウシステムに対し、既に画面終 了イベントが発生しているため、そのイベントの処理が確実に処理されてから、 表示を行わなければならないからです。
[終了確認ダイアログ]
Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |