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
&&初始化过程
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