请既懂VFP又懂delphi的大侠进来看看。 ( 积分: 300 )

  • 主题发起人 主题发起人 wh_net
  • 开始时间 开始时间
W

wh_net

Unregistered / Unconfirmed
GUEST, unregistred user!
请既懂VFP又懂delphi的大侠帮我把以下这段VFP代码转换成delphi代码,谢谢。

&&初始化过程
ROCEDURE Init
public cformat,nb,cursorpos,inputdec
cformat="999,999.99" &&格式
nb=space(len(cformat)) &&当前输入文本变量
cursorpos=1 &&当前光标位置
inputdec=.f. &&小数点是否已输入
ENDPROC

&&KeyPress事件。
ROCEDURE KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl

ln=len(cformat)
dc=at(".",cformat) &&小数点位置
if nkeycode=43 or nkeycode=45 or nkeycode=46 or (nkeycode>=48 and nkeycode<=57) or nkeycode=127 or nkeycode=27 or nkeycode=7
do case
case (nkeycode>=48 and nkeycode<=57) or (nkeycode=43 and cursorpos=1) or (nkeycode=45 and cursorpos=1) &&数字键及+,-号

*增加一有效字符,光标向前移动
nb=stuff(nb,cursorpos,1,chr(nkeycode))
cursorpos=cursorpos+1

*遇分隔符,增加一分隔符,光标向前移动
cmark=substr(cformat,cursorpos,1)
if cmark<>'9'
nb=stuff(nb,cursorpos,1,cmark)
cursorpos=cursorpos+1
endif

case nkeycode=7
*当前位删除,其后位全部删除
for x=cursorpos to ln
if substr(cformat,x,1)='9'
nb=stuff(nb,x,1,' ')
endif
endfor
case nkeycode=127
*向前删除
if cursorpos>1
cursorpos=cursorpos-1 &&光标向前移动一位
if substr(cformat,cursorpos,1)<>'9' &&遇分隔符光标再向前移动一位
cursorpos=cursorpos-1
endif
for x=cursorpos to ln &&其后位全部删除
if substr(cformat,x,1)='9'
nb=stuff(nb,x,1,' ')
endif
endfor
endif
case nkeycode=27 &&放弃输入,恢复原值
case nkeycode=46 and at(".",cformat)>0 and !inputdec &&格式中有小点,小数未输入
&&小数点前有效位向小数点对齐后移,将小数点后置0,光标移到小数点后第一位
substring=substr(nb,1,cursorpos-1) &&截断已输入有效字符串
nb=space(ln) &&文本变量置空
*----------------------------
y=dc-1
for x=dc-1 to 1 step -1 &&有效位后移,从尾部开始表逐位取有效数字,向nb中置换
c=substr(substring,x,1) &&原串位置用X标识
if c>="0" and c<="9" &&无效原串位丢弃
byte=substr(cformat,y,1) &&新串位置用Y标识
if byte<>'9' &&遇格式符位加入格式符
nb=stuff(nb,y,1,byte) &&加入格式符
y=y-1
endif
nb=stuff(nb,y,1,c) &&加入有效字符
y=y-1
endif
endfor
nb=stuff(nb,dc,1,'.') &&加入小数点

*----------------------------
cursorpos=at(".",cformat)+1 &&光标移到小数点后第一位
for x=cursorpos to ln &&尾部置0
nb=stuf(nb,x,1,'0')
endfor
endcase
else
??""
&&其它移出键视同回车
endif

if cursorpos>ln &&防光标出界
cursorpos=ln
endif

if cursorpos<dc
inputdec=.f. &&重置小数输入标志
endif

thisform.refresh
ENDPROC
 
请既懂VFP又懂delphi的大侠帮我把以下这段VFP代码转换成delphi代码,谢谢。

&&初始化过程
ROCEDURE Init
public cformat,nb,cursorpos,inputdec
cformat="999,999.99" &&格式
nb=space(len(cformat)) &&当前输入文本变量
cursorpos=1 &&当前光标位置
inputdec=.f. &&小数点是否已输入
ENDPROC

&&KeyPress事件。
ROCEDURE KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl

ln=len(cformat)
dc=at(".",cformat) &&小数点位置
if nkeycode=43 or nkeycode=45 or nkeycode=46 or (nkeycode>=48 and nkeycode<=57) or nkeycode=127 or nkeycode=27 or nkeycode=7
do case
case (nkeycode>=48 and nkeycode<=57) or (nkeycode=43 and cursorpos=1) or (nkeycode=45 and cursorpos=1) &&数字键及+,-号

*增加一有效字符,光标向前移动
nb=stuff(nb,cursorpos,1,chr(nkeycode))
cursorpos=cursorpos+1

*遇分隔符,增加一分隔符,光标向前移动
cmark=substr(cformat,cursorpos,1)
if cmark<>'9'
nb=stuff(nb,cursorpos,1,cmark)
cursorpos=cursorpos+1
endif

case nkeycode=7
*当前位删除,其后位全部删除
for x=cursorpos to ln
if substr(cformat,x,1)='9'
nb=stuff(nb,x,1,' ')
endif
endfor
case nkeycode=127
*向前删除
if cursorpos>1
cursorpos=cursorpos-1 &&光标向前移动一位
if substr(cformat,cursorpos,1)<>'9' &&遇分隔符光标再向前移动一位
cursorpos=cursorpos-1
endif
for x=cursorpos to ln &&其后位全部删除
if substr(cformat,x,1)='9'
nb=stuff(nb,x,1,' ')
endif
endfor
endif
case nkeycode=27 &&放弃输入,恢复原值
case nkeycode=46 and at(".",cformat)>0 and !inputdec &&格式中有小点,小数未输入
&&小数点前有效位向小数点对齐后移,将小数点后置0,光标移到小数点后第一位
substring=substr(nb,1,cursorpos-1) &&截断已输入有效字符串
nb=space(ln) &&文本变量置空
*----------------------------
y=dc-1
for x=dc-1 to 1 step -1 &&有效位后移,从尾部开始表逐位取有效数字,向nb中置换
c=substr(substring,x,1) &&原串位置用X标识
if c>="0" and c<="9" &&无效原串位丢弃
byte=substr(cformat,y,1) &&新串位置用Y标识
if byte<>'9' &&遇格式符位加入格式符
nb=stuff(nb,y,1,byte) &&加入格式符
y=y-1
endif
nb=stuff(nb,y,1,c) &&加入有效字符
y=y-1
endif
endfor
nb=stuff(nb,dc,1,'.') &&加入小数点

*----------------------------
cursorpos=at(".",cformat)+1 &&光标移到小数点后第一位
for x=cursorpos to ln &&尾部置0
nb=stuf(nb,x,1,'0')
endfor
endcase
else
??""
&&其它移出键视同回车
endif

if cursorpos>ln &&防光标出界
cursorpos=ln
endif

if cursorpos<dc
inputdec=.f. &&重置小数输入标志
endif

thisform.refresh
ENDPROC
 
就翻译几个函数而已,为什么自己懒得干?
 
唉,我是菜鸟了呀。没办法呀。:(
 
新的一年开始了,结贴了。
祝大家新的一年工作顺利,技术进步。
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
681
import
I
I
回复
0
查看
856
import
I
I
回复
0
查看
821
import
I
后退
顶部