WideStudio Programming Guide

| WideStudio Programming Guide | WideStudio Index 目次

> ## EXIT トリガによる終了イベントプロシージャでダイアログを表示するには

> ウィンドウを閉じてアプリケーションを終了する場合、データの保存を行った り、終了するか否かをダイアログを表示したい場合があります。そのような場 合、WSCwindow / WSCmainWindow クラスの EXIT トリガでイベントプロシージャ を使うと便利です。WSCwindow/WSCmainWindow クラスは、ウィンドウが不可視 状態になった場合に、EXIT トリガをあげ、アプリケーションが終了する前に、 イベントプロシージャを実行する機能を持っています。
> まず、WSCwindow もしくは WSCmainWindow クラスのプロパティ "exit" を True にします。このプロパティは、アプリケーション中のウィンドウで特に メインで用いられるものに設定すると良いでしょう。そしてそのウィンドウに 対して、EXIT トリガでイベントプロシージャを張り付けます。
> 次のような機能を持つイベントプロシージャを作ってみます。
> - 終了するか否かのダイアログを表示。
> - 「OK」が選択された場合は、処理を行って終了。
> - 「NO」が選択された場合は、処理を行わず終了。
> - 「CANCEL」が選択された場合は、処理を行わず終了もしない。

>     #----------------------------------------------------------
>     #Function for the event procedure
>     #----------------------------------------------------------
>     # オブジェクトを表示しなおすタイマープロシージャ
>     use mpfc;

>     $timer = 0;
>     $target = 0;
>     sub delayproc {
>       my ($object) = @_;

>       if ($target != 0){
>         $target->setVisible($mpfc::True);
>       }
>       return;
>     }

>     # EXIT イベントプロシージャ本体
>     # 終了時にダイアログを表示する。
>     sub exit_ep {
>       my ($object) = @_;
>       if ($object->getVisible() != $mpfc::False){
>         return;
>       }
>       $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 == 0){
>         $timer = new mpfc::WSCvtimer($object,"objname");
>         $timer->init();
>         $timer->setProperty("interval",250);
>         $timer->setProperty("cont",$mpfc::False);
>         $timer->addProcedure("delay-popup","delayproc",$mpfc::WSEV_ACTIVATE);
>       }
>       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);   # タイマーの起動
>       }
>       return;
>     }
>     1;

> A で、メッセージダイアログインスタンスを取得し、B でメッセージダイアログを 表示します。
> C、D、E でダイアログの結果を判定し、OKボタンがおされたならば C、NO ボ タンがおされたならば D、CANCEL ボタンがおされたならば E となります。
> E の終了せずに再び、表示しなおす場合、タイマーを使って、少しタイミング を送らせる必要があります。これは、ウィンドウシステムに対し、既に画面終 了イベントが発生しているため、そのイベントの処理が確実に処理されてから、 表示を行わなければならないからです。

> ［終了確認ダイアログ］

Document Release 3.70 for WideStudio ver 3.70, Feb 2004

WideStudio documents index | 目次

Copyright(C) T. Hirabayashi, 2000-2004 | Last modified: Feb 25, 2004