⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pymcx.prg

📁 包括了6个VFP程序设计实例
💻 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 + -