![]() |
![]() |
![]() |
![]() |
WideStudio Application Builder User's Guide(Ocaml言語) | ||
---|---|---|
>EXIT トリガによる終了イベントプロシージャでダイアログを表示するにはウィンドウを閉じてアプリケーションを終了する場合、データの保存を行った り、終了するか否かをダイアログを表示したい場合があります。そのような場 合、WSCwindow / WSCmainWindow クラスの EXIT トリガでイベントプロシージャ を使うと便利です。WSCwindow/WSCmainWindow クラスは、ウィンドウが不可視 状態になった場合に、EXIT トリガをあげ、アプリケーションが終了する前に、 イベントプロシージャを実行する機能を持っています。まず、WSCwindow もしくは WSCmainWindow クラスのプロパティ "exit" を True にします。このプロパティは、アプリケーション中のウィンドウで特に メインで用いられるものに設定すると良いでしょう。そしてそのウィンドウに 対して、EXIT トリガでイベントプロシージャを張り付けます。 次のような機能を持つイベントプロシージャを作ってみます。 (*----------------------------------------------------------*) (*Function for the event procedure *) (*----------------------------------------------------------*) open Swig open Mwt open Mwtlib let timer = ref C_void let target = ref C_void (* オブジェクトを表示しなおすタイマープロシージャ*) let delayproc obj = if (get_int (!target) <> 0) then ignore(!target -> setVisible ( _True)); () let _ = Callback.register "delayproc" delayproc (* EXIT イベントプロシージャ本体 *) (* 終了時にダイアログを表示する。 *) let exit_ep obj = (* do something...*) if get_int (obj -> getVisible()) = get_int _False then let msg = _WSGIappMessageDialog '() in begin (* A *) msg -> setProperty ( "width", 500); msg -> setProperty ( "no", _True); msg -> setProperty ( "defaultPosition", _True); msg -> setProperty ( "labelString", "Exit and save data?\n If you do not want to save and exit,push NO..."); end; (* ダイアログの表示 *) let ret = msg -> "popup"() in begin (* B *) (* 初回実行時、タイマーを作成 *) if (timer = ref C_void) then let parent = obj -> getParentWindow () in begin timer := new_WSCvtimer ( C_list [parent; C_string "timer"]); let _ = Callback.register "timer" !timer in !timer -> init (); !timer -> setProperty ( "interval", 250 ); !timer -> setProperty ( "cont", _False ); !timer -> addProcedure ( "delay-prop", "delayproc",_WSEV_ACTIVATE ); end; if ( get_int ret = get_int _WS_DIALOG_OK ) then (* OKボタンがおされた場合 C *) exit 0; if ( get_int ret = get_int _WS_DIALOG_NO) then (* NOボタンがおされた場合 D *) exit 0; if ( get_int ret = get_int _WS_DIALOG_CANCEL) then begin (* CANCELボタンが押された場合 E *) target := obj; ignore(!timer -> setProperty ( "running", _True)); (* タイマーの起動 *) end; end; () let _ = Callback.register "exit_ep" exit_epA で、メッセージダイアログインスタンスを取得し、B でメッセージダイアログを 表示します。 C、D、E でダイアログの結果を判定し、OKボタンがおされたならば C、NO ボ タンがおされたならば D、CANCEL ボタンがおされたならば E となります。 E の終了せずに再び、表示しなおす場合、タイマーを使って、少しタイミング を送らせる必要があります。これは、ウィンドウシステムに対し、既に画面終 了イベントが発生しているため、そのイベントの処理が確実に処理されてから、 表示を行わなければならないからです。 ![]() [終了確認ダイアログ] Document Release 3.80 for WideStudio ver 3.80, Jan 2005
|
||
![]() |
![]() |
![]() |
![]() |
バグ情報、ご質問等ございましたら、メーリングリストでご確認の上、 御気軽にこちらの方までよろしくお願いいたします。 |
Copyright©WideStudio Development Team,1999-2005
|
![]() |