📄 unit1.pas
字号:
else
begin
d:=d+'<LANG LANGID="804">'+z;
p:=0;
i:=i+2;
end
end ////
///////////////////////////////
else //if z<>' ' then
begin ///
if p=1 then //若上次也是英文
begin
d:=d+z;
p:=1;
i:=i+2;
end
else
begin
d:=d+'<LANG LANGID="409">'+z;
p:=1;
i:=i+2;
end
end;
//else if z=' ' then d:=d+' ';
gauge1.Progress:=(i*100) div l;//进度条
if gauge1.Progress=100 then
begin
spvoice1.Speak(d,1);
end;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
p:=100;
now:=spvoice1.Rate;//得到当前语速
richedit1.Text:='';
yinpin:=combobox1.Text;
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
spvoice1.Pause;
end;
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
spvoice1.Resume;
end;
procedure TForm1.SpeedButton7Click(Sender: TObject);
begin
inputread.Checked:=false;
try
if opendialog1.Execute then
begin
richedit1.Lines.Clear;
richedit1.Lines.LoadFromFile(opendialog1.FileName);
end;
except ON E:EReadError do
showmessage('此文件打开失败!');
end;
end;
procedure TForm1.RichEdit1SelectionChange(Sender: TObject);
begin
word:=richedit1.SelText;
end;
procedure TForm1.RichEdit1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
l:integer;//s字符串的长度
i:integer;//
z:string;
begin
if nowread.Checked then
///////////////////////////////
if czwbt.Checked then //纯中文朗读
begin
//注:此处若不将之转换为全角,则TTS会读为"点"
word:=StringReplace(word,'.','。',[rfReplaceAll, rfIgnoreCase]);
spvoice1.Speak('<LANG LANGID="804">'+word,1);
end
/////////////////////////////////////////////////////
else if cywbt.Checked then //纯英文朗读
begin
spvoice1.Speak('<LANG LANGID="409">'+word,1);
end
else if zyhhbt.Checked then //中英混合朗读
begin
gauge1.Visible:=true;
word:=StringReplace(word,'a','a',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'b','b',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'c','c',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'d','d',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'e','e',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'f','f',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'g','g',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'h','h',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'i','i',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'j','j',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'k','k',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'l','l',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'m','m',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'n','n',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'o','o',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'p','p',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'q','q',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'r','r',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'s','s',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'t','t',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'u','u',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'v','v',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'w','w',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'x','x',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'y','y',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'z','z',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,' ',' ',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,',',',',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'.','。',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,';',';',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,':',':',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'''',''',[rfReplaceAll, rfIgnoreCase]);//注意单引号的引用
word:=StringReplace(word,'<','〈',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'>','〉',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'/','/',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'\','\',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'?','?',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'|','‖',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'[','[',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,']',']',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'{','{',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'}','}',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'(','(',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,')',')',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'-','-',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'_','﹎',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'=','=',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'+','+',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'!','!',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'@','@',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'#','#',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'$','$',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'%','%',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'^','ˇ',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'&','&',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'*','※',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'1','1',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'2','2',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'3','3',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'4','4',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'5','5',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'6','6',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'7','7',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'8','8',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'9','9',[rfReplaceAll, rfIgnoreCase]);
word:=StringReplace(word,'0','0',[rfReplaceAll, rfIgnoreCase]);
//注:若加入数字过滤后,将无法朗读所有数字
//showmessage(s);//以上代码没问题
l:=length(word);
i:=1;
d:='';
while i<l do
begin
z:=Copy(word,i,2);
if (z<>'a') and (z<>'b') and (z<>'c') and (z<>'d') and (z<>'e')
and (z<>'f') and (z<>'g') and (z<>'h') and (z<>'i') and (z<>'j')
and (z<>'k') and (z<>'l') and (z<>'m') and (z<>'n') and (z<>'o')
and (z<>'p') and (z<>'q') and (z<>'r') and (z<>'s') and (z<>'t')
and (z<>'u') and (z<>'v') and (z<>'w') and (z<>'x') and (z<>'y')
and (z<>'z') or (z='1') or (z='2') or (z='3') or (z='4') or (z='5')
or (z='6') or (z='7') or (z='8') or (z='9') or (z='0')
{and (z<>'\') and (z<>'?') and (z<>'‖') and (z<>'[') and (z=']')
and (z<>'{') and (z<>'}') and (z<>'(') and (z<>')') and (z<>'-')
and (z<>'﹎') and (z<>'=') and (z<>'+') and (z<>'!') and (z<>'@')
and (z<>'#') and (z<>'$') and (z<>'%') and (z<>'ˇ') and (z<>'&')
and (z<>'※') and (z<>''')}then
begin ////
z:=StringReplace(z,'1','1',[rfReplaceAll, rfIgnoreCase]);
z:=StringReplace(z,'2','2',[rfReplaceAll, rfIgnoreCase]);
z:=StringReplace(z,'3','3',[rfReplaceAll, rfIgnoreCase]);
z:=StringReplace(z,'4','4',[rfReplaceAll, rfIgnoreCase]);
z:=StringReplace(z,'5','5',[rfReplaceAll, rfIgnoreCase]);
z:=StringReplace(z,'6','6',[rfReplaceAll, rfIgnoreCase]);
z:=StringReplace(z,'7','7',[rfReplaceAll, rfIgnoreCase]);
z:=StringReplace(z,'8','8',[rfReplaceAll, rfIgnoreCase]);
z:=StringReplace(z,'9','9',[rfReplaceAll, rfIgnoreCase]);
z:=StringReplace(z,'0','0',[rfReplaceAll, rfIgnoreCase]);
if p=0 then //若上次也是中文
begin
d:=d+z;
p:=0;
i:=i+2;
end
else
begin
d:=d+'<LANG LANGID="804">'+z;
p:=0;
i:=i+2;
end
end ////
///////////////////////////////
else //if z<>' ' then
begin ///
if p=1 then //若上次也是英文
begin
d:=d+z;
p:=1;
i:=i+2;
end
else
begin
d:=d+'<LANG LANGID="409">'+z;
p:=1;
i:=i+2;
end
end;
//else if z=' ' then d:=d+' ';
gauge1.Progress:=(i*100) div l;//进度条
if gauge1.Progress=100 then
begin
spvoice1.Speak(d,1);
end;
end;
end;
end;
procedure TForm1.SpeedButton9Click(Sender: TObject);
begin
gauge1.Visible:=false;
spvoice1.Disconnect;
radiobutton2.Checked:=true;
p:=500;//这可是个很重要的参数哟
end;
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
spvoice1.Rate:=now;
end;
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
spvoice1.Rate:=now-5;
end;
procedure TForm1.RadioButton3Click(Sender: TObject);
begin
spvoice1.Rate:=now+5;
end;
procedure TForm1.RichEdit1Change(Sender: TObject);
var l,i:integer;m,r:string;
begin
i:=1;
r:='';
m:=richedit1.Text;
if inputread.Checked then
begin
spvoice1.Rate:=now+5;
l:=length(m);
r:=Copy(m,l-1,2);
spvoice1.Speak('<LANG LANGID="804">'+r,1);
end;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
gauge1.Visible:=false;
spvoice1.Disconnect;
p:=500;//这可是个很重要的参数哟
richedit1.Lines.Clear;
radiobutton2.Checked:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
nowtime.Caption:=timetostr(time);
end;
procedure TForm1.SpeedButton5Click(Sender: TObject);
var
ErrorDescr: string;
begin
ErrorDescr := 'Call 911';
MessageDlg(
' 关于软件'+#13+
' 本软件采用微软公司先进的TTS语音合成技术,能流畅朗读中英文混合文本,'+#13+
'有慢、中、快三种语速,用户可根据待朗读内容选择朗读模式(1,纯中文2,纯英'+#13+
'文3,中英混合),支持鼠标选读(即时朗读鼠标选定的语句),录入朗读(即当用'+#13+
'户输入文本时自动朗读),音量可调,【可将文本导出保存为WAV文件】。'+#13+
' 该软件费尽本人N个脑细胞(N>99999999999999),BUG捉了一箩筐,可惜灭害'+#13+
'灵用完了,还请各位帮忙捉虫呀,有任何意见和建议请与俺联系哟!:)'+#13+
'CopyRight(2002-2003)信息安全工作室http://isxuzhu.myrice.com QQ:122512447 软件设计:风之竹 20030110'
,mtInformation,[mbOk],0);
end;
procedure TForm1.SpeedButton6Click(Sender: TObject);
var jieguo:integer;
begin
jieguo:=messageDlg('你真的要舍我而去吗?',mtConfirmation,[mbyes,mbcancel],0);
case jieguo of
6:
begin
spvoice1.Disconnect;
close;
end;
2:exit;
end;
end;
procedure TForm1.SpeedButton8Click(Sender: TObject);
var
jieguo:integer;
rom:string;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -