在VB中,有一文本框里是数字,如何用声音报出其中的数字,这个数字是变化的。
热心网友
用VB编写报分程序我们经常在计算器上、电话里听到小姐如银铃般美妙的报数声能否由计算机自动报分呢?当然可以。既然要报分,当然要有声音,你就用Win98自带的录音机录上0到10这十一个数字,每个数字保存为一个WAV文件(取名为0。wav、1。wav、……10。wav),还有点、百、千、万、分这五个字也要分别保存为WAV文件(取名为d。wav、b。wav、q。wav、w。wav、f。wav)。并将这些文件与下面编写的工程文件放在同一文件夹下。经我多次实践,每个WAV文件的发音时长为0。38秒为宜。接下来,我们就可以开始编程了。在VB6中新建一个工程文件,在Form1中建立一个Textbox控件Text1,两个CommandButton控件Command1和Command2。Text1的Text属性为空,Command1的Caption属性为“报分”,Command2的Caption属性为“退出”。源程序如下:OptionExplicitPrivateDeclareFunctionsndPlaySoundLib“winmm。dll”Alias“sndPlaySoundA”(ByVallpszSoundNameAsString,ByValuFlagsAsLong)AsLongPrivateSubbf_zcx(x,y,z)'报分子程序,y为数x的长度,z为数x的整数位数Dima,num,num1,i,tIfVal(x)=0Thena=sndPlaySound(App。Path+“\”+“0。wav”,&H0)'报0GoToaa'App。Path返回工程文件或EXE文件的当前路径EndIft=1Fori=1Toz'报整数部分num=Right(Left(x,i),1)IfNot(i=1Andz=2Andnum=1)Then'当x为十位数,且十位数为1时,不报1Ifnum=0Thent=0'当前数num为0时,不报0ElseIft=0Then'当前数不为0,而其前一数为0时,报0和当前数numa=sndPlaySound(App。Path+“\”+“0。wav”,&H0)'报0a=sndPlaySound(App。Path+“\”&num&“。wav”,&H0)'报数numt=1Elsea=sndPlaySound(App。Path+“\”&num&“。wav”,&H0)'报数numEndIfEndIfEndIfIfz-i+1=5Andnum0Then'当num为0时,不报万a=sndPlaySound(App。Path+“\”+“w。wav”,&H0)'报万EndIfIfz-i+1=4Andnum0Then'当num为0时,不报千a=sndPlaySound(App。Path+“\”+“q。wav”,&H0)'报千EndIfIfz-i+1=3Andnum0Then'当num为0时,不报百a=sndPlaySound(App。Path+“\”+“b。wav”,&H0)'报百EndIfIfz-i+1=2Andnum0Then'当num为0时,不报十a=sndPlaySound(App。Path+“\”+“10。wav”,&H0)'报十EndIfNextiIfy=zThenGoToaaa=sndPlaySound(App。Path+“\”+“d。wav”,&H0)'报点t=1Fori=z+2Toy'报小数部分num=Right(Left(x,i),1)a=sndPlaySound(App。Path+“\”&num&“。wav”,&H0)'报数numIft=3ThenExitFort=t+1 (App。Path+“\”+“f。wav”,&H0)'报分EndSubPrivateSubCommand1_Click()Dima,iIfText1。Text99999Theni=MsgBox(“分数超过99999,不允许报分!”,vbExclamation,“错误”)GoToaaEndIfa=Trim(Text1。Text)Callbf_zcx(a,Len(a),IIf(Int(Val(a))=Val(a),Len(a),InStr(a,“。”)-1))aa:EndSubPrivateSubCommand1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13Then'13为回车键KeyAscii=0'避免计算机发出报警声CallCommand1_ClickEndIfEndSubPrivateSubCommand2_Click()UnloadMe'本按钮控制软件的退出EndSubPrivateSubForm_unLoad(cancelAsInteger)End'退出程序EndSubPrivateSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13Then'13为回车键KeyAscii=0'避免计算机发出报警声CallCommand1_ClickExitSubEndIfIfKeyAscii57ThenIfKeyAscii127AndKeyAscii46AndKeyAscii8ThenKeyAscii=0Beep'发出报警声ExitSubEndIfEndIfEndSub以上程序在Win98、VB6上,运行通过。