VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

用VFP開發教學軟體(轉貼)

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
Ruey



註冊時間: 2003-03-12
文章: 1698
來自: tunglo

第 1 樓

發表發表於: 星期二 十月 21, 2003 2:56 pm    文章主題: 用VFP開發教學軟體(轉貼) 引言回覆

來源:編程園地
http://www.vfptop.com/bcxjylist.asp?id=114

用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下的程式。
  本系統還使用了超文本、超圖像、游標閃爍、圖像滑入等多種技術,這奡N不贅述了

_________________
#############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!

學會VFP使用者社區的搜尋,Code才會更有趣~
#############################
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作