• 沒有找到結果。

試題編輯器設計

5.5.1 使用者介面設計

使用者介面設計以圖 20 之,分別說明如下:

(1) 樣板選擇介面

提供使用者在選擇樣板庫時選擇畫面,畫面會依據所選取出來的樣板型式,

再自動產生一個識別代碼而生成一個試題的預覽畫面。

(2) 新增自定範本介面

提供使用者在系統所提供的樣板外,需以自訂方式加入樣板時的操作介面。

圖 20 使用者介面設計

提供使用者在編輯期間可以以直覺化的方式呈現所做的編輯動作,如對元件 進行置換來源時,系統將所提供置換的元件的內容,如聲音的立即播放、影 片的內容試播、文字的字型外觀的改變立即呈現出來,調整後的狀態可於編 輯介面中馬上反應出效果。

5.5.2 多媒體元件類別設計(CText、CGraphic、CSound、CMmovie Class)

系統中提供四種多媒體元件:文字、圖片、聲音、影片元件,每一個元 件設計成一個類別(Class),以 CText 代表文字元件、CGraphic 代表圖片元件、

CSound 代表聲音元件、CMovie 代表影片元件,都繼承於容器(Container)

的 CtntContainer 類別與原始類別(Base Class) CBase。

CBase 中定義每一個元件的基本屬性與滑鼠按下(MouseDown)事件、

雙擊(MouseDBClick)事件、選取(MouseSelect)等基本事件(event)以及 元件的類型、前後順序(Z-Index)、是否在場景上出現等屬性。

CtntContainer 類別為一個放置多媒體元件裝置類別,繼承自 CBase 類別,

在此 CtntContainer 類別中定義了元件的大小與彈出式選單(Popup Menu)的 函數,以這一個 CtntContainer 類別作為文字元件、圖片元件、聲音元件與影 片元件的繼承類別,其設計的主要目的在於提供元件容器的置換彈性。

CBase

CtntContainer

CText CGraphic CSound CMovie

圖 21 元件類別設計

(1) CText:文字元件類別,繼承自 CtntContainer 類別,當多媒體元件以文字 表示時,以此類別呈現文字於編輯場景上,元件的屬性包括文字呈現的內 容、文字的顏色、大小、字型等,提供的函數包括 ReDrawCText(重繪文 字外觀)、GetActorAttributes(取得元件屬性) 、SetActorProperties(設定 屬性)等。

表 5 CText 類別函數

函數 說明

ReDrawCText(CBase* pObject) 重繪文字外觀 GetActorAttributes(); 取得元件屬性 SetActorProperties( char* PropName,const char*

iValue)

設定元件屬性 GetPropertiesValue(char* PropName) 取得元件特定屬性 ChangeTXTColor(TObject* Sender) 改變文字顏色 ChangeTXTApperance(CBase *Sender) 改變文字外觀 ChangeFontPreviewApperance(TObject *Sender) 預覽文字調整效果 ActorSelected(TObject* Sender) 判斷文字是否被選取 ActorTextMouseDbClick(TObject* Sender) 判斷文字是否被雙擊 (2) CGraphic:圖片元件類別,繼承自 CtntContainer 類別,用以呈現圖片元件

於編輯場景上,元件的屬性包括圖片呈現的來源、圖片的、大小、位置、

透明度、圖片是否出現於試題中,提供的函數包括 ReDrawCGraphic(重繪 文字外觀)、GetActorAttributes(取得元件屬性) 、SetActorProperties(設 定屬性)。

表 6 CGraphic 類別函數

函數 說明

getImageSize() 取得圖片大小

SetActorProperties( char* PropName,const char*

iValue)

設定元件屬性 GetPropertiesValue( char* PropName) 取得元件特定屬性 ReDrawCGraphic(CBase* pObject) 重會文字外觀

getImagePath() 取得圖片路徑

ActorGraphicAttChange(TObject*Sender,

TMouseButton Button,Classes::TShiftState Shift, int X, int Y)

更改圖片元件屬性

ActorSelected(TObject* Sender) 判斷圖片是否被選取 ActorGraphicMouseDbClick(TObject* Sender) 判斷圖片是否被雙擊 (3) CSound:聲音元件類別,繼承自 CtntContainer 類別,以一個圖片代替聲音

元件顯示於編輯場景上,元件的屬性包括聲音播放的來源、聲音圖示的位 置、圖示是否出現於試題中,提供的函數包括 StartRecording (錄音)、

PlaySound (聲音播放) 、ReplaceSoundSrc (更換聲音來源)。

表 7 CSound 類別函數

函數 說明

StartRecording (CBase* pObject) 播放聲音元件內容 PlaySound(CBase* pObject) 播放聲音元件內容 RecordSnd(TObject* pObject) 錄音

StopSaveSnd(TObject* pObject) 停止錄音並儲存檔案 ReplaceSoundSrc(CScenceManager* pObject) 置換聲音元件 ReDrawCSound(CBase* pObject) 重繪聲音元件圖示 GetPropertiesValue( char* PropName) 取得元件單一屬性 ActorSelected(TObject* Sender) 判斷聲音是否被選取 ActorSoundMouseDbClick(TObject* Sender) 判斷聲音是否被雙擊 (4) CMovie:聲音元件類別,繼承自 CtntContainer 類別,在編輯期間設計成以

一個圖片圖示代替影片元件顯示於編輯場景上,元件的屬性包括影片播放 的來源、影片圖示的位置、圖示是否出現於試題中,提供的函數包括 GetVideoStream (影片預覽縮圖)、ReDrawCMovie (重繪影片元件) 、 PlayMovie (預覽影片)。

表 8 CMovie 類別函數

函數 說明

ReDrawCMovie(CBase* pObject) 重繪文字外觀 GetActorAttributes(); 取得元件屬性 SetActorProperties( char* PropName,const char*

iValue)

設定元件屬性 GetPropertiesValue( char* PropName) 取得元件特定屬性 ChangeMovieSrc( Cbase* Sender) 改變影片來源 GetVideoStream(char*szFile,PAVISTREAM

*gapavi,AVISTREAMINFO *avis)

影片預覽縮圖產生器 PlayMovie(CBase* pObject) 播放影片內容 ActorSelected(TObject* Sender) 判斷影片是否被選取 ActorMovieMouseDbClick (TObject* Sender) 判斷影片是否被雙擊

5.5.3 多媒體編輯動作類別設計(CMAction Class)

為了實現視覺化編輯環境的功能,設計編輯動作類別(CMAction Class) 點的 CGreateGrids 類別的設計函數:

表 9 CMAction 類別函數的設計

函數 說明

CMAction() Constructor

CPopupMenu(TWinControl* scence,CBase*& pcb)滑鼠右鍵彈出式視窗 CMdeleteCBase(CBase*& pBase) 刪除元件

CMCopyCBase(CBase*& pBase) 複製元件

CMBringToFrontCBase(CBase*& pBase) 將元件推到頂層 CMSendToBackCBase(CBase*& pBase) 將元件推到後層 CBaseMouseDownEvent(CBase* Sender) 定義滑鼠按下事件 CBaseMouseDbClick(CBase* Sender,int iType) 定義滑鼠雙擊事件 CBasePropertyChange(CBase* Sender) 改變元件屬性值

Set8Grips(CBase* pObject) 設定元件被選取時控點 AddActorList(CBase* pcb,bool duplicatemode) 將元件加入元件清單 DeleteActorList(CBase* pcb) 從元件清單刪除

表 10 CCreateGrids 類別函數的設計

函數 說明

FSetMoveResize(bool value) 設定控點是否允許拖放 FSetShowGrids(bool value) 設定控點是否出現 FGetMoveResize() 讀出控點是否允許拖放 GripsOnMouseDown(TObject* Sender,

TMouseButton Button,TShiftState Shift, int X, int Y)

當控點被按下的動作

5.5.4 多媒體編輯器類別設計(CPlayer Class)

編輯試題時,必須先將題目的描述語言載入到編輯畫面,將一些紀錄描述 的元件轉成可見的多媒體元件,此一將描述語言轉譯到編輯畫面的功能設計 由 CPlayer 類別完成,繼著載入完成的多媒體元件,所進行的編輯動作就由 CMAction 類別的設計函數完成之。

表 11 CPlayer 類別函數的設計

函數 說明

SaveAsScriptClick() 儲存描述語言

SaveAsScriptToHTMLClick() 轉存描述語言為 HTML 檔

PopNewGraphic(TObject *Sender) 滑鼠右鍵彈出式新增圖片元件命令 PopNewText(TObject *Sender) 滑鼠右鍵彈出式新增文字元件命令 PopNewSound(TObject *Sender) 滑鼠右鍵彈出式新增聲音元件命令 PopNewMovie(TObject *Sender) 滑鼠右鍵彈出式新增影片元件命令 PopNewRadioBtn(TObject *Sender) 滑鼠右鍵彈出式新增選取鈕元件命令 PopNewChkBXBtn(TObject *Sender)滑鼠右鍵彈出式新增核取鈕元件命令 PopNewTextBtn(TObject *Sender) 滑鼠右鍵彈出式新增單行文字欄元件

命令

iX,DWORD iY)

更改解析度函數 TraverseTree ( CTreeNode* ptr,const

string NodeType,const int iScriptType)

尋找特定媒體元件節點(NODE)

LoadNode(CTreeNode* NodeStart, const string sNodeType,const int iType ,TWinControl* wctlScence)

載入特定媒體元件的相關屬性值

LoadScriptToScence(const string sFileName, TWinControl* wctlScence)

將 LoadNode 函數所執行的結果載入 到場景上

5.5.5 多媒體編輯器工具按鈕類別設計(CSceneManager Class)

(1) 系統提供多媒體的試題樣板,可以在試題所使用的元件上置換所呈現 的內容,因此 CSceneManager 類別針對所提供的置換資源,加以組織 管理,在編輯期間,只要系統得知所要置換的元件型態,就能將所提 供的資源以視覺化的方式呈現提供使用者選取使用。

(2)工具按鈕:系統提供工具按鈕於編輯器的環境中,以不同圖示代表不 同的工具用途,在 CSceneManager 類別中依據不同的工具按鈕被按下 觸發之後,會切換不同的場景與對話框畫面,因此工具按鈕在放置於 編輯器之前,每一個按鈕都會產生屬於這一個按鈕事件所對應的獨立 識別代號(ID),如果在編輯試題期間,有任何的工具按鈕被按下,根 據所對應的獨立識別代號就能正確的判斷應該切換到哪一個場景。

圖 22 編輯器工具按鈕

相關文件