WideStudio Logo
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){
        mpfc::WSCbase_setVisible($target,$mpfc::True);
      }
      return
    }
    
    # EXIT イベントプロシージャ本体
    # 終了時にダイアログを表示する。
    sub exit_ep {
      my ($object) = @_;
      if (mpfc::WSCbase_getVisible($object) != $mpfc::False){
        return;
      }
      $msg = mpfc::WSGIappMessageDialog(); #A
      mpfc::WSCbase_setProperty($msg,"width",500);
      mpfc::WSCbase_setProperty($msg,"no",$mpfc::True);
      mpfc::WSCbase_setProperty($msg,"defaultPosition",$mpfc::True);
      mpfc::WSCbase_setProperty($msg,"labelString",
        "Exit and save data?\n If you do not want to save and exit,push NO...");
    
      # ダイアログの表示
      $ret = mpfc::WSCbaseDialog_popup($msg); #B
    
      # 初回実行時、タイマーを作成
      if ($timer == 0){
        $timer = mpfc::new_WSCvtimer($object,"objname");
        mpfc::WSCbase_init($timer);
        mpfc::WSCbase_setProperty($timer,"interval",250);
        mpfc::WSCbase_setProperty($timer,"cont",$mpfc::False);
        mpfc::WSCbase_addProcedure($timer,"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;
        mpfc::WSCbase_setProperty($timer,"running",$mpfc::True);   # タイマーの起動
      }
      return
    }
    1;
    

    A で、メッセージダイアログインスタンスを取得し、B でメッセージダイアログを 表示します。

    C、D、E でダイアログの結果を判定し、OKボタンがおされたならば C、NO ボ タンがおされたならば D、CANCEL ボタンがおされたならば E となります。

    E の終了せずに再び、表示しなおす場合、タイマーを使って、少しタイミング を送らせる必要があります。これは、ウィンドウシステムに対し、既に画面終 了イベントが発生しているため、そのイベントの処理が確実に処理されてから、 表示を行わなければならないからです。



    [終了確認ダイアログ]


    Document Release 3.20 for WideStudio ver 3.20, Oct 2002


    WideStudio documents index | 目次

    Copyright(C) T. Hirabayashi, 2000-2002 Last modified: Oct 27, 2002