![]() |
||
| 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_ep
A で、メッセージダイアログインスタンスを取得し、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
|


