⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vfp开发多媒体.txt

📁 Vfp 文档 一些经典编程文章 可供初学者学习编程时使用
💻 TXT
字号:

 计算机应用
用VFP开发多媒体教学软件
刘甫迎

1 引言

  计算机辅助教学(CAI)作为一种先进的教学手段,正逐步渗透到各类学校的各个学科,使教学模式、内容和形式、课堂教学结构,以至教育思想和观念都发生了重大的变化。各种CAI课件应运而生,用计算机辅助教学更是责无旁贷。
  多媒体技术给CAI注入了新的活力。由于多媒体技术能够综合处理文本、图像、音频、视频等多种媒体,并通过视觉、听觉对人体产生多重感官刺激,使学生在较短的时间内获得较多的信息量,故国内外的CAI课件大多使用了多媒体技术。此外,国内外的CAI有向智能化,网络化发展的必然趋势。
  为了促进我校(以至国内)计算机辅助教学的发展,我们开发了“多媒体Visual FoxPro中文版教学软件系统(VFPCAI)”。
  美国微软公司的Visual FoxPro(简称VFP)已取代占微机数据库用户85%上的dBASE的地位,而成了Xbase类数据库的工业标准,中国用户很多。我校去年三月在国内率先开VFP的课后,现在开此课的学校和学习班已经很多了,我们研制出的CAI课件定有较好的市场前景和社会效益,兹介绍于下。

2 VFPCAI的组成、运行环境及特点

  多媒体Visual FoxPro中文版教学软件系统VFPCAI是用于《Visual FoxPro 中文版教程》课程的计算机辅助教学(CAI)课件,充分利用计算机VB语言的交互性及多媒体技术,为VFP课程提供一个良好的多媒体综合教学的环境,具有很强的教学功能。使其既可作为教师课堂教学使用,也可用于学生自学和实验课使用。
2.1 软件的组成
  VFPCAI包含基础篇、实战篇及练习器三个部分。共分九个教学单元:Visual FoxPro基础、表、程序设计(三种基本结构)、报表设计器、菜单设计器、数据库、表单、对象链接和嵌入、项目管理器。
2.2 运行环境
  硬件环境:586微机,声卡、音箱,网卡(若是网络环境)。
  软件环境:Windows 95操作系统,Windows NT(若是网络环境)。
2.3 功能特点
  采用动态图形及配音同步解说对VFP中如:表、报表设计器、菜单设计器、表单设计器、对象链接和嵌入等内容进行形象、直观、准确生动地演示。学生可实时操作,若在等待时间内学生未操作,系统则继续向下演示。这样能很好地帮助学生理解,有利于培养学生的动手能力;
  系统控制能力强,具有暂停、重复和恢复等功能。可用滚动条实现快进、快退,且实现了声音的实时变化;
  用户界面友好,操作简单。菜单提示,可点对象醒目;
  内容安排合理,教学能力强;
  交互性强,学习内容和进度可由使用者自行选择;
  部分智能化,根据学生选择试题答案,给出专家咨询意见、评估打分;
  可维护性强,系统采用模块化结构,易于维护;
  可上网络,多个用户同时使用;
  有帮助信息。

3 总体设计思想和主要关键技术

  在实现动画自动播放过程中,由于不需要使用者输入任何内容,故在播放区域可不设计多余的控件,便于简化设计。例如,仔细观察VFP中生成菜单的过程,可发现在VFP主窗体几乎没有变化的情况下,仅仅是弹出式菜单在变化。假如采用生成真正的AVI动画文件的方法,不仅技术较为复杂,且需要专门软件的支持才可实现,故不可取。如果将VFP中生成菜单过程中的一幅幅图片拷贝下来再连续播放也可达到如同AVI文件播放的同样效果,而且这样来做较易实现。另外,每次切换图片时如果是全屏更换的话,加上计算机速度的影响,有可能产生闪烁感。如果切换较小区域内的图片,则会产生较好的效果。由此可设想将VFP中背景图片拷贝下来作为动画中的窗体演示部分的背景,而将弹出式菜单、窗口等作为切换,这样便可占用较少的系统资源,达到较佳的演示效果。
  为了配以解说词,可以一幅画面配上一个声音文件,这样可以达到声音与画面的对应。考虑到画面较多,过程较长,需要大量的声音、图片文件支持,为了方便起见,可将其放入数据库文件中,便于管理,调用,其编程序代码也可以很简炼。
  为了有较为真实的效果,在演示区域还应有一只可移动的“鼠标”去点击所需部分,考虑到使用者应使用真“鼠标”来控制过程,演示过程没有任何输入,故可用一图片框控制来演示鼠标的移动,对学习者起到示范作用,但没有任何输入输出,也不会影响真鼠标的作用。
  为了模拟AVI动画中可自由跳转时间的功能,应在程序表单中加一滚动条,而滚动条的值可对应数据库中的记录号数。当滚动条发生变化时,数据库中记录指针发生相应变化,此时播放的图片和声音文件也会发生相应的变化,则会给使用者以时间跳转、播放过程可控制的感觉。
  以下即是程序的设计过程和主要关键技术。
  实现实战篇动画演示过程的主体是两个timer 事件、滚动条控件、以及合理的表结构。其中,一个timer控件对动画演示过程作主体控制,当它每发生一次,数据库指针就移动一次,演示区域对应的图片发生变化,配音也会发生相应变化;另一个timer控件控制假“鼠标”图形的移动过程,它每发生一次,假“鼠标”图形移动一段距离,由于它发生的时间间隔非常短,则“鼠标”图形就会产生连续滑动的感觉;滚动条控件的值对应于数据库中的记录号,二者的变化互相影响,这样就可实现对演示过程的控制。
3.1 动画、声音的同步
  在本程序中,声音与动画的同步是一个重点。我们在最先考虑声音的连续播放时,对几个VB中实现声音播放的方法均做过尝试。通过比较发现,相对说来API函数中的mcisendstring函数的实用性,可操作性较强,不易与其它程序发生冲突,应该是首选的播放手段。但在循环播放中,此函数会连续跳过前面的声音文件而只播放最后一首,因此,必须用其它方法解决此函数播放声音文件时的时间延续问题。本来在API函数中有一专门的延时函数sleep(),它可以使程序按给定时间进行延时操作,但在实际应用中,却发现该函数有一极大的弊端—即在延时过程中,任何键盘、鼠标操作均得不到及时响应,只有当延时完成后,程序才会对输入信号作出响应。因此,若放音时用sleep函数延时,则尽管声音能依次完全播放,但中途若想暂停,终止均是不可能实现的。最后,我们用sleep控件较好地完成了目标。在此,timer的interval属性起了决定性的作用,用它来作延时操作,使每条记录的声音文件均能播放完毕后再启动下一次事件(播放下一条记录),并且,timer事件过程中,鼠标操作能受到实时响应,为动画过程的暂停、终止等操作提供了依据。
  主体程序部分的timerl-timer的代码如下:
private sub timerl-timer()
timer3.Enadle=True
  ; 启动鼠标图形Image2的移动,使其移向被点击处。
Timer3.interval=10
  If Datal.Recordset.EOF=True then
timerl.Enabled=False
Exit sub
Else
Hscroll1.value= Datal.Record set.Fields("序号")
;滚动条位置与表中记录同步变化。
I2=Datal.Record set.Fields("序号")
If (i2>=25 and i2-i1<>1) 
or (i2=25 and i1=24) then
;判断背景是否需要更换。
picturel.picture=loadpicture(app.path&"\pic 总图2.bmp")
goto endl
end if
If (i2>=14 and i2-i1<>1) or (i2=14 and il=13) then
picturel.picture=loadpicture(app.path &"\pic 总图l.bmp")
goto endl
end if
if (i2<14 and i2-i1<>1) then
picturel.picture=loadpicture(app.path &"\pic 总图.bmp")
end if
end 1
Imagel.visible=False
;切换图形在切换、重新定位之前应消失
Imagel.picture=loadpicture(app.pcoth &"\pic\" &
Datal.Recordset.Fields("图片"))
Imagel.left=Datal.Recordset.Fields ("x")
Imagel.top=Datal.Recordset.Fulds ("y")
Imagel.Visible=True
Mcisendstring "close myware",o,o,o
;放下一首声音文件之前应关闭上一首。
mcisendstring "open" & app.path & "\WAV\"&
Datal.Recordset.Feclds("声音")& "alias myWAV",o,o,o
;将声音文件以myhAV别名打开。
mcisendstring "play mywAV",o,o,o
;播放声音文件。
End if
Timerl.interval=Datal.Recordset.Fields("长度")
;对播放过程延时,保证声音文件能完全播放、以及image2能完全移到目的地。这是实现声音、动画同步的关键。
Il=Datal.Recordset.Ficlds("序号")
Text7.text=Datal.Recordset.Fields("文本")
;在文本框中配上说明性文字。
Datal.Recordset.Movenext
End sub.

3.2 “鼠标”图形的动画实现
  为了增加真实感,演示过程中,当图片切换时,需要一只假“鼠标”去点击需要点击的部分。
  假“鼠标”图形可用Image2来做,移动目的地的具体坐标值也可以放入数据库的表中,随时可以调出。image2的移动过程也可由一个时间控件一timer3来控制,当timer3的触发时间间隔很短时,image2移动过程中的刷新率也很高,这会让人眼产生平滑移动的感觉。以上问题都解决了,剩下则是每次timer3事件中怎么移动的问题。因为image2应以直线运动移向目的地,且每次只能移动较短的一段距离,为了精确地“算出”移动轨迹,则只能通过数学运算来实现。
  在程序中,我们通过反三角函数算出“轨迹线”的角度,通过比较image2的当前坐标和目的地坐标来判断image2的移动方向,这样便可实时地、较精确地控制image2的移动过程。为了调用方便,我们设计了一小段子程序来实现计算角度的功能:
  Private Sub jao-du(xa,ya,xb,yb)
    ;(xa,ya) image2之当前坐标
    ;(xb,yb) 为目的地之坐标
  If yb=ya Then yb=yb+0.0001
  If xb=xa Them xb=xb+0.0001
  ;为了防止计算过程中出现分子、分母等于0的情况,在误差允许范围内,将坐标值做微小的变动,对程序不会产生明显影响。
  Jaodu=Abs(Atn((yb-yb)/(xb-xa)))
  ;为了防止干扰,将所得结果一律求绝对值。
  End Sub
  上面的程序实现了角度的求解,再加上Image2移动的具体代码便可了。

3.3 进程条拖动技术的实现
  若只从字面上来理解,可在滚动条Hscroll1的Change事件中加入相应代码,即可达到拖动滚动条控制、数据库中指针跳到相应纪录,实现声音与图片同时相应变化的作用,因此此种技术应较为容易实现。但事实上却与想象中的大有出入。当我们刚开始在Hscroll1-Change)中加入相应代码时,却发现程序往往重复执行,且拖动滚动条后也不能实现声音、图片的实时转换。解决的办法是对Hscroll1-Chang中代码段用相应调整,并将代码段
  Hscroll1.Value=Data1.Recordset.Fields(“序号”)
  从timer1-timer程序段中前移,使其在图像播放与声音播放之前先进行执行,基本上避免了对正常动画播放过程的干扰,也实现了拖动滚动条后动画过程能任意跳转的功能。基本上实现了目标。
3.4 按下退出按钮时配音的实现
  按下某按钮时配以声音会给人以耳目一新的感觉,这项技术也是较易实现的,只需在执行相应代码时播放一声音文件即可。
  从时间上考虑,退出声音的播放应在end命令以前,但事实上,声音未放完以前即被end命令终止。为了完整地播放,则考虑加上slecp()函数对其进行延时播放。
  当加上slecp()函数以后,声音能够播放完,但同时slecp()又封锁了输入输出,使退出画面固定不变,不能在播音的同时返回操作系统界面。
  于是我们从表单本身入手,即在延时函数执行以前,将表单的Visible属性改为False ,使其不可见。结果果然达到了设想的要求,即当单击关闭程序的退出按钮时,窗体被关掉,显出Win95的桌面,同时配以关闭时音乐,且能立刻执行Win95下的程序。
  本系统还使用了超文本、超图像、光标闪烁、图像滑入等多种技术,这里就不赘述了。

4 结语

  我校毕业生在毕业设计中,在导师的指导下用VB和本文所论述的技术实现了VFPCAI的全部功能。系统运行结果良好,便于使用、推广。

收稿日期:1998-07-28 刘甫迎 副教授。主要研究方向:数据库,计算机应用。
四川省重点科研项目资助课题。

作者单位: 成都电子机械高等专科学校 四川*成都(610031)
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -