![]() | Programming Guide | WideStudio Index Table of contents |
用户对话窗
作成简单的用户对话窗
接着,我们试着制作利用WSCdialog 的简单用户对话窗。并且具有下面的机能。
点击某按钮时,显示对话窗。 在对话窗上有输入区域,有Radio按钮系列。 对话窗结束时,核对输入是否正确。 对话窗的输入结果显示在标签上。 这个范例,作为ws/sampes/Ruby/dialog/newproject.prj 提供。
[使用用户对话窗的范例]用户对话窗的自动启动控制
以下,我们将在提供的ws/sampes/share/dialog/newproject.prj范例试着做用户对话窗的自动启动控制。对话窗往往作为输入或显示专用窗被使用。因此,作为通常窗口制作时有难处理情况。譬如,想从多个事项过程调用同样的对话窗时。
这个情况下,如果作为普通的窗口进行处理的话,对话窗的输入是否结束的判断处理就复杂。 然而,如果制作为对话窗的话,对话窗输入结束后,可以通过popup函数实现同期回归处理,可简单地通过事项过程对对话窗的输入进行控制。
下图中,显示了当被显示窗返回结果时的普通窗和对话窗的差异。接着,我们将逐顺序说明简单对话窗的处理次序。首先制作对话窗。制作WSCdialog Class的一个Instance。然后在对话窗上配置各种项目。在范例中,配置了下列项目。
[使用普通窗和对话窗的差异]
WSCvifield* newvifi_003 WSCradioGroup* newradi_006 然后,记述分别对对话窗的 OK,NO,CANCEL 按钮被按时所做的处理。 通过对话窗 ACITVATE 触发器,连接事项过程。使用该这个事项过程,可以确认对话窗输入值是否正确,如果不正确,将显示信息窗显示错误。
[简单的用户对话窗例子]#---------------------------------------------------------- #Function for the event procedure #---------------------------------------------------------- use mpfc; sub dialogep { my ($object) = @_; if (mpfc::WSCbaseDialog_getStatus($object) != $mpfc::WS_DIALOG_OK){ # A mpfc::WSCbase_setVisible($object,$mpfc::False); return; } $str = mpfc::WSCbase_getProperty($newvifi_003,"labelString"); if ( mpfc::WSCvariant_getCharPtr($str) eq "" ){ # B $msg = mpfc::WSGIappMessageDialog(); mpfc::WSCbase_setProperty($msg,"defaultPosition",$mpfc::True); mpfc::WSCbase_setProperty($msg,"width",500); mpfc::WSCbase_setProperty($msg,"labelString", "Please input some string to the input field."); mpfc::WSCbaseDialog_popup($msg); # C return; } $val = mpfc::WSCbase_getProperty($newradi_006,"value"); if ( mpfc::WSCvariant_getLong($val) == 0 ){ # D $msg = mpfc::WSGIappMessageDialog(); mpfc::WSCbase_setProperty($msg,"defaultPosition",$mpfc::True); mpfc::WSCbase_setProperty($msg,"width",500); mpfc::WSCbase_setProperty($msg,"labelString","Please select a item of the radio group."); mpfc::WSCbaseDialog_popup($msg); # E return; } mpfc::WSCbase_setVisible($object,$mpfc::False); # F return; } 1;首先,取得事项过程对话窗的Class pointer。通过访问对话窗Class固有的getStatus 函数,确认被按按钮的种类。
A ,不是对话窗Class的情况,结束事项过程。 B ,核对被按按钮。OK 按钮以外,不显示对话窗。
C 判断 newvifi_003中的输入。没被输入的情况,用D显示消息对话窗,然后结束处理。 E 判断newradi_006是否被选择。没被选择的情况,用F显示消息对话窗,然后结束处理。
当在E 判断输入正确的情况时,不显示对话窗。这时,由于对话窗不显示,于是调用对话窗的popup函数进行启动。因此,正常显示对话窗时,对话窗不会自动结束。
下面是调出对话窗的事项过程例子。按下显示为[dialog!]的按钮时,对话窗将被显示,输入结果将被显示在3个标签上。在第1个的标签上,显示对话窗的 OK,NO,CANCEL 按钮被按时的结果,第2个标签上,显示被输入newvifi_003的结果,第3个标签上,显示newradi_006被选择的结果。
[调用用户对话窗画面的例子]#---------------------------------------------------------- #Function for the event procedure #---------------------------------------------------------- use mpfc; sub btnep { my ($object) = @_; $val = mpfc::WSCbaseDialog_popup($newdial_001); if ($val == $mpfc::WS_DIALOG_OK){ mpfc::WSCbase_setProperty($newvlab_007,"labelString","DIALOG OK!"); }elsif ($val == $mpfc::WS_DIALOG_NO){ mpfc::WSCbase_setProperty($newvlab_007,"labelString","DIALOG NO!"); }elsif ($val == $mpfc::WS_DIALOG_CANCEL){ mpfc::WSCbase_setProperty($newvlab_007,"labelString","DIALOG CANCEL!"); } $tmp = mpfc::WSCbase_getProperty($newvifi_003,"labelString"); $tmp2 = sprintf("INPUT: %s",mpfc::WSCvariant_getCharPtr($tmp)); mpfc::WSCbase_setProperty($newvlab_010,"labelString",$tmp2); $val = mpfc::WSCbase_getProperty($newradi_006,"value"); $tmp2 = sprintf("SELECT: %s",mpfc::WSCvariant_getCharPtr($val)); mpfc::WSCbase_setProperty($newvlab_011,"labelString",$tmp2); return; } 1;
Copyright(C) T. Hirabayashi, 2000-2004 | Last modified: Feb 25, 2004 |