当前位置: 首页 > 学习 > 电脑学习 > 程序设计 > Delphi > 基础教程 > 正文

用Delphi自制英语复读机

http://www.zk168.com.cn  招考学习网 2006-4-26 12:39:50
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
用Delphi自制英语复读机

关键词:Delphi控件杂项

用Delphi自制英语复读机
李晓平
英语已经逐渐成为一种世界性的语言,现代人学习英语的热情一浪高过一浪,所以,英语复读机十分的热销。但是,无论功能如何强大的复读机都有一个明显的缺陷——复读时间的固定的。如果复读时间太短,那么,当遇到长句子时就无能为力;如果复读的时间很长,使用时就免不了复读一些多余的部分,免不了进行快进(时下有些200秒的复读机具有快进功能),这与磁带的快进一样麻烦!所以,笔者想利用Delphi强大的媒体播放控件开发一个软件复读机。软件复读机最大的优点是,无论是句子的长短您都能自如地复读!绝对不需要倒带,也不需要快进。不仅如此,软件复读机还具有随机选读功能,这是一般复读机很不好实现的。

准备工作
Delphi的媒体播放控件可已播放各种声音文件。我们可以根据自己的喜好把学习资料录制到计算机中,存成合适的格式。一般可存成wave文件或mp3文件。

复读机的开发
开发软件复读机使用的主要是Delphi的媒体播放控件TMediaplayer。该控件在系统控制(system)页中。
首先创建一个应用程序。设定主窗体的BorderStyle为BsDialog,禁止窗体的放大与缩小。设定KeyPreview为True,让主窗体处理键盘事件。
在主窗体上放置以下控件(见图):

其中:
媒体播放器是程序的关键控件,用来实现声音的播放。
TrackBar用来指示当前的播放进度。
左边的TlistBox(SectionList)用来存放将要播放的声音文件名(学习资料)。
右边的两个TlistBox(StartList、StopList)用于记录复读过的句子。
‘增加’与‘删除’按钮用于维护学习资料。
TrackBar1用于显示播放进程。
Timer1用于动态显示播放进度。
OpenDialog1用于选择播放文件。

复读功能的实现:
①    程序中设置两个整数(StartPos, SstopPos)用于记录播放的起止点,并在初始化时将StopPos赋值为-1。
②    每次播放时记录当时的起始值:StartPos := Mediaplayer1.Position;
③    程序中用空格键控制复读,回车键继续放音。首先,设置主窗体的KeyPreview为True,使主窗体能够截获按键消息。然后,重载OnKeyDown方法。代码如下:
































自由选读功能的实现:
由于在复读时记录了所有复读过的句子的起止点,所以可以进行任意一句的复读。当用户用鼠标双击‘往昔岁月’中某一行时,可直接切换到该句的播放。代码如下:
procedure TRepeaterForm.ListDblClick(Sender: TObject);begin  SID := (Sender as TListBox).ItemIndex;  //取得当前行的索引SID  StopList.ItemIndex := SID;            //将终点列表设置为SID  StartList.ItemIndex := SID;            //将起始列表设置为SID  StartPos := StrToInt(StartList.Items[SID]);//取得开始位置  StopPos := StrToInt(StopList.Items[SID]);//取得终止位置    Mediaplayer1.StoP;            //停止当前的播放  Mediaplayer1.StartPos := StartPos; //设置新的播放范围  Mediaplayer1.EndPos := StopPos;  Mediaplayer1.Play;            //播放指定范围的声音end;

学习资料的添加:
单击增加按钮用于增加学习资料。需要注意的是在增加新的文件之前应检索原有的列表,以防止重复。代码如下:
procedure TRepeaterForm.AddBtnClick(Sender: TObject);var  fn: string;begin  if OpenDialog1.Execute then begin    fn := OpenDialog1.FileName;    if SectionList.Items.IndexOf(fn)<0 then  //先检索该文件,如果不存在      SectionList.Items.Add(fn);          //加入到列表中  end;end;

学习资料的选择:
通过重载OnClick方法实现。先取得单击时的索引,然后通过Items[索引]取得文件名。将文件名赋值给Mediaplayer的Filename属性,然后调用Open方法即可。(代码略)
另外,在程序的初始化时要打开学习资料文件;程序退出时将学习资料存盘。这些功能都是通过TlistBox.Items.LoadFromFile和TlistBox.Items.SaveToFile实现的(代码略)。
该程序在中文Windows98+Delphi5.0环境下调试通过。全部源代码可Mail作者索取。





-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最新入库:
 
·实质、过程及意义——阿多尔诺“否定的辩证法”探微
·从Ontology的译名之争看哲学术语的翻译原则
·论马克思主义哲学经典的解释——解释学方法及其在马克
·中国哲学当前的核心与周边问题
·和合学与21世纪文化价值和科技
·中国文化的和合精神与21世纪
·宗教之间理当相互宽容
·上半个世纪的自由主义
·殷周至春秋时期神人关系之演进
·大学之道:构建以“三纲八目”为核心的道德修养体系
相关内容:
 
·考研英语应用文写作便条写法
·英语教学工作总结
·教学工作计划 (英语)
·学英语学出的爱国主义
·现代教育技术手段运用于英语课堂之我见
·浅谈中学生英语写作能力的培养与提高
·英语课堂教学中的创新教育
·英语教学如何适应职业技术教育
·《新维英语》故事教学模式探讨
·浅谈小学生英语学习兴趣的培养与保持
网友点评:
 
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
友情提醒:
 1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网
 友来信指正!
 2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
 3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
 4.如需转载请注明出处及作者,谢谢合作!
 5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
 6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
 7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL:  XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接!
你问我答 更多>>