* 以下为本系统的公用自定义函数

************************************************************************************

* 功能: 信息提示盒(info_box)   *

* 传递参数: 信息提示串,信息提示窗口标题(默认为“信息提示板”),信息窗口模式编号     *

* 返回值: 信息提示窗口按钮的编号(数值型)   *

************************************************************************************

PROCEDURE info_box

para info_str,win_name,mode0

win_name=IIF(EMPTY(win_name),'信息提示板',win_name)

m.opbut=MESSAGEBOX((info_str),mode0,(win_name))

return m.opbut

ENDPROC

*****************************************************

* 功能: 退出系统(exit_sys)*

* 传递参数: (无)*

* 返回值: 信息提示窗口按钮的编号(数值型)*

*****************************************************

PROCEDURE exit_sys

  m.exit_ch=info_box('您真的要退出本系统吗?','退出系统',36)

if m.exit_ch=6

   close all

   on shutdown

   on error

   clear

   clear dlls

       set sysmenu to defa

*       modi window screen

       cancel

endif

return m.exit_ch

ENDPROC

*

PROCEDURE shut_sys

m.exit_ch=info_box('您真的要退出本系统吗?','退出系统',36)

*if m.exit_ch=6

*   close all

   on shutdown

   on error

   clear

   clear dlls

   set sysmenu to defa

       quit

*endif

*return m.exit_ch

ENDPROC

*********************************************************

* 功能:自动折行(split_line)*

* 传递参数: 字符串,行宽度,行数*

* 返回值: 经过折行处理后的字符串(字符型)*

* 说明: 其中变量mzf1,mzf2需要定义为全程变量*

*********************************************************

PROCEDURE split_line

para mzfc,mhkd,mhs

priv mcd,mhs0,mi,mfhc

publ mzf1,mzf2

mhs0=0

mcd=len(mzfc)

mfhc=''

mzf=''

mi=1

do while mi<mcd

mzf1=subs(mzfc,mi,1)

mzf2=subs(mzfc,mi+1,1)

do case

case asc(mzf1)<161

mfhc=mfhc+mzf1

if len(mfhc)=mhkd

mhs0=mhs0+1

if mhs0=mhs

return padr(mfhc,mhkd,' ')

else

mfhc=''

endif

endif

mi=mi+1

case asc(mzf1)>160.and.asc(mzf2)>160

if len(mfhc)+2<mhkd

mfhc=mfhc+mzf1+mzf2

mi=mi+2

else

if len(mfhc)+2=mhkd

mfhc=mfhc+mzf1+mzf2

mi=mi+2

endif

mhs0=mhs0+1

if mhs0=mhs

return padr(mfhc,mhkd,' ')

else

mfhc=''

endif

endif

endcase

enddo

if mhs0=mhs-1

return padr(mfhc+iif(asc(mzf2)<161,mzf2,''),mhkd,' ')

else

return space(mhkd)

endif

return space(mhkd)

ENDPROC

*********************************************************

* 功能: 捕捉错误(exec_com)*

* 传递参数: 需要执行的foxpro命令*

* 返回值: 错误编号(数值型)*

* 说明: 错误编号非0,则说明foxpro命令格式或书写有错误*

*********************************************************

PROCEDURE exec_com

para comm

priv syserr,onerr

syserr=0

onerr=on('error')

on error syserr=error()

set console off

&comm

set console on

on error &onerr

return syserr

ENDPROC

******************************************************

* 功能: 字符串加密(STR_CODE)

* 传递参数: 字符串,模式(0表示加密,非0为解密)

* 返回值: 经过加密或解密的字符串

******************************************************

PROCEDURE STR_CODE

PARA S,MODE

PRIV ALL

S1=''

FOR I=1 TO LEN(S)

    S1=S1+BYTECODE(SUBS(S,I,1),MODE)

ENDFOR

RETURN S1

ENDPROC

*

PROCEDURE BYTECODE

PARA B,MODE

PRIV ALL

SYS_JMB1=''

SYS_JMB2=''

ZZ=FOPEN('JMB.SYS')

IF ZZ#-1

   FOR I=1 TO 128

      SYS_JMB1=SYS_JMB1+FREAD(ZZ,1)

   ENDFOR

   FOR I=1 TO 128

      SYS_JMB2=SYS_JMB2+FREAD(ZZ,1)

   ENDFOR

ENDIF

I=ASC(B)

IF MODE=0

   S=IIF(I<129,SUBS(SYS_JMB1,I+1,1),SUBS(SYS_JMB2,I-127,1))

ELSE

   WZ=AT(B,SYS_JMB1)

   WZ=IIF(WZ=0,AT(B,SYS_JMB2)+128,WZ)

   S=CHR(WZ-1)

ENDIF

=FCLOSE(ZZ)

RETURN S

ENDPROC

******************************************************

* 功能: 取出用逗号分隔的字符串(getword)

* 传递参数: 字符串,逗号的序号

* 返回值: 子串

******************************************************

PROCEDURE getword

para S,xh,spstr

PRIV ALL

GS=OCCURS(spstr,S)

IF XH>GS+1

   ZC=''

ELSE

   WZ1=IIF(XH=1,1,AT(spstr,S,XH-1)+1)

   WZ2=IIF(XH=GS+1,LEN(S)+1,AT(spstr,S,XH))

   ZC=SUBS(S,WZ1,WZ2-WZ1)

ENDIF

RETURN ZC

ENDPROC

******************************************************

* 功能: 返回某年某月的最后一天(date_last)

* 传递参数: 年,月(数值型)

* 返回值: 日期型的年.月.日

******************************************************

PROCEDURE date_last

PARA nn,yy

n=IIF(yy=12,nn+1,nn)

y=IIF(yy=12,1,yy+1)

RETU CTOD(STR(n,4)+'.'+RIGHT('0'+ALLTRIM(STR(y)),2)+'.'+'01')-1

ENDPROC

****************************************************************************

* 功能:中文日期的年份(CCYEAR)

* 传递参数: 用户指定的日期或系统日期(日期型)

* 返回值: 汉字年份(字符串)

****************************************************************************

PROCEDURE ccyear

para m_edate

if type('m_edate')<>'D' or empty(m_edate)

   return ''

endif

priv m_szc,m_i,m_cdate,m_cc

set cent on

set date ansi

m_szc='○一二三四五六七八九'

m_cdate=padl(dtoc(m_edate),10,'0')

m_cc=subs(m_szc,val(subs(m_cdate,1,1))*2+1,2)

m_cc=m_cc+subs(m_szc,val(subs(m_cdate,2,1))*2+1,2)

m_cc=m_cc+subs(m_szc,val(subs(m_cdate,3,1))*2+1,2)

m_cc=m_cc+subs(m_szc,val(subs(m_cdate,4,1))*2+1,2)+'年'

do while left(m_cc,2)='○'

   m_cc=right(m_cc,len(m_cc)-2)

enddo

return m_cc

ENDPROC

****************************************************************************

* 功能:中文日期的月份(CCmonth)

* 传递参数: 用户指定的日期或系统日期(日期型)

* 返回值: 汉字月份(字符串)

****************************************************************************

PROCEDURE ccmonth

para m_edate

if type('m_edate')<>'D' or empty(m_edate)

   return ''

endif

priv m_szc,m_i,m_cdate,m_cc

set cent on

set date ansi

m_szc='○一二三四五六七八九'

m_cdate=dtoc(m_edate)

m_cc=subs(m_szc,val(subs(m_cdate,6,1))*2+1,2)

m_cc=iif(m_cc='○','',iif(m_cc='一','十',m_cc))

m_cc0=subs(m_szc,val(subs(m_cdate,7,1))*2+1,2)

m_cc=m_cc+iif(m_cc0='○','',m_cc0)+'月'

return m_cc

ENDPROC

****************************************************************************

* 功能:中文日期的日子(CCday)

* 传递参数: 用户指定的日期或系统日期(日期型)

* 返回值: 汉字日子(字符串)

****************************************************************************

PROCEDURE ccday

para m_edate

if type('m_edate')<>'D' or empty(m_edate)

   return ''

endif

priv m_szc,m_i,m_cdate,m_cc

set cent on

set date ansi

m_szc='○一二三四五六七八九'

m_cdate=dtoc(m_edate)

m_cc=subs(m_szc,val(subs(m_cdate,9,1))*2+1,2)

m_cc=iif(m_cc='○','',iif(m_cc='一','十',m_cc+'十'))

m_cc0=subs(m_szc,val(subs(m_cdate,10,1))*2+1,2)

m_cc=m_cc+iif(m_cc0='○','',m_cc0)+'日'

return m_cc

ENDPROC

****************************************************************************

* 功能: 将日期转换为中文日期(CCdate)

* 传递参数: 用户指定的日期或系统日期(日期型)

* 返回值: 汉字日期(字符串)

****************************************************************************

PROCEDURE ccdate

para m_edate

if type('m_edate')<>'D' or empty(m_edate)

   return ''

endif

return ccyear(m_edate)+ccmonth(m_edate)+ccday(m_edate)

ENDPROC

****************************************************************************

* 功能: 求出指定日期的星期数(CCweek)

* 传递参数: 用户指定的日期或系统日期(日期型)

* 返回值: 汉字星期XX(字符串)

****************************************************************************

PROCEDURE ccweek

para m_edate

if type('m_edate')<>'D' or empty(m_edate)

   return ''

endif

priv m_szc,m_cc

m_szc='日一二三四五六'

m_cc='星期'+subs(m_szc,(dow(m_edate)-1)*2+1,2)

return m_cc

ENDPROC

******************************************************

* 功能: 播放声音(PLAY_VOICE)

* 传递参数: .WAV文件(这些文件存放的默认路径为VOICE)

* 返回值: 无

******************************************************

PROCEDURE PLAY_VOICE

PARAMETERS outside_wav_file

outside_wav_file=IIF(EMPTY(justpath(outside_wav_file)),'sound\'+outside_wav_file,outside_wav_file)

IF EMPTY(outside_wav_file) OR PARA()=0 OR !FILE('&outside_wav_file')

   RETURN

ENDIF

CREATE CURSOR wav_base (wav_file G)

APPEND BLANK

APPEND GENERAL wav_file FROM '&outside_wav_file' LINK

@ 0,0 SAY wav_file VERB 0

SELECT wav_base

USE

ENDPROC

*************************************************************

* 功能: 根据传递的代码值到指定数据表中取汉字内容            *

* 参数:   DMZ    代码值 *

*         DMK    代码库名,不含目录时为code\目录中的代码库*

*         DMZD   代码项字段名,缺省或为空''时为 '代码'*

*         DMHZZD 代码汉字字段名,缺省或为空''时为 '名称'*

*         SJKTJ  代码数据表过滤条件*

* 返回值: 对应代码的汉字内容*

*************************************************************

PROCEDURE dm_hz

PARA dmz,dmk,dmzd,dmhzzd,sjktj

sele_are=SELE()                      &&保存工作区

s_wjm=IIF('.DBF'$UPPE(dmk),dmk,dmk+'.DBF')

s_wjm=IIF(empty(justpath(s_wjm)),'code\'+s_wjm,s_wjm)

s_wjm1=juststem(s_wjm)               &&数据表别名

sjktj=IIF(PARAMETERS()<5,'',sjktj)

dmzd=IIF(EMPTY(dmzd),s_wjm1+'.代码',dmzd)

dmhzzd=IIF(EMPTY(dmhzzd),s_wjm1+'.名称',dmhzzd)

wjused_=.F.

IF USED(s_wjm1)

   SELE (s_wjm1)

   wjused_=.T.

ELSE

   IF FILE(s_wjm)

      USE (s_wjm) in 0

      SELE (s_wjm1)

   ELSE

      =info_box('打开文件出错或数据表文件&s_wjm.不存在!','',48)

      SELE (sele_are)

      RETU ''

   ENDIF

ENDIF

*

setfilt=SET('FILTER')

SET FILT TO &sjktj

LOCA FOR &dmzd = dmz

funcrtv=&dmhzzd

SET FILT TO &setfilt

IF !wjused_

   SELE (s_wjm1)

   USE

ENDIF

SELE (sele_are)

RETU IIF(TYPE('FUNCRTV')='C',ALLTRIM(funcrtv),funcrtv)

ENDPROC

********************************************************************

* 功能:从"SYSTEM.cfg"读取设置

********************************************************************

PROCEDURE READSET

PARA STR1

M.FINDSTR=.F.

FH=FOPEN('SYSTEM.CFG')

IF FH=-1

   RETURN ''

ENDIF

LINE=''

DO WHILE NOT FEOF(FH)

   LINE=FGETS(FH)

   IF UPPER(LEFT(LINE,LEN(STR1)))=UPPER(STR1)

      M.FINDSTR=.T.

      EXIT

   ELSE

      M.FINDSTR=.F.

   ENDIF

ENDDO

=FCLOSE(FH)

RETURN IIF(M.FINDSTR,RIGHT(LINE,LEN(LINE)-LEN(STR1)),.F.)

ENDPROC

*

PROCEDURE WRITESET

PARA STR1,NR

IF NOT FILE('SYSTEM.cfg')

   M.HANDLE=FCREATE('SYSTEM.cfg')

   =FPUTS(M.HANDLE,STR1+NR)

   =FCLOSE(M.HANDLE)

   RETURN

ENDIF

IF FILE('SYSTEM.BAK')

   ERASE SYSTEM.BAK

ENDIF

RENA SYSTEM.cfg TO SYSTEM.BAK

M.HANDLE=FOPEN('SYSTEM.BAK',2)

HD=FCREATE('SYSTEM.cfg')

M.WD=.F.

DO WHILE NOT FEOF(HANDLE)

   OLDSTR=LTRIM(FGETS(HANDLE))

   IF STR1==UPPE(LEFT(OLDSTR,LEN(STR1)))

      =FPUTS(HD,STR1+NR)

      M.WD=.T.

   ELSE

      =FPUTS(HD,OLDSTR)

   ENDIF

ENDDO

IF NOT M.WD

   =FPUTS(HD,STR1+NR)

ENDIF 

=FCLOSE(HD)

=FCLOSE(HANDLE)

ENDPROC


****************************************************************************

* 功能:错误处理程序(err_pro)

* 传递参数: 当前执行程序名称(一般为"sys(16)")

****************************************************************************

PROCEDURE err_pro

    PARAMETERS curprg

    LOCAL lnchoice,errinfo,cwts,errsrc,errsyntax,errstr,cr_flag,curdev

    STORE "错误来源: " TO errsrc

STORE "错误语句: " TO errsyntax

STORE "错误信息: " TO errstr

STORE CHR(13) TO cr_flag

STORE "" TO errinfo

curdev=SYS(101)

SET DEVICE TO SCREEN

DO CASE

CASE ERROR()=108

cwts='当前文件已经被另外的用户打开。'

CASE ERROR()=109

cwts='当前记录已经被另外的用户加锁。'

CASE ERROR()=110

cwts='当前操作需要用独占方式打开数据文件。'

CASE ERROR()=111

cwts='不能打开一个只读文件。'

CASE ERROR()=125

cwts='打印机没有准备好,请准备好打印机!'

OTHERWISE

cwts=MESSAGE()

ENDCASE

    errinfo = errinfo + errsrc + IIF(LEN(curprg)>60,LEFT(curprg,57)+"...",PADR(curprg,60," ")) + cr_flag

    errinfo = errinfo + errsyntax + IIF(LEN(MESSAGE(1))>60,LEFT(MESSAGE(1),57)+"...",PADR(MESSAGE(1),60," ")) + cr_flag

    errinfo = errinfo + errstr + IIF(LEN(cwts)>60,LEFT(cwts,57)+"...",PADR(cwts,60," "))

    lnchoice = info_box(errinfo,"错误提示",2+48+512)

    DO CASE

       CASE lnchoice = 3          &&停止

            SET DEVICE TO &curdev

            cancel

       CASE lnchoice = 4                         &&重试

            SET DEVICE TO &curdev

RETRY

       CASE lnchoice = 5         &&忽略

            SET DEVICE TO &curdev

            RETURN

ENDCASE

ENDPROC

****************************************************************************

* 功能:     关闭或显示系统工具栏(mtoolbar)

* 传递参数: 关闭/显示(逻辑值.T.或.F.)

****************************************************************************

PROCEDURE mtoolbar

    PARAMETERS baronoff

    DIMENSION mtoolsbar[22,2]

mtoolsbar[1,1]  ='color palette'

mtoolsbar[2,1]  ='database designer'

mtoolsbar[3,1]  ='form controls'

mtoolsbar[4,1]  ='form designer'

mtoolsbar[5,1]  ='print preview'

mtoolsbar[6,1]  ='query designer'

mtoolsbar[7,1]  ='report designer'

mtoolsbar[8,1]  ='report controls'

mtoolsbar[9,1]  ='layout'

mtoolsbar[10,1] ='standard'

mtoolsbar[11,1] ='view designer'

mtoolsbar[12,1] ='调色板'

mtoolsbar[13,1] ='数据库设计器'

mtoolsbar[14,1] ='表单控件'

mtoolsbar[15,1] ='表单设计器'

mtoolsbar[16,1] ='打印预览'

mtoolsbar[17,1] ='查询设计器'

mtoolsbar[18,1] ='报表设计器'

mtoolsbar[19,1] ='报表控件'

mtoolsbar[20,1] ='布局'

mtoolsbar[21,1] ='常用'

mtoolsbar[22,1] ='视图设计器'

FOR i = 1 TO ALEN(mtoolsbar,1)

    IF WEXIST(mtoolsbar[i,1])

       mtoolsbar[i,2] = WVISIBLE(mtoolsbar[i,1])

       IF !baronoff

          IF mtoolsbar[i,2]

             DEACTIVATE WINDOW (mtoolsbar[i,1])         &&关闭系统工具栏

          ENDIF

       ELSE

          IF NOT mtoolsbar[i,2]

             ACTIVATE WINDOW (mtoolsbar[i,1])           &&显示系统工具栏

          ENDIF

       ENDIF

    ENDIF

ENDFOR

RELEASE mtoolsbar

ENDPROC

************************************************************

* 功能: 确定指定字体描述的字符的宽度(txt_hei)

* 传递参数: 字体描述串(格式如FONT '宋体',12 STYLE 'N')

* 返回值: 宽度数值

************************************************************

PROCEDURE txt_wid

PARAMETERS str1,str2             &&被测字符串,字体描述串

style_pos = ATC("STYLE",str2)

font_pos = ATC("FONT",str2)

fontstr = IIF(style_pos # 0 , STUFF(str2,style_pos,5,",") , str2)

fontstr = IIF(font_pos # 0 , STUFF(fontstr,font_pos,4,"") , fontstr)

        RETURN TXTWIDTH(str1,&fontstr) * FONTMETRIC(6,&fontstr) / FONTMETRIC(6)

ENDPROC

************************************************************

* 功能: 确定指定字体描述的字符的高度(txt_hei)

* 传递参数: 字体描述串(格式如FONT '宋体',12 STYLE 'N')

* 返回值: 高度数值

************************************************************

PROCEDURE txt_hei

PARAMETERS str2                  &&字体描述串

style_pos = ATC("STYLE",str2)

font_pos = ATC("FONT",str2)

fontstr = IIF(style_pos # 0 , STUFF(str2,style_pos,5,",") , str2)

fontstr = IIF(font_pos # 0 , STUFF(fontstr,font_pos,4,"") , fontstr)

RETURN FONTMETRIC(1,&fontstr)/FONTMETRIC(1)

ENDPROC

************************************************************

* 功能: 数值转换到日期(ntod)

* 传递参数: 数值型的年、月、日

* 返回值: 日期型数据

************************************************************

PROCEDURE ntod

PARAMETERS yyyy,mm,dd

yyyy = STR(yyyy,4)

mm   = CHRTRAN(STR(mm,2)," ","0")

dd   = CHRTRAN(STR(dd,2)," ","0")

RETURN CTOD(yyyy+"."+mm+"."+dd)

ENDPROC

************************************************************

* 功能: 数值型数据加分节号(sec_mrk)

* 传递参数: 数值型数据转换为字符串,并去掉前后空格的字符串

* 返回值: 加分节号后的数字字符串

************************************************************

PROCEDURE sec_mrk

PARAMETERS numstr

PRIVATE xsd,numstr1,numstr2,numarr,i,num_xb,count_,ret_val

STORE "" TO numstr1,numstr2,ret_val

xsd = AT(".",numstr)

numstr1 = IIF(xsd=0,numstr,LEFT(numstr,xsd-1))

numstr2 = IIF(xsd=0,"",SUBSTR(numstr,xsd+1))

        num3pos=0

        FOR i=LEN(numstr1) TO 1 STEP -1

            num3pos=num3pos+1

            IF num3pos=3

               numstr1=STUFF(numstr1,i,0,',')

               num3pos=0

            ENDIF

        ENDFOR

ret_val = numstr1 + IIF(EMPTY(numstr2),"","."+numstr2)

RETURN IIF(LEFT(ret_val,1)=",",STUFF(ret_val,1,1,""),ret_val)

ENDPROC

**************************************************************************

* 函 数 名:ins_string                                                   *

* 功    能:在某插入点插入或替换指定的字符串                             *

* 传递参数:obj_str   = 某对象的原有值(字符型)                         *

*           Sel_Start = 某对象插入点的起始位置(数值型)                 *

*           Sel_Length= 在某对象上从插入点开始选择的字符串长度(数值型) *

*           ins_str   = 用户指定的需要插入或替换的字符串(字符型)       *

* 返 回 值:经过加工后的新字符串(字符型)                               *

**************************************************************************

PROCEDURE ins_string

          PARAMETERS obj_str,Sel_Start,Sel_Length,ins_str

          IF Sel_Start=LEN(ALLTRIM(obj_str))         &&插入点在已有字符尾部

             obj_str=ALLTRIM(obj_str)+ins_str

          ELSE                                       &&插入点在已有字符中间

             IF Sel_Length=0                         &&没选择需要删除的子字符串

                obj_str=STUFF(obj_str,Sel_Start+1,0,ins_str)

             ELSE                                    &&选择了需要删除的子字符串

                replstr=STUFF(obj_str,Sel_Start+1,Sel_Length,"")

                obj_str=STUFF(replstr,Sel_Start+1,0,ins_str)

             ENDIF

          ENDIF

          RETURN obj_str

ENDPROC

**************************************************************************

* 函 数 名:get_userinfo                                                 *

* 功    能:从注册表中获取用户信息                                       *

* 传递参数:username = 用户名 , usercorp = 组织名                        *

* 返 回 值:参量返回用户名和组织名(字符型)                             *

* 引用方法:=get_userinfo(@username , @usercorp)                         *

**************************************************************************

PROCEDURE get_userinfo

          PARAMETERS username , usercorp

          DECLARE INTEGER RegOpenKeyEx IN ADVAPI32 INTEGER nKey,STRING @cSubKey, INTEGER nReserved,INTEGER nAccessMask, INTEGER @nResult

          DECLARE INTEGER RegQueryValueEx IN ADVAPI32 INTEGER nKey,STRING cValueName, INTEGER nReserved, INTEGER @nType,STRING @cBuffer, INTEGER @nBufferSize

          DECLARE INTEGER RegCloseKey IN ADVAPI32 INTEGER nKey

          DECLARE INTEGER GetProfileString IN KERNEL32 AS GetProStr String cSection, String cKey, String cDefault,String @cBuffer, Integer nBufferSize

          UserName = ""

          UserCorp = ""

          lnResult = 0

          Buffer = SPACE(128)

          BufferSize = LEN(Buffer)

          IF UPPER(OS()) = "WINDOWS NT" OR ("WINDOWS 4" $ UPPER(OS())) OR ("WINDOWS NT" $ UPPER(OS()))

             lcKey = IIF("NT" $ UPPER(OS()), "Software\Microsoft\Windows NT\CurrentVersion","Software\Microsoft\Windows\CurrentVersion")

             lnError = RegOpenKeyEx(-2147483646,lcKey , 0, 1, @lnresult)

             IF lnError = 0

                LnType = 0

                Buffer = SPACE(128)

                BufferSize = LEN(Buffer)

                LnError = RegQueryValueEx(lnresult, "Registeredowner",0, @lnType, @Buffer, @BufferSize)

                IF lnError = 0 AND Buffer <> CHR(0)

                   UserName = LEFT(Buffer, BufferSize - 1)

                ENDIF

                lnType = 0

                Buffer = SPACE(128)

                BufferSize = LEN(Buffer)

                lnError = RegQueryValueEx(lnresult,"RegisteredOrganization", 0, @lnType,@Buffer, @BufferSize)

                IF lnError = 0 AND Buffer <> CHR(0)

                   UserCorp = LEFT(Buffer, BufferSize - 1)

                ENDIF

             ENDIF

             =RegCloseKey(lnResult)

          ELSE

             RetVal = GetProStr("MS USER INFO", "DEFNAME", "",@Buffer, BufferSize)

             UserName = LEFT(Buffer, RetVal)

             RetVal = GetProStr("MS USER INFO", "DEFCOMPANY", "",@Buffer, BufferSize)

             UserCorp = LEFT(Buffer, RetVal)

          ENDIF

ENDPROC

**************************************************************************

* 函 数 名:get_driver                                                   *

* 功    能:获得合法驱动器号                                             *

* 传递参数:(无)                                                         *

* 返 回 值:合法的驱动器号连接在一起的字符串(字符型)  形如:2335|ACDE  *

* 说    明:系统函数drivetype的返回值,含义如下:                        *

*           2,软盘驱动器号 ; 3,硬盘逻辑分区号 ; 5,光盘驱动器号      *

*           4,网络驱动器号 ; 6,虚拟磁盘驱动器号 ; 1,无驱动器号      *

**************************************************************************

PROCEDURE get_driver

          PRIVATE ALL

          m.driver_xh = ''

          m.driver_zm = ''

          FOR i=1 TO 26

              driver_no = CHR(64 + i)

              m.driver_zm = m.driver_zm + IIF(DRIVETYPE(driver_no) # 1,driver_no,'')

              m.driver_xh = m.driver_xh + IIF(DRIVETYPE(driver_no) # 1,ALLTRIM(STR(DRIVETYPE(driver_no))),'')

          ENDFOR

          RETURN UPPER(m.driver_xh+'|'+m.driver_zm)

ENDPROC

**************************************************************************

* 函 数 名:get_rand                                                     *

* 功    能:获得指定整型数字间的随机数                                   *

* 传递参数:起始数字,截止数字(整型)                                     *

* 返 回 值:起始至截止数字之间的一个数字(数值型)                       *

**************************************************************************

PROCEDURE get_rand

          PARAMETERS start_num , end_num

          RETURN INT(((end_num - start_num)+1)*RAND() + start_num)

ENDPROC

**************************************************************************

* 函 数 名:_isdigit                                                     *

* 功    能:判断输入的字符串是否是数字字串,不区分字母和汉字              *

* 传递参数:字符串,可以包含小数点,正负号,字母和汉字视同非数字字串        *

* 返 回 值:.T./.F.(逻辑型)                                            *

**************************************************************************

PROCEDURE _isdigit

          PARAMETERS sp_string

          funcretvalue = .T.

          avail_chr = '+-.0123456789'

          sp_string_len = LEN(ALLTRIM(sp_string))

          FOR ic=1 TO sp_string_len

              per_chr = SUBSTR(ALLTRIM(sp_string) , ic , 1)

              IF per_chr = SPACE(1)

                 LOOP

              ENDIF

              IF NOT (per_chr $ avail_chr)

                 funcretvalue = .F.

                 EXIT

              ENDIF

          ENDFOR

          RETURN funcretvalue

ENDPROC

**************************************************************************

* 函 数 名:_dtoc                                                        *

* 功    能:将日期型日期转换为字符串                                     *

* 传递参数:日期型/字符型日期,返回值模式                                 *

* 返 回 值:字符串日期,返回值模式=1返回年,=2返回年月,=其它则返回年月日   *

**************************************************************************

PROCEDURE _dtoc

          PARAMETERS _date , ret_all , ret_mode

          m._ret_mode = IIF(PARAMETERS()<3,0,m.ret_mode)

          IF TYPE('_date')='D'

             _yyyy = ALLTRIM(STR(YEAR(_date),4))

             _mm   = CHRTRAN(STR(MONTH(_date),2),' ','0')

             _dd   = CHRTRAN(STR(DAY(_date),2),' ','0')

          ELSE

             _date = ALLTRIM(_date)

             IF EMPTY(_date)

                RETURN '    .  .  '

             ELSE

                split_chr_num = OCCURS('.',_date)

                DO CASE

                   CASE split_chr_num = 0

                        _yyyy = _date

                        _mm   = IIF(ret_all,SPACE(2),'')

                        _dd   = IIF(ret_all,SPACE(2),'')

                   CASE split_chr_num = 1

                        _yyyy = getword(_date,1,'.')

                        _mm   = getword(_date,2,'.')

                        _dd   = IIF(ret_all,SPACE(2),'')

                   CASE split_chr_num = 2

                        _yyyy = getword(_date,1,'.')

                        _mm   = getword(_date,2,'.')

                        _dd   = getword(_date,3,'.')

                ENDCASE

             ENDIF

          ENDIF

          DO CASE

             CASE m._ret_mode = 1

                  RETURN _yyyy

             CASE m._ret_mode = 2

                  RETURN _yyyy+'.'+_mm

             OTHERWISE

                  RETURN _yyyy+'.'+_mm+'.'+_dd

          ENDCASE

ENDPROC



****************************************************

*通过报名号查询照片

****************************************************

PROCEDURE ZX

para kh1

aa='photos\'+kh1+'.jpg'

if .not.file(aa)

   aa='images\a1.jpg'

endif

return aa


发表评论