首先必須確保在你的Windows系統中SYSTEM.INI文件關於[MCI]中需有MPEGVideo項(一般Windows95和Windows98中均有此項)。
次在VB中建立一個新窗口,加入多媒體部件MicrosoftMultimediaControl5.0(位於C:WindowsSystemMCI32.OCX),以及對話框部件MicrosoftCommonDialogControl5.0(位於C:WindowsSystemCOMMONDLG32.OCX),將MCI控件拖放至窗體Form上,調整其大小,並將窗體的大小也調整為與其同樣大小;將其九個按鈕(從左至右為:Prev、Next、Play、Pause、Back、Step、Stop、Record和Eject)中的Record按鈕的Visible屬性設為False,其余按鈕中的Visible屬性和Enabled屬性設為True,以上按鈕的設置可通過MMControl的屬性欄內"自定義"項來設置。對話框控件的DefaultExt屬性設為.DAT,DialogTitle屬性設為"打開多媒體文件",Filter屬性設為"*.DAT,*.WAV",InitDir屬性設為"G:MPEGAV"(假設光驅盤符為G)。
源代碼如下:
OptionExplicit
PrivateSubForm_Load()
DimResponseAsInteger
MMControl1.DeviceType="MPEGVideo"
CommonDialog1.ShowOpen'通過對話框選擇不同的VCD文件
MMControl1.filename=CommonDialog1.filename'選定要播放的文件
MMControl1.Command="Open"
MMControl1.Command="Play"
EndSub
PrivateSubForm_Unload(CancelAsInteger)
MMControl1.Command="close"
EndSub
PrivateSubMMControl1_BackClick(CancelAsInteger)'對Back按鈕的功能改進
DimiAsInteger
i=MMControl1.Position-100'數值100為後退量,可適當調整
Ifi<0ThenMMControl1.From=0
ElseMMControl1.From=i
EndIf
MMControl1.Command="Play"
EndSub
PrivateSubMMControl1_StepClick(CancelAsInteger)'對Step按鈕的功能改進
DimjAsInteger
j=MMControl1.Position 100'數值100為前進量,可適當調整
Ifj>MMControl1.LengthThenMMControl1.From=MMControl1.Length
ElseMMControl1.From=j
EndIf
MMControl1.Command="Play"
EndSub
MCI控件還有很多屬性,如畫面播放位置hWndDisplay屬性等等,大家可參閱相關資料自行摸索。
調整好窗體的標題、圖標、顏色等,然後編譯成.EXE文件,你就可以在Windows下擁有自己的VCD播放器了。
再按F5運行程序,您就會看到一單擊按鈕,文本框會立即取得輸入焦點。另外,我們還可以使用語句:Sendkeys"{TAB}"使下一個控件獲得焦點,但我們需要在設計時確定各控件的Index值。(在Properties窗口中)讓控件自己感知自己的工作已完成,而主動將焦點讓出,會使用戶覺得應用程序很聰明,也減少了用戶出錯的機會。
可是當焦點切換的兩個控件相隔有一定距離時,上述的方法有時也不足以引起用戶的注意,那麼一種好的解決方法是將鼠標箭頭也移到控件上。可惜,VB並不支持鼠標移動,那我們就求助API函數,API函數SetCursorPos可讓我們如願。
下面是子程序MoveCursorOn,它可讓鼠標移動到指定控件上方。下列代碼請放在declarations段中:
TypePoinTAPI
xAsInteger
yAsInteger
EndType
DeclareSubSetCursorPosLib"User"(ByvalxAsInteger,ByvalyAsInteger)
DeclareSubClientToScreenLib"User"(ByvalhwndAsInteger,IpPointAsPointAPI)DeclareFunctionGetParentLib"User"(Byval hwnd As Integer)AsInteger
然後建立一個新的子程序(ALT+N→N→鍵入子程序名MoveCursorOn),下面是子程序的代碼:
SubMoveCursorOn(sourceAsControl)
DimPtAsPoinTAPI
DimhparentAsInteger
p.x=(Source.Left+Source.Width/2)/Screen.Twipsperpixel)
p.y=(Source.Top+Source.Height/2)/Screen.Twipsperpixel)
hparent=GetParent(source.hwnd)
ClientToScreenhparentpt
SetCursorPos pt.x pt.y
EndSub
使用該子程序很容易,例如我們想把鼠標移動到按鈕Command1上,就可使用語句MoveCursorOnCommand1您會看到鼠標箭頭已經指著按鈕Command1。
需要說明的是,千萬不要濫用該子程序。讓鼠標自己滿屏亂飛,我們的用戶會感到失去對應用程序的控制,這是違反我們的初衷的。在有數個輸入框的窗口中(這在數據庫應用程序中是很典型的),當用戶完成第一個輸入框的輸入後,總愛習慣性的加一個回車,希望輸入焦點落到下一個輸入框中(DOS中大多數應用程序是如此),可往往事與願違,這一回車卻觸發了擁有Default特性的按鈕,結果不是關閉了當前窗口就是又蹦出另一窗口。用戶睜大眼睛看著屏幕,"咦?!我到底做了什麼?”這是Windows新用戶經常遇到的事情。解決它其實很容易,只需在輸入框的KeyPress事件中加入如下代碼:IFKeyASCII=13Then KeyASCII=0 Sendkeys"{TAB}"ENDIF這樣,當用戶在這個輸入框中鍵入Enter時,就象鍵入TAB鍵時,焦點被移到下一控件上。但需注意,這種方法不適用於多行的TextBox,即TextBox的MultiLine特性設為True時,因為這時的回車鍵是起換行的作用。
->