天健系统输入法使用方法F9(pubcomm.pbd)
天健业务系统F9快捷键开立诊断、检查、检验等项目时,一般会用到默认的输入法,如何在新建的窗口中使用呢?接下来时具体的使用方法。
一、初始化输入法
在新建窗体的open事件或者其他窗口加载时操作的事件中,初始化输入法
//加载输入法 uo_diag_input.uf_set_userobj(dw_2,"ue_getResult") uo_diag_input.uf_load_data("西医诊断","01") uo_diag_input.uf_unshow()
以上内容解读:
1.1 uo_diag_input为pubcomm.pbd的uo_input_keyboard对象的实例化,需要引入新建窗口。
1.2 指定接收返回值的控件和具体事件
uo_diag_input.uf_set_userobj(dw_2,"ue_getResult")
1.3 加载指定字典内容
uo_diag_input.uf_load_data("西医诊断","01")
西医诊断为表格input_setting中配置的指定视图。
1.4 隐藏输入法窗口,加载时不显示
uo_diag_input.uf_unshow()
二、绑定输入法控件dw_2创建 pbm_dwnkey 方法事件
事件如下:
代码如下:
// 处理F1_F12等窗口的key事件 20240412注释原有代码 If wf_key(key)=0 Then Return -1 //上述IF语句可以忽略,根据实际需求决定,可以做一下前置性操作 choose case key case KeyF9! long ll_row string ls_diag_type ll_row = dw_2.getrow() choose case GetColumnName() case "diag_desc" ls_diag_type = dw_2.getitemString(ll_row,"diag_type") choose case ls_diag_type case "西医诊断" uo_diag_input.uf_setFocus() case "中医诊断" uo_cdiag.uf_setFocus() end choose end choose end choose
wf_key代码如下:
// 返回值: 0 为执行了按键处理,-1为未执行 choose case key case keyF11! return 0 case keyF5! return 0 case KeyEscape! return 0 case else Return -1 end choose
三、落实ue_getResult事件,用以接收返回值和设置值显示位置
事件如下:
精简代码如下:
strinputresult lst_strinputresult //新输入法的结构 strinputresult lst_strinputresultlog //新输入法的结构 long ll_row,ll_row_countrow,ll_rowlog,ll_sum_row string ls_diag_type //获取当前行号 ll_row=GetRow() //当前行小于0则不做操作,避免系统故障 IF ll_row<=0 or isnull(ll_row) THEN RETURN //获取操作字段名 ls_columnname=GetColumnName() //根据字段名执行不同操作 choose case ls_columnname case 'diag_desc' //根据不同诊断类型设置不同方法和事件,这个与keydown对应 ls_diag_type = dw_2.getitemString(ll_row,"diag_type") choose case ls_diag_type case '西医诊断' uo_diag_input.uf_getResult(lst_strinputresult) uo_diag_input.uf_unshow() //如果返回的项目编码为空,则退出 if trim(lst_strinputresult.item_code)='' or isnull(lst_strinputresult.item_code) then return //返回值赋予公共结构体 lst_strinputresultlog = lst_strinputresult case '中医诊断' uo_cdiag.uf_getResult(lst_strinputresult) uo_cdiag.uf_unshow() //如果返回的项目编码为空,则退出 if trim(lst_strinputresult.item_code)='' or isnull(lst_strinputresult.item_code) then return //中医诊断会有弹窗,这个具体医院具体分析,非必要。选择症型、治则 OpenWithParm(w_cdiag_item_NEW,lst_strinputresult) //返回值赋予公共结构体 lst_strinputresultlog = Message.PowerObjectparm end choose //设置返回值 ll_row_countrow = dw_2.rowcount() ll_sum_row =0 //判断返回的项目标号是否已存在,存在则不允许再次开立(这里时特殊的方面,例如诊断不允许重复) for ll_rowlog =1 to ll_row_countrow if lst_strinputresultlog.item_code = dw_2.getitemstring(ll_rowlog,"item_code") then ll_sum_row = ll_sum_row + 1 end if next //不存在重复值则显示,否则提示存在 if ll_sum_row =0 then this.Setitem(ll_row,"diag_desc", lst_strinputresultlog.item_name) this.Setitem(ll_row,"diag_code", lst_strinputresultlog.item_code) else messagebox("提示","新开诊断与历史诊断冲突,开立失败,诊断名称:"+lst_strinputresultlog.item_name+",诊断编码:"+lst_strinputresultlog.item_code + ".") ll_sum_row =0 end if end choose this.setfocus()
备注:以上代码uo_diag_input.uf_setFocus()是用来显示输入法和设置筛选条件的,默认书写即可