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