系统错误提示窗口软件有时会因为人为操作的原因或程序本身漏洞的原因或者其它原因出现错误,这时PB的提示信息是英文的,对于我们使用中文的人来说,这肯定会是件非常头痛的事件,而且会有损良好的人机交互界面……所以接下来先制作一个系统出错时的提示窗口,这样在设计和调试程序时有许多错误可以通过提示窗口中文化信息看到。①首先,先制作一个“数据窗口(DataWindow)”,在“新建窗口”中选择“DataWindow”项,选择“FreeForm”,点击“OK”按钮,在接下来的窗口中选择“External”,按“Next”,在下面这个窗口中,需要设计5个变量(如下图表:)字段变量名变量类型变量大小中文含义Err_numberString10错误号Err_messageString255错误信息Err_whereString255出错窗口/菜单Err_objectString255出错对象Err_eventString255出错事件Err_linestring255出错代码行在下一个窗口中选择“Background Color”为“Button Face”,“Text”项的“Border”为“Raised”,点击“next”,然后点击“Finish”,进入数据窗口设计窗口中,调整相应的属性设置(如下图:)。调整完成后保存为“d_system_error”。 ②接下来可以制作“系统错误提示窗口”了。新建一个窗口,设置如下的一些窗口属性: Title(标题):系统错误提示 WindowType(窗口类型):Response!然后在窗口上放置如下控件: ⑴1个GroupBox:清空其Text属性内容 ⑵2个StaticText:st_1.Text = “警告:”; St_2.Text = “ 系统出现错误,请点击“显示信息”查看具体错误信息,并告知系统管理员!” ⑶1个DataWindow: name属性 = “dw_error”,dw_error.DataObject = “d_system_error”,调整高宽大小,放置位置在GroupBox组框中,不选Border属性框,并取消Visible选择框的选择。 ⑷4个CommandButton:a. Name:cb_show Text:“显示信息”Clicked Event:IF This.Text = '显示信息' THENdw_error.Visible = TrueThis.Text = '隐藏信息'ELSEdw_error.Visible = FalseThis.Text = '显示信息'END IF b. Name:cb_print Text:“打印信息”Clicked Event:// 打印错误信息dw_error.print()c. Name:cb_continue Text:“继续执行”Clicked Event:// 关闭提示窗口Close(Parent)d. Naem:cb_halt Text:“终止系统”Clicked Event:// 终止程序执行Halt Close;各控件布局如下图所示:-----系统错误提示窗口Open事件代码:String ls_ErrMsgString ls_log_file, ls_textInteger li_file_no If Error.Number = 0 Then Return Choose Case Error.Number Case 1 ls_ErrMsg = '除数为零' Case 2 ls_ErrMsg = '引用空对象' Case 3 ls_ErrMsg = '数组越界' Case 4 ls_ErrMsg = '枚举值超出函数范围' Case 5 ls_ErrMsg = "函数中遇到负值" Case 6 ls_ErrMsg = "指定的数据窗口行/列无效" Case 7 ls_ErrMsg = "联接引用时,出现不可解决的外部引用" Case 8 ls_ErrMsg = "引用带有空下标的数组" Case 9 ls_ErrMsg = "DLL函数未在当前程序中" Case 10 ls_ErrMsg = "DLL函数不支持的参数类型" Case 11 ls_ErrMsg = "对象文件已过期,必须转化为当前版本" Case 12 ls_ErrMsg = "数据窗口列类型与GetItem类型不匹配" Case 13 ls_ErrMsg = "不可知的属性引用" Case 14 ls_ErrMsg = "为外部函数打开错误DLL库" Case 15 ls_ErrMsg = "错误调用外部函数" Case 16 ls_ErrMsg = "超出最大字符串的长度" Case 17 ls_ErrMsg = "数据窗口控件中引用的数据窗口对象不存在" Case 18 ls_ErrMsg = "函数未返回值" Case 19 ls_ErrMsg = "不能将任意变量中NAME转化为NAME" Case 20 ls_ErrMsg = "没有成功地准备好数据库命令" Case 21 ls_ErrMsg = "运行时,不正确地引用函数" Case 22 ls_ErrMsg = "不可知的对象类型" Case 23 ls_ErrMsg = "不能将NAME类型的对象赋值为NAME类型的对象" Case 24 ls_ErrMsg = "函数调用与其定义不匹配" Case 25 ls_ErrMsg = "DOUBLE或REAL表达式溢出" Case 26 ls_ErrMsg = "不支持对NAME字段的赋值" Case 27 ls_ErrMsg = "非整型指数不能为负" Case 28 ls_ErrMsg = "VBX错误:NAME" Case 29 ls_ErrMsg = "ANY变量需要非整组值" Case 30 ls_ErrMsg = "外部对象不支持数据类型:NAME" Case 31 ls_ErrMsg = "不支持外部对象数据类型:NAME" Case 32 ls_ErrMsg = "调用外部对象函数NAME时,未找到名字" Case 33 ls_ErrMsg = "调用外部对象函数NAME时,参数类型不合法" Case 34 ls_ErrMsg = "调用外部对象函数NAME时,使用不正确的参数数目" Case 35 ls_ErrMsg = "错误调用外部对象函数NAME" Case 36 ls_ErrMsg = "访问外部对象属性NAME时,未找到名称" Case 37 ls_ErrMsg = "访问外部对象属性NAME时,类型不匹配" Case 38 ls_ErrMsg = "询问外部对象属性NAME时,下标数目不正确" Case 39 ls_ErrMsg = "错误访问外部对象属性NAME" Case 40 ls_ErrMsg = "与表达式中任意数据类型不匹配" Case 41 ls_ErrMsg = "表达式中有不合法的任意数据类型" Case 42 ls_ErrMsg = "在DLL函数NAME中,运行时所指定的参数类型与所要求的参数类型不相同" Case 43 ls_ErrMsg = "父对象不存在" Case 44 ls_ErrMsg = "祖先的函数中具有发生冲突的参数及返回类型" Case 45 ls_ErrMsg = "外部表溢出" Case 46 ls_ErrMsg = "空的对象引用不能被赋值或传递给同类型的变量" Case 47 ls_ErrMsg = "变量需要数组值" Case 48 ls_ErrMsg = "数组的大小与对象的转换不匹配" Case 49 ls_ErrMsg = "数组的类型与对象的转换不匹配" Case 50 ls_ErrMsg = "分布服务错误" Case 51 ls_ErrMsg = "函数或事件的参数不合法" Case 52 ls_ErrMsg = "分布通讯错误" Case 53 ls_ErrMsg = "未激活所需服务器" Case 54 ls_ErrMsg = "服务器未接受请求" Case 55 ls_ErrMsg = "请求非正常终止" Case 56 ls_ErrMsg = "非完整地相应请求" Case 57 ls_ErrMsg = "未联接" Case 58 ls_ErrMsg = "对象实例不存在" Case 59 ls_ErrMsg = "不合法的列范围" Case 60 ls_ErrMsg = "不合法的行范围" Case 61 ls_ErrMsg = "将NUMBER维数组不合法地转换成对象" Case 62 ls_ErrMsg = "服务器忙" Case 63 ls_ErrMsg = "无返回值的函数或事件用于表达式" Case 64 ls_ErrMsg = "赋值需要数组对象" Case Else ls_ErrMsg = "其他错误" End Choose // 将错误信息增加到dw_error中dw_error.InsertRow(0)dw_error.SetItem( 1, 'err_number' , String(Error.Number) )dw_error.SetItem( 1, 'err_message' , ls_ErrMsg )dw_error.SetItem( 1, 'err_where' , Error.WindowMenu )dw_error.SetItem( 1, 'err_event' , Error.ObjectEvent )dw_error.SetItem( 1, 'err_object' , Error.Object )dw_error.SetItem( 1, 'err_line' , String(Error.Line) ) // 以下代码段将错误号和错误信息写进日志文件syserror.log中ls_text = "~r~n----------------------------------------------------------------"ls_text += "~r~n"ls_text += "~r~n 出错时间 : " + String(Today(),'yyyy/mm/dd') + " " + String(Now())//ls_text += "~r~n 操作员 : " + gs_user_namels_text += "~r~n 错误代码 : " + String(Error.Number)ls_text += "~r~n 错误信息 : " + ls_ErrMsgls_text += "~r~n 窗口/菜单: " + Error.WindowMenuls_text += "~r~n 出错控件 : " + Error.Objectls_text += "~r~n 出错事件 : " + Error.ObjectEventls_text += "~r~n 出错行数 : " + String(Error.Line) // 打开系统错误日志文件If Trim(ls_log_file) = "" OR IsNull(ls_log_file) Then ls_log_file = "syserror.log" End If li_file_no = FileOpen(ls_log_file,LineMode!,Write!,SHARED!,Append!) If li_file_no = 0 Then MessageBox("出错信息","不能打开系统出错日志文件!",Exclamation!) Else If FileWrite(li_file_no, ls_text) < 0 Then MessageBox("出错信息","写系统出错日志文件出错!", Exclamation!) End If End If将窗口保存为“w_system_error”。然后在应用对象mpgl的systemerror事件中加入代码:Open(w_system_error)即可。OK!到此为止,系统错误提示窗口设计完成,大家可以故意设计一些错误测试一下。