全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1386
推到 Plurk!
推到 Facebook!

困擾很久的問題....和Propertypage有關

尚未結案
jenpeter
一般會員


發表:39
回覆:37
積分:15
註冊:2002-08-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-26 18:03:11 IP:61.221.xxx.xxx 未訂閱
弟用Directx 做了一個case ...是有關KTV播放器的 ..此程式需做到切伴唱模式 ,我是利用呼叫系統ProPerty Page 設定的 但有一個問題很怪,就是只是只能 切換一次 後就不能切換了.. 一定要重新開一次影片才能再切換一次 ,切換channel程式碼如下: sample:SetmusicOnoff(Form1,Basefilter,True); =>伴唱(有音樂和原唱) SetmusicOnoff(Form1,Basefilter,False); =>獨唱(沒原歌手的聲音) ps:此程式需安裝DSPACK 2.3,將這斷程式碼加入Dsutil.pas中 Const IID_MpegAudioDecoder : TGUID = '{CC785860-B2CA-11CE-8D2B-0000E202599C}'; type TPropertyPageSiteObject = class(TInterfacedObject, IPropertyPageSite) protected { FRefCount: Integer; constructor Create; function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; function _AddRef: Integer; stdcall; function _Release: Integer; stdcall;} public function OnStatusChange(flags: Longint): HResult; stdcall; function GetLocaleID(out localeID: TLCID): HResult; stdcall; function GetPageContainer(out unk: IUnknown): HResult; stdcall; function TranslateAccelerator(msg: PMsg): HResult; stdcall; end; procedure SetMusicOnOff(parent:integer;Filter: IBaseFilter; OnOff:boolean); var SpecifyPropertyPages : ISpecifyPropertyPages; CAGUID :TCAGUID; hr : HRESULT; FilterGuid : TGUID; Page : IPropertyPage; pageSite : IPropertyPageSite ; punk:PUnknownList; tunk:TUnknownList; rect:trect; hdlg, hbutton:integer; clname: array [0..255] of Char; len:integer; begin punk:=@tunk; pageSite:= TPropertyPageSiteObject.Create as IPropertyPageSite; //if Filter = nil then exit; //hr := Filter.QueryInterface(IID_ISpecifyPropertyPages, SpecifyPropertyPages); //if hr <> S_OK then exit; //hr := SpecifyPropertyPages.GetPages(CAGUID); //if hr <> S_OK then exit; //FilterGuid := CAGUID.pElems^[0]; hr := CoCreateInstance(IID_MpegAudioDecoder, nil ,CLSCTX_INPROC_SERVER,IID_IPropertyPage,Page); if hr <> S_OK then exit; hr := Page.SetPageSite(pageSite); if hr <> S_OK then exit; hr := Filter.QueryInterface(IID_IUnknown,tUnk); if hr <> S_OK then exit; hr := page.SetObjects(1,punk); if hr <> S_OK then exit; rect.Left:=0; rect.Right:=1; rect.Top:=0; rect.Bottom:=1; hr := page.Activate(parent, rect, false); hdlg := GetWindow(parent, GW_CHILD); len:=255; // hdlg := FindWindowEx(parent,hdlg,'#32770',''); while not (hdlg=0) do begin hDlg := GetWindow(hDlg, GW_HWNDNEXT); getclassname(hdlg, clname, len); if string(clname) = '#32770' then break; end ; if OnOff then hButton:=FindWindowExA(hDlg,0,'Button','兩個(&O)') else hButton:=FindWindowExA(hDlg,0,'Button','第一個(&T)'); if hbutton<>0 then begin SendMessage(hButton,BM_SETCHECK,BST_CHECKED,0); SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(GetDlgCtrlID(hButton),BN_CLICKED),hButton); end ; hr := Page.Apply; Page.Deactivate; Page.SetObjects(0,nil); Page.SetPageSite(nil); Page:=nil; PageSite:=nil;; end ; /// *** CMyPropertyPageSite : IPropertyPageSite *** /// function TPropertyPageSiteObject.OnStatusChange(flags: Longint): HResult; stdcall; begin Result := S_OK; end ; { return S_OK; } function TPropertyPageSiteObject.GetLocaleID(out localeID: TLCID): HResult; stdcall; begin localeID:=0; result := S_OK; end ; { *pLocaleID = 0; return S_OK; } function TPropertyPageSiteObject.GetPageContainer(out unk: IUnknown): HResult; stdcall; begin unk:=nil; result := E_NOTIMPL; end ;
ljy_17
一般會員


發表:0
回覆:1
積分:0
註冊:2003-03-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-26 17:02:12 IP:211.162.xxx.xxx 未訂閱
你好jenpeter: SORRY!…你的問題我不知道! 能否告訴我怎樣用DSPACK來播放在內存中的多媒體文件(如mpg)? 我EMAIL是ljy_17@163.com謝謝…
jenpeter
一般會員


發表:39
回覆:37
積分:15
註冊:2002-08-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-01 12:17:52 IP:218.163.xxx.xxx 未訂閱
dspack內的範例就有了~
系統時間:2024-04-25 12:33:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!