©
本文档使用 PHP中文网手册 发布
构造全中文界面的Developer/2000应用
摘自:中国计算机报社
李刚 用Oracle的Developer/2000构造的中文界面的应用程序,存在着许多西文的信息。具体表现在: 1. 在运行时多文档主窗口的缺省标题是:Forms 4.5 (Runform),但在设计时找不到可对该标题进行设置的可视属性。 2. 当系统成功地完成某一项操作时,将在状态栏上提示英文信息。例如,当查询时不存在满足条件的记录,系统将提示:FRM-40301:Query caused no records to be retrieved .Re-enter。 3. 当系统执行过程中检测到某项操作错误时,也将在状态栏上提示英文信息。例如,当已到第一条记录时,若用户仍企图继续查看上一条记录,系统将提示:FRM-40110:At first record。 4. 当用户修改数据后,并未保存数据就企图进行其他操作,如进行查询、记录翻页或退出程序,系统将自动弹出一个英文的Alert窗口,出现以下提示:“DO YOU HAVE WANT TO SAVE THE CHANGES YOU HAVE MADE?”;并要求用户在YES、 NO、 CANCEL三个按钮间进行选择。 5. 运行时菜单项总有一个英文的WINDOW项,即使将FORM的MENU MODULE属性置为空白也无济于事。 以上这些情况的出现,破坏了中文应用程序的整体效果,并使用户操作时感到困惑。针对这些问题,下面分别给出解决的方法。 一、 设置中文的主窗口标题 在FORM级的TRIGGERS:WHEN-NEW-FORM-INSTANCE中加入以下代码: SET_WINDOW_PROPERTY(FORMS_MDI_WINDOW,TITLE, 'CAAC计算中心业务信息系统( V1.0 )'); 该命令将多文档主窗口的标题设置为“CAAC计算中心业务信息系统( V1.0 )”。运行时该标题将替代缺省的标题“Forms4.5”。 附带提一下,用SET_WINDOW_PROPERTY命令还可完成对多文档的主窗口和子窗口许多属性的设置。例如,假如多文档子窗口为window0,下面的命令将使文档主窗口和子窗口在运行时自动最大化: SET_WINDOW_PROPERTY(FORMS MDI WINDOW, WINDOW STATE, MAXIMIZE); SET_WINDOW_PROPERTY('window0', WINDOW STATE, MAXIMIZE); 二、 汉化西文的提示信息 Oracle的提示信息分为两类:一类是操作成功的提示信息,如前面提到的第二种情况;一类是操作错误的提示信息,如前面提到的第三种情况。前者将以消息(Message)的形式,自动触发FORM级的TRIGGER:ON-MESSAGE;后者将触发FORM级的TRIGGER:ON-ERROR。因此,我们可以在这两个触发器中,捕捉并汉化英文的提示信息。 汉化英文信息的基本思想是建立一个汉化信息表,在表中存储系统的信息编号和对应的中文汉化信息。当利用触发器捕捉到系统信息时,查询该表,取出中文信息,显示在状态栏上。下面是汉化以消息的形式出现的系统信息的步骤: 1. 在SQL-PLUS中创建汉化信息表: Create table chi_errmsg( msgno NOT NULL VARCHAR2(6), chinesemsg VARCHAR2(60), PRIMARY KEY ( msgno) ); 表chi_errmsg中,msgno字段用以记录系统的信息编号,我们约定该字段的记录方法为:前缀(1位)+信息编号(5位)。其中前缀‘M’表示该信息为系统消息;‘E’表示该信息为系统错误消息。chinesemsg是编号相对应的中文提示信息。 2. 在FORM级的触发器ON-MESSAGE中写入如下代码: DECLARE Mesgno varchar(6); Errormesg varchar2(60); Msg_frm varchar2(200); BEGIN Msg_frm:=MESSAGE_TYPE||'-'||TO_CHAR(MESSAGE_CODE)||':'||MESSAGE_TEXT; Mesgno := 'M'||TO_CHAR(MESSAGE_CODE); SELECT chinesemsg INTO Errormesg FROM chi_errmsg WHERE msgno = Mesgno; MESSAGE(MESSAGE_TYPE||'-'||TO_CHAR(MESSAGE_CODE)||':'||Errormesg,NO_ACKNOWLEDGE); EXCEPTION WHEN others THEN MESSAGE(Err_frm,NO_ACKNOWLEDGE); END; 在上面的代码中,MESSAGE_TYPE、MESSAGE_CODE、MESSAGE_TEXT三个系统变量记载了消息的类型、编号及内容。以本文开始提到的第二种情况为例,当出现“FRM-40301:Query caused no records to be retrieved .Re-enter”消息时, MESSAGE_TYPE="FRM"; MESSAGE_CODE="40301"; MESSAGE_TEXT="Query caused no records to be retrieved .Re-enter"。 由于每一个消息都有一个唯一的编号,因此可依据该编号来查找对应的中文信息。 3.充实汉化信息表的内容 通过上面两步,我们已完成了对系统消息的捕捉和汉化工作。接下来的工作就是在应用开发的过程中,针对应用中可能出现的西文信息,捕捉一个,汉化一个。例如,我们需要对“FRM-40301:Query caused no records to be retrieved .Re-enter”汉化,只需要在chi_errmsg表中加入一条记录即可: insert into chi_errmsg values('M40301','本次查询没有取出符合条件的记录!请再试'); 对系统错误信息的汉化与消息汉化的思想相同,下面给出在ON-ERROR触发器中的代码供读者参考: DECLARE Mesgno varchar(6); Errormesg varchar2(60); Err_frm varchar2(200); BEGIN Errfrm :=ERROR_TYPE||'-'||TO_CHAR(ERROR_CODE)||':'||ERROR TEXT; Mesgno := 'E'||TO_CHAR(ERROR_CODE); SELECT chinesemsg INTO Errormesg FROM chi_errmsg WHERE msgno = Mesgno; MESSAGE(ERROR_TYPE||'-'||TO_CHAR(ERROR_CODE)||':'||Errormesg, NO ACKNOWLEDGE); EXCEPTION WHEN others THEN MESSAGE(Err_frm,NO_ACKNOWLEDGE); END; 针对"FRM-40110:At first record"错误,在chi_errmsg表中插入: insert into chi_errmsg values('E40100','已到第一条记录!'); 最后提醒读者,一个系统提示信息类型究竟是“ERROR”还是“MESSAGE”,可查阅Developer/2000的参考手册。 三 、替换西文Alert窗口 设计的基本思想是建立一个中文的Alert,并在可能出现西文Alert的地方加上代码触发中文的Alert警告,提醒用户进行存储。 例如,针对本文开始提到的第四种情况,为使系统退出时不再出现西文Alert窗口,可在FORM级的TRIGGER:KEY-EXIT中加入如下代码: DECLARE return_value number; alert_id Alert; BEGIN IF :SYSTEM.FORM_STATUS= 'CHANGED' THEN alert_id := Find_Alert('stop_alert'); SET_ALERT_PROPERTY(alert_id,alert_message_text,'数据已经改变!确认是否存储?'); return_value := SHOW_ALERT( alert_id ); IF return_value = ALERT_BUTTON1 THEN COMMIT_FORM; ELSE CLEAR_FORM(NO_COMMIT); END IF; ELSE CLEAR_FORM(NO_COMMIT); END IF; EXIT_FORM; END; 这段代码的基本思想是当记录值发生改变时,弹出中文的Alert,提醒用户存储。'stop_alert'是我们自制的中文Alert,它有两个按钮:确认、取消。当返回第一个按钮(即确认按钮)时,系统提交对数据的修改,否则取消修改。这样,当执行EXIT_FORM命令时,将不会出现原有的西文Alert。 四 、消除菜单中的Window项 用户程序有两种情况,一种是不需要菜单;一种是具有中文的菜单。这两种情况下消除Window项的方法为: (一)用户程序不需要菜单 1. FORM中的MENU MODULE属性:为空。 2. Window中的MODAL属性:TRUE。 (二)用户程序有中文菜单 1. 在用户菜单中建立一个Item,命名为WINDOW。 2. 设置该Item属性如下: Menu Item Type:Magic Command Type:Null Magic Item:Window Lable:为空 |