![]() | Programming Guide | WideStudio/MWT Index Table of contents |
用户对话框
作成简单的用户对话框
利用WSCdialog 制作具有以下功能的简单用户对话框。
点击某按钮时,显示对话框。 在对话框上有输入字段和无线按钮组。 对话框结束时,核对输入是否正确。 在标签中显示对话框的输入结果。 这个范例,作为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 //---------------------------------------------------------- import org.widestudio.mwt.*; public class dialogep { protected static void dialogep(WSCbase object){ WSCdialog obj = (WSCdialog)object; if (obj.getStatus() != Mwt.WS_DIALOG_OK){ // A obj.setVisible((short)Mwt.False); return; } WSCvariant str = newwin000.newvifi_003.getProperty("labelString"); if (str.getCharPtr() == ""){ // B WSCmessageDialog msg = Mwt.WSGIappMessageDialog(); msg.setProperty("defaultPosition",Mwt.True); msg.setProperty("width",500); msg.setProperty("labelString", "Please input some string to the input field."); msg.popup(); // C return; } WSCvariant val = newwin000.newradi_006.getProperty("value"); if (val.getLong() == 0){ // D WSCmessageDialog msg = Mwt.WSGIappMessageDialog(); msg.setProperty("defaultPosition",Mwt.True); msg.setProperty("width",500); msg.setProperty("labelString","Please select a item of the radio group.") ; msg.popup(); // E return; } obj.setVisible((short)Mwt.False); // F } }首先,取得事件过程对话框的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 //---------------------------------------------------------- import org.widestudio.mwt.*; public class btnep { protected static void btnep(WSCbase object){ long val = newwin000.newdial_001.popup(); if (val == Mwt.WS_DIALOG_OK){ newwin000.newvlab_007.setProperty("labelString","DIALOG OK!"); }else if (val == Mwt.WS_DIALOG_NO){ newwin000.newvlab_007.setProperty("labelString","DIALOG NO!"); }else if (val == Mwt.WS_DIALOG_CANCEL){ newwin000.newvlab_007.setProperty("labelString","DIALOG CANCEL!"); } WSCvariant tmp = newwin000.newvifi_003.getProperty("labelString"); String tmp2 = "INPUT:" + tmp.getCharPtr(); newwin000.newvlab_010.setProperty("labelString",tmp2); WSCvariant val2 = newwin000.newradi_006.getProperty("value"); String tmp3 = "SELECT: " + val2.getCharPtr(); newwin000.newvlab_011.setProperty("labelString",tmp3); } }
Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |