主题:自定义函引用问题
sdn193551
[专家分:10] 发布于 2010-02-15 16:36:00
[size=4]各位老师新年好!请教一个问题:
在表单表格的计算中会用到许多函数,有很多是vfp自带的,可以在表达式生成器中找到,但是许多情况下需要自己定义函数。在access中,自己定义函数模块会自动进入表达式生成器中,编制表达式非常方便;请问在vfp中有什么方法使自定义函数也能像access一样进入表达式生成器中,供生成表达式引用?[/size]
最后更新于:2010-02-19 19:34:00
回复列表 (共4个回复)
沙发
sdn193551 [专家分:10] 发布于 2010-02-22 15:50:00
[size=4]各位老师:
请各位老师研究一下,如何将自定义函数变成一个全局变量?全局变量是能够进入vfp的表达式生成器的。[/size]
板凳
lbscyb [专家分:4780] 发布于 2010-02-26 20:08:00
自定义个“custom”类型的类,在主程序中定义,主程序并通过调用custom类的你定义的一个方法来控制整个系统。
read events 就在你定义的一个方法中
例如,我的主程序是main:
........
oapp = Createobject("APP")
OAPP.Do()
..............
*-退出代码
Clear
Clear All
return
oapp类是我自定义的类,其DO方法中包含了系统需要处理的代码,最后一句别忘了read events 命令
3 楼
zxl931 [专家分:3420] 发布于 2010-02-28 12:00:00
创建一个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 楼
sdn193551 [专家分:10] 发布于 2010-03-04 15:54:00
[size=4]谢谢2楼、3楼两位老师的指教!
[/size]
我来回复