天健系统输入法使用方法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()是用来显示输入法和设置筛选条件的,默认书写即可

