| WideStudio Programming Guide | WideStudio Index Table of contents

> ## 用户对话框

> ### 作成简单的用户对话框

> 利用WSCdialog 制作具有以下功能的简单用户对话框。
> - 点击某按钮时，显示对话框。
> - 在对话框上有输入字段和无线按钮组。
> - 对话框结束时，核对输入是否正确。
> - 在标签中显示对话框的输入结果。

> [使用用户对话框的范例]
> 这个范例，作为ws/sampes/Ruby/dialog/newproject.prj 提供。

> ### 用户对话框的自动启动控制

> 将在提供的ws/sampes/share/dialog/newproject.prj范例基础上，实现用户对话框的自动启动控制。 对话框往往作为输入或显示专用窗口被使用。因此，作为通常窗口制作时有难处理情况。 譬如，想从多个事件过程调用同样的对话框时。
> 此时，如果作为普通的窗口进行处理的话，对话框的输入是否结束的判断处理就复杂。 然而，如果制作为对话框的话，对话框输入结束后，可以通过popup函数实现同期回归处理， 可简单地通过事件过程对对话框的输入进行控制。
> 下图中，显示了当被显示窗返回结果时的普通窗口和对话框的差异。

> [使用普通窗口和对话框的差异]
> 接着，我们将逐顺序说明简单对话框的处理次序。 首先制作对话框。制作WSCdialog Class的一个Instance。 然后在对话框上部署各种对象。在范例中，部署了下列对象。
> - mpfc::WSCvifield newvifi_003
> - mpfc::WSCradioGroup newradi_006

> [简单的用户对话框例子]
> 然后，记述点击对话框的 OK，NO，CANCEL 按钮时所做的处理。 通过对话框 ACITVATE 触发器，连接事件过程。使用该这个事件过程， 可以确认对话框输入值是否正确，如果不正确，通过消息对话框显示错误。

>     #----------------------------------------------------------
>     #Function for the event procedure
>     #----------------------------------------------------------
>     use mpfc;

>     sub dialogep {
>       my ($object) = @_;
>       if ($object->getStatus() != $mpfc::WS_DIALOG_OK){    # A
>         $object->setVisible($mpfc::False);
>         return;
>       }
>       $str = $newvifi_003->getProperty("labelString");
>       if ( $str->getCharPtr() eq "" ){                     # B
>         $msg = mpfc::WSGIappMessageDialog();
>         $msg->setProperty("defaultPosition",$mpfc::True);
>         $msg->setProperty("width",500);
>         $msg->setProperty("labelString",
>                "Please input some string to the input field.");
>         $msg->popup();                         # C
>         return;
>       }
>       $val = $newradi_006->getProperty("value");
>       if ( $val->getLong() == 0 ){                           # D
>         $msg = mpfc::WSGIappMessageDialog();
>         $msg->setProperty("defaultPosition",$mpfc::True);
>         $msg->setProperty("width",500);
>         $msg->setProperty("labelString","Please select a item of the radio group.");
>         $msg->popup();                         # E
>         return;
>       }
>       $object->setVisible($mpfc::False);         # F
>       return;
>     }
>     1;

> 首先，取得事件过程对话框的Class pointer。通过访问对话框类 固有的getStatus 函数，确认被按按钮的种类。
> A ，不是对话框类的情况，结束事件过程。
> B ，核对被按按钮。OK 按钮以外，不显示对话框。
> C 判断 newvifi_003中的输入。没被输入的情况，D 显示消息对话框，然后结束处理。
> E 判断newradi_006是否被选择。没被选择的情况，用F显示消息对话框，然后结束处理。
> 下面是调出对话框的事件过程例子。

> [调用用户对话框画面的例子]
> 按下[dialog！]按钮时，对话框将被显示，输入结果将被显示在3个标签上。 在第1个的标签上，显示对话框的 OK，NO，CANCEL 按钮被按时的结果。 第2个标签上，显示被输入newvifi_003的结果，第3个标签上，显示newradi_006被选择的结果。

>     #----------------------------------------------------------
>     #Function for the event procedure
>     #----------------------------------------------------------
>     use mpfc;

>     sub btnep {
>       my ($object) = @_;
>       $val = $newdial_001->popup();
>       if ($val == $mpfc::WS_DIALOG_OK){
>          $newvlab_007->setProperty("labelString","DIALOG OK!");
>       }elsif ($val == $mpfc::WS_DIALOG_NO){
>          $newvlab_007->setProperty("labelString","DIALOG NO!");
>       }elsif ($val == $mpfc::WS_DIALOG_CANCEL){
>          $newvlab_007->setProperty("labelString","DIALOG CANCEL!");
>       }
>       $tmp = $newvifi_003->getProperty("labelString");
>       $tmp2 = sprintf("INPUT: %s",$tmp->getCharPtr());
>       $newvlab_010->setProperty("labelString",$tmp2);

>       $val = $newradi_006->getProperty("value");
>       $tmp2 = sprintf("SELECT: %s",$val->getCharPtr());
>       $newvlab_011->setProperty("labelString",$tmp2);
>       return;
>     }
>     1;

Document Release 3.70 for WideStudio ver 3.70, May 2004

WideStudio documents index | Table of contents

Copyright(C) WideStudio Development Team, 1999-2004 | Last modified: May 25, 2004