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為播放方式,常用的有以下標志:
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