灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3744回复:0

用delphi制作多媒体数学cai软件的方法

楼主#
更多 发布于:2012-09-08 13:05

0 引 言
  数学教学具有严密、抽象、逻辑性强的特点。传统教学媒体和手段难于表现抽象的数学概念和复杂的数量、图形变化关系。而多媒体技术是集文字、图形、图像、语音、动画等数据为一体的综合信息处理技术,因而多媒体教学软件具有直观、动态、交互性强的特点,能体现数学“数形结合”的教学思想,为学生提供一个理想的学习环境。设计教学软件,应从教育学、心理学角度出发,围绕课题的教学重点、难点,把抽象概念、内容转化成直观的多媒体信息,而不能搞成“课本搬家”,这样才能引导学生的认知从感知到理解,再上升到抽象。因此,制作数学cai软件应以“多媒体、动态显示、交互作用”等手段,通过“模拟、练习”等各种形式使抽象内容具体化,静态图形动态化,引导学生用抽象思维、动态观点揭示问题本质,提高教学质量和学习效果。
  delphi是由borland公司开发的优秀的windows开发工具。它既具有vc的强大功能,又有优于vb的可视化快速开发环境,能满足制作cai软件的所有要求,是制作cai软件的理想工具。  1 多媒体控制
1.1  图像显示
  图形组件的出现是对传统方法的巨大改进。通过使用图形按钮、网格等组件,可容易地改进应用程序的用户界面,同时可向应用程序添加强大的功能。 delphi的tgraphic及其派生类封装通用的windows图像,诸如位图、图标、图元文件等。image、imagelist、dbimage等组件有picture属性。picture的类型为tpicture,它是任何类型图像对象的容器。
  图像显示有两种方式:
  (1)设计时装入。添加image组件,用鼠标调整其大小;设置picture属性:用picture editor引入图片文件,图片自动在组件上显示出来;设置stretch属性:stretch为true时,自动调整图片大小以适合组件区域;也可设置autosize属性:autosize为true时,自动根据图片大小调整组件区域的尺寸。  (2)运行时装入。使用loadfromfile方法将一幅图像从磁盘装入图片对象中。如:
  image1.picture.loadfromfile(c:\bmp\1.bmp);
  上述两种方式,方式1的图像将作为资源,编译进exe文件中,显示速度快,适应于小图像;方式2在运行时装入,需要一定时间,适应较大图像的显示。合理搭配好图形组件,能设计出一个漂亮的界面。
1.2 mediaplayer组件
  delphi提供mediaplayer是一个功能强大而且极易使用的多媒体组件,它隐藏了mci控制的细节,使用户方便控制各种媒体。它有一组按钮:play,pause,stop,next,prev,step,back,record,eject。
  mediaplayer支持许多媒体设备,设计cai软件主要使用其中的几种:dtavivideo(avi动画设备)、dtsequencer(midi音讯器)、dtwaveaudio(wave音频设备) 。在片头或演示实验时常用avi动画,midi常用作背景音乐,wave声音用途更广,可作讲解内容,反馈教学信息,提示等。如下例可播放一个avi文件。
  (1)定义媒体设备类型,指明要播放的文件:
  form1.mediaplayer1.devicetype := dtavivideo;//也可定义为dtautoselect,根据filename文件类型自动对应媒体设备
  form1.mediaplayer1.filename := c:\delphi3\demos\cool.avi;//指明播放文件
  form1.mediaplayer1.open; //打开播放文件
  (2)设置按钮:为求界面美观,设计时先在object inspector中将visible属性置为true值,使mediaplayer不可见;对特定媒体文件,某些按钮无效可将它隐藏起来。如对avi文件,record、eject按钮就无效。
  form1.mediaplayer1.visiblebuttons := [btplay,btpause,btstop,btnext,
  btprev,btstep,btback];//设置使用的按钮
  form1.mediaplayer1.visible := true; //运行时,设置按钮可见
  (3)指定播放窗口:如果不指定播放窗口,系统会自动提供一个播放窗口,其大小位置不固定,影响美观。有必要自己指定播放窗口及播放区域,如果指定的区域与avi文件应显示的区域不同时,媒体播放器会根据播放区域自动调整画面大小。
  form1.mediaplayer1.display := form1; //指定播放窗口
  form1.mediaplayer1.displayrect := rect(20,20,160,160); //播放窗口的区域
  (4)定义播放方法:根据界面要求,有时不用mediaplayer按钮,而自定义播放控制按钮,这时需利用play,pause...等方法。如:在按钮的onclick方法中加入:form1.mediaplayer1.play播放文件,form1.mediaplayer1.close则关闭。

1.3 playsound()函数
  简单的声音播放也可以使用playsound()函数,其原型如下:
  function playsound(pszsound: pchar; hmod: hmodule; fdwsound:dword):bool;stdcall;
  其中的fdwsound为播放方式,常用的有以下标志:  

标 志   值 功    能
sndsync $0000 同步播放声音,声音播放结束函数才返回(缺省)
sndasync $0001 异步播放声音,声音开始播放后函数立即返回
sndloop $0008 重复播放直到下一次playsound
sndnostop $0010 如果有声音正在播放,函数不播放并返回

如:playsound(下一课.wav,0,sndasync)
  注意:前必须在单元中加入mmsystem单元(mmsystem源文件在delphisource\rtl\win目录下),否则不能正确编译。  
2 动画
  动画是利用人眼的视觉暂留特性,连续移动在屏幕的位置或改变操作对象大小形成动画效果。根据动画的操作对象的不同,本文将动画分为图像动画和图形动画。

2.1 图像动画
  图像动画的操作对象为已存在的图像,主要由image组件完成,操作方式为:显示/隐藏、变形、移动,组件的left、top属性决定了它在窗口的相对位置,height、width属性决定了它的大小。连续修改上述属性值就可实现组件的移动,产生图像动画。利用timer和image组件,以下程序实现了类似电视游走图片的效果。由于image组件仅支持bmp、ico、wmf等有限的图像格式,其它格式的图像须用photoshop等工具软件转换成bmp图像。
  procedure tform1.formcreate(sender: tobject);
  begin
  timer1.interval := 10;
  image1.picture.loadfromfile(c:\bmp\1.bmp);
  image1.stretch := true;
  end;
  procedure tform1.timer1timer(sender: tobject);
  var new:integer;
  begin
  new := image1.left - 10;
  if image1.left + image1.width <0 then new := form1.width ;
  image1.left := new;
  end;

2.2 图形动画
  图形动画操作对象为程序运行时绘制出的点、线、圆弧等各种几何图形。delphi的强大绘图功能是通过画布(tcanvas)表现出来的。
  画布就是窗体和其它图形组件的绘制区域,由许多属性和方法组成,这些属性和方法隐藏了所有与图形设备(gdi)有关的api,使得在delphi绘制图形非常方便。画布虽是一个对象,但它却是很多可视组件的一个属性, 编程者可以在这些组件的表面(画布的绘制区域)上随心所欲地绘图。
  tcanvas提供了许多方法,可完成常用的绘图功能,如线、圆弧、椭圆、矩形等图形的绘制和填充,字符串、图像的输出。但因其没有绘制过程的动感,很难利用这些函数制作几何图形动画,必须自己重新设计。tcanvas对象的基本作图单位是点(点的坐标系统与屏幕的坐标系统相同)。tcanvas的pixels属性就是用来获得画布上指定一个点坐标的像素色彩,并可设置像素色彩。其原型如下:
  property pixels[x, y: integer]: tcolor;
  (1)画点函数。
  如将坐标(100,100)上的点设置为红色:pixels[100,100] := clred;
  相应地从(10,10)至(300,300)画一条蓝线可用如下程序:
  for i:=10 to 300 do form1.canvas.pixels[i,i] := clblue;
  为在画点后能恢复原有色彩,本文采用notxor方式设计了画点函数:
  procedure dot(dotpoint:tpoint;dotcolor:tcolor); {画点函数:dotpoint为坐标,dotcolor为色彩}
  begin
  with form1.canvas do
  pixels[dotpoint.x,dotpoint.y] := not(pixels[dotpoint.x,dotpoint.y]xordotcolor);
  end;
  (2)延迟函数。
  为使上述画线具有动感,形成动画效果,可用如下程序:
  for i:=10 to 300 do
  begin
  dot(point(i,i),clblue xor form1.color);
  delay(10);
  end;
  其中delay()为延迟函数。为在windows中精确地控制延迟时间,不能采用计数循环,因计数循环所延迟的时间与cpu有关。本文采用了读取时钟的办法,程序如下:
  procedure delay(delaytime:integer); {延迟函数,delaytime为延迟时间,单位:毫秒}
  var now:ttimestamp;
  savetime:integer;
  begin



喜欢0 评分0
游客

返回顶部