📄 pymcx.prg
字号:
******************************************************************
* 过 程:PYMCX.PRG
* 功 能:拼音码或代码快速查询
* 参 数:DMK,S1,XS
* 要 求: DMK表示的代码库中必须有代码字段S1
* 显示字段XS和拼单码字段"拼音码"
******************************************************************
*FUNCTION DMCX
PARA DMK,BM,S1,XS
SET PROC TO LRSUBPRG.APP
private m.currrec,S1,S2
DM=SPACE(10) &&存放查询代码
S2=0 &&循环标志
M.SURE=.F.
ZBM=ALIAS()
m.currrec=recno()
IF USED('&BM')
SELE &BM
SET FILTER TO
ELSE
SELE 0
USE &DMK ALIAS &BM AGAIN
ENDIF
IF KEY(2)<>"拼音码"
INDEX ON &S1 TAG TB1 OF pymcx.CDX
INDEX ON 拼音码 TAG TB2 OF pymcx.CDX
ENDIF
GO TOP
IF EOF()
=MESSAGEBOX("系统无可查信息!" ,0+16,"提示信息")
RETURN
ENDIF
DO WHILE S2=0
DM=DM_IN(S1,XS)
SET FILTER TO
LOCA FOR ALLTRIM(&S1)=ALLTRIM(DM)
IF .NOT.FOUND()
SFOK=MESSAGEBOX("&DM"+"不存在"+CHR(13)+"是否正确?",4+32,"提示信息")
IF SFOK=6
EXIT
ELSE
LOOP
ENDIF
ELSE
EXIT
S2=S2+1
ENDIF
ENDDO
IF EOF()
SELE (ZBM)
GO m.currrec
??CHR(7)
ENDIF
*KEYBOARD '{CTRL+F1} '
Return DM
*===============================================
*物资窗口输入函数
*当前区为物资字典库,并对物资编号和拼音字段索引YFP窗口已定义
*返回物资代码
FUNC DM_IN
PARA HJDM,HJMC,HJGL &&代码名,名称,过滤标志
PRIVATE ALL LIKE HJ*
PUBLIC GZ_IN
PUSH KEY CLEAR
m.ScrFontWidth = 0
m.ScrFontHeight = 0
m.WinFontWidth = 0
m.WinFontHeight = 0
m.ObjFontWidth = 0
m.ObjFontHeight = 0
*** 计算屏幕窗口字体宽度和高度
DO GetWFontWH IN DISP.PRG WITH 'SCREEN', m.ScrFontWidth, m.ScrFontHeight
IF WEXIST("YFP")
RELEASE WINDOW YFP
ENDIF
DEFINE WINDOW YFP IN DESKTOP ;
FROM 314 / m.ScrFontHeight, 69 / m.ScrFontWidth TO 522 / m.ScrFontHeight, 560 / m.ScrFontWidth ;
FONT 'System', 12 ;
STYLE 'B' ;
NOCLOSE NOMINIMIZE SYSTEM GROW ;
COLOR RGB(, , , 192, 192, 192)
ACTIVATE WINDOW YFP
set color to n/3
CLEAR
*IF TYPE("GZ_IN")="L"
SET ORDER TO 2
GZ_IN="拼音编码"
*ENDIF
IF HJGL
HJGL="LEN(TRIM(&HJDM))=LEN(&HJDM)" &&过滤汇总科室
ELSE
HJGL="1=1"
ENDIF
STORE "" TO HJBTOP,HJIN
HJSPY="" &&编号变量
HJT1=0 &&屏头记录号
HJT2=0 &&屏尾记录号
HJTHZ=.F.
HJBXH=0
@ 0,44 SAY "转换输入方式 " COLOR G+/3
@ 0,58 SAY "TAB" COLOR W+/R
HJDMDBF=SELE() &&编码库工作区
HJDBF=DBF()
HJHCDBF=100 &&缓冲库工作区
DO WHILE .T.
@ 0,0 SAY SPACE(40)
@ 0,1 SAY GZ_IN COLOR W+/3
@ 0,11 SAY HJSPY
HJRR=INKEY(0,'M')
DO CASE
CASE HJRR=151 &&鼠标
DO CASE
CASE MCOL()<0.OR.MROW()<0
HJRR=27
EXIT
CASE MCOL()>=62.5.AND.MROW()<=0.6.AND.HJT1<>0 &&上箭头
GO HJT1
SKIP -20
IF BOF().OR.RECNO()=1
GO TOP
@ 0,WCOLS()-2 SAY " "
ENDIF
DO KJ1_221
CASE MCOL()>=62.5.AND.MROW()>=10.2.AND.HJT1<>0.AND.HJT2<RECC() &&下箭头
GO HJT2
DO KJ1_221
@ 0,WCOLS()-2 SAY "↑" COLOR N/R
CASE MROW()>1
HJSS=INT(IIF(MCOL()>=32,MROW()+10,MROW()))
IF HJT1+HJSS-1<=RECC()
GO HJT1+HJSS-1
EXIT
ENDIF
?? CHR(7)
CASE MCOL()>=58.AND.MCOL()<62.5.AND.MROW()<=0.6 &&TAB
DO HJ_FS
CASE MCOL()<=8.AND.MROW()<=0.6 &&TAB
@ 0,10 SAY "请稍候..."
HJSPY=""
DO YFPY_SQL
ENDCASE
CASE HJRR=27
EXIT
CASE HJRR=46.AND.HJT1<>0 &&小数点
HJS1="a"
@ 0,12 SAY "代号" GET HJS1
READ
HJSS=ASC(HJS1)-96
IF HJSS>=1.AND.HJT1+HJSS-1<=RECC()
GO HJT1+HJSS-1
EXIT
ENDIF
?? CHR(7)
CASE HJRR=32.AND.HJT1<>0 &&空格第一条记录
GO HJT1
EXIT
CASE HJRR=3
IF HJT2<RECC().AND.HJT1<>0 &&下翻
GO HJT2
DO KJ1_221
@ 0,WCOLS()-2 SAY "↑" COLOR N/R
ELSE
?? CHR(7)
ENDIF
CASE HJRR=18
IF HJT1<>0 &&上翻
GO HJT1
SKIP -24
IF BOF().OR.RECNO()=1
GO TOP
@ 0,WCOLS()-2 SAY " "
ENDIF
DO KJ1_221
ELSE
?? CHR(7)
ENDIF
CASE HJRR=19.OR.HJRR=127
IF .NOT.EMPTY(HJSPY) &&左箭头
HJSPY=LEFT(HJSPY,LEN(HJSPY)-1)
IF EMPTY(HJSPY)
STORE 0 TO HJT1,HJT2
?? CHR(7)
@ 1,0 CLEAR TO WROWS(),WCOLS()
ELSE
DO YFPY_SQL
ENDIF
ENDIF
CASE HJRR=32 &&空格显示全部
@ 0,10 SAY "请稍候..."
HJSPY=""
* USE IN (HJHCDBF) &&关闭缓冲库
* SELE (HJDMDBF)
DO YFPY_SQL
CASE HJRR=9 &&TAB参数设置
DO HJ_FS
CASE HJRR>=32.AND.HJRR<=128
HJSPY=HJSPY+CHR(HJRR)
DO YFPY_SQL
OTHE
?? CHR(7)
ENDCASE
ENDDO
POP KEY
HJBDM=&HJDM
IF HJHCDBF<>100
USE IN (HJHCDBF) &&关闭缓冲库
ENDIF
SELE (HJDMDBF)
SET ORDER TO 1
HIDE WINDOW YFP
IF HJRR=27
RETURN ""
ENDIF
SEEK HJBDM
RETURN HJBDM
*-----------------------------
*字典录入程序显示子程序KJ1_221
*T3下箭头
PROC KJ1_221
@ 1,0 CLEAR TO WROWS(),WCOLS()
HJPP=1
HJT1=RECNO()
IF RECNO()+20<RECC()
@ WROWS()-0.8,WCOLS()-2 SAY "↓" COLOR N/R
ELSE
@ WROWS()-0.8,WCOLS()-2 SAY " "
ENDIF
DO WHILE .NOT.EOF().AND.HJPP<20
HJSP=1
DO WHILE .NOT.EOF().AND.HJSP<=10
@ HJSP,INT(HJPP/11)*33 SAY CHR(96+HJPP) COLOR R/3
@ HJSP,INT(HJPP/11)*33+2 SAY "."+LEFT(&HJMC,28)
HJSP=HJSP+1
HJPP=HJPP+1
SKIP
ENDDO
ENDDO
HJT2=RECNO()
RETURN
*------------------------
PROC YFPY_SQL
SELE (HJDMDBF)
DO CASE
CASE HJRR=32
SELE * FROM &HJDBF WHERE &HJGL INTO CURSOR IN_HCK
CASE GZ_IN="拼音编码"
SELE * FROM &HJDBF WHERE 拼音码=HJSPY.AND.&HJGL INTO CURSOR IN_HCK
CASE GZ_IN="模糊拼音"
SELE * FROM &HJDBF WHERE HJSPY$拼音码.AND.&HJGL INTO CURSOR IN_HCK
OTHE
SELE * FROM &HJDBF WHERE &HJDM=HJSPY.AND.&HJGL INTO CURSOR IN_HCK
ENDCASE
HJHCDBF=SELE()
IF .NOT.EOF()
DO KJ1_221
ELSE
STORE 0 TO HJT1,HJT2
?? CHR(7)
@ 1,0 CLEAR TO WROWS(),WCOLS()
ENDIF
RETURN
*---------------------
*TAB输入方法
PROC HJ_FS
SELE (HJDMDBF)
DO CASE
CASE GZ_IN="拼音编码"
GZ_IN="模糊拼音"
CASE GZ_IN="模糊拼音"
GZ_IN="代码编码"
SET ORDER TO 1
OTHE
GZ_IN="拼音编码"
SET ORDER TO 2
ENDCASE
@ 0,WCOLS()-2 SAY " "
@ 1,0 CLEAR TO WROWS(),WCOLS()
HJSPY="" &&编号变量
HJT1=0 &&屏头记录号
HJT2=0 &&屏尾记录号
HJTHZ=.F.
HJBXH=0
RETURN
*===================
*光标定位子程序ZYP7
*RR=READ()
*KYY显示行
*YY()
PROC ZYP7
PRIV KVRE
DO CASE
CASE RR=4.OR.RR=260 &&光移上移
SKIP -1
IF .NOT.BOF()
SKIP
DO (KVX) WITH KYY &&正显示一行
IF KYY=1
KVRE=RECNO()
SKIP -1
DO ZYP8
GO KVRE
ELSE
KYY=KYY-1
ENDIF
SKIP -1
KYR=RECNO()
ENDIF
CASE RR=5.OR.RR=261 &&光标下移
SKIP
IF .NOT.EOF()
SKIP -1
DO (KVX) WITH KYY
IF KYY<>KVLEN
KYY=KYY+1
ELSE
KVRE=RECNO()
SKIP -(KVLEN-2)
DO ZYP8
GO KVRE
ENDIF
SKIP
KYR=RECNO()
ENDIF
CASE RR=6.OR.RR=262 &&上翻页
SKIP -(KYY-1) &&定位本屏头记录
KVRE=1
DO WHILE .NOT.BOF().AND.KVRE<=KVLEN
SKIP -1
KVRE=KVRE+1
ENDDO
DO ZYP8
CASE RR=7.OR.RR=263 &&下翻页
SKIP KVLEN-KYY &&定位本屏尾记录
IF .NOT.EOF()
DO ZYP8
ENDIF
ENDCASE
RETURN
PROC ZYP8
*显示一屏ZYP8
*进入时先定位
*KYY当前显示行
*KYR当前记录号
*KVX显示一行子程序
*KVLEN=ALEN(YY())
PRIV SV,S_RE
SV=1
DO WHILE .NOT.EOF().AND.SV<=KVLEN
DO (KVX) WITH SV &&显示一行
KYR=IIF(SV=KYY,RECNO(),KYR)
SKIP
SV=SV+1
ENDDO
IF KYY>=SV
KYR=RECC()
KYY=SV-1
ENDIF
IF SV<=KVLEN
IF EOF()
GO BOTTOM
ENDIF
S_RE=RECNO()
GO BOTTOM
SKIP
DO WHILE SV<=KVLEN
*显示空行
DO (KVX) WITH SV
SV=SV+1
ENDDO
GO S_RE
ENDIF
RETURN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -