回 帖 发 新 帖 刷新版面

主题:自定义函引用问题

[size=4]各位老师新年好!请教一个问题:
     在表单表格的计算中会用到许多函数,有很多是vfp自带的,可以在表达式生成器中找到,但是许多情况下需要自己定义函数。在access中,自己定义函数模块会自动进入表达式生成器中,编制表达式非常方便;请问在vfp中有什么方法使自定义函数也能像access一样进入表达式生成器中,供生成表达式引用?[/size]

回复列表 (共4个回复)

沙发


[size=4]各位老师:
  请各位老师研究一下,如何将自定义函数变成一个全局变量?全局变量是能够进入vfp的表达式生成器的。[/size]

板凳

自定义个“custom”类型的类,在主程序中定义,主程序并通过调用custom类的你定义的一个方法来控制整个系统。
read events 就在你定义的一个方法中
例如,我的主程序是main:
........
oapp = Createobject("APP")
OAPP.Do()
..............

*-退出代码
Clear
Clear All
return

oapp类是我自定义的类,其DO方法中包含了系统需要处理的代码,最后一句别忘了read events 命令

3 楼

创建一个prg文件,比如:myfunction.prg,其内容如下(可以将自定义函数全部放到这个文件中):

*!*以下函数将汉字转换成首拼音缩写,例如:张学友->ZXY
FUNCTION ChrToPy
    LPARAMETER cHZCHR
    LOCAL cPYCHR,i,j,ChrToPy,HZ
    cPYCHR=""
    PYCode="八嚓咑妸发旮铪讥讥咔垃呣拿讴趴七呥仨他哇哇哇夕丫匝咗" &&从b开始的每个拼音声母的首字符
    FOR  i=1 TO LEN(cHZCHR)
        IF ASC(SUBSTR(cHZCHR,i,1))>160 &&判断是否为汉字
            HZ=SUBSTR(cHZCHR,i,2)
            ChrToPy=""
            FOR j=1 TO 26
                IF SUBSTRC(HZ,1,1)<SUBSTRC(PYCode,j,1) &&进行汉字比较
                    ChrToPy=CHR(96+j)  &&得到声母
                    EXIT
                ENDIF
            ENDFOR
            cPYCHR=cPYCHR+UPPER(ChrToPy)
            i=i+1
        ELSE
            cPYCHR=cPYCHR+UPPER(SUBSTR(cHZCHR,i,1))
        ENDIF
    ENDFOR
    RETURN cPYCHR
ENDFUNC

FUNCTION FindApp  &&查找外部应用程序是否打开
  .....
  .....
ENDFUNC

等等


要引用这个函数前,必须在你程序中加入以下命令(以下命令可放到主程序中):
SET PROCEDURE TO myfunction.prg ADDITIVE &&这样VFP就知道你的自定义函数的存放位置了

然后你可以在程序的任何地方只用函数名来引用这个函数,就像他是VFP自带函数一样,例如:
1、? ChrToPy("梅子论坛")  &&显示"MZLT"
2、Update 货品表 set 简拼=ChrToPy(货品名称)

二楼的方法也不错,我也用过。

4 楼

[size=4]谢谢2楼、3楼两位老师的指教!
[/size]

我来回复

您尚未登录,请登录后再回复。点此登录或注册