關於 DSPack 如何才能重複撥放? |
尚未結案
|
Wawa
一般會員 發表:27 回覆:55 積分:16 註冊:2002-10-04 發送簡訊給我 |
|
scm001
一般會員 發表:0 回覆:12 積分:17 註冊:2002-06-11 發送簡訊給我 |
|
Wawa
一般會員 發表:27 回覆:55 積分:16 註冊:2002-10-04 發送簡訊給我 |
你好: 能不能請說清楚一點呢? Pause 應只是暫停而已, 怎麼會是回到起點呢?
在 OnGraphComplete 事件中,執行 Play 我知道, 如何判斷撥放結束我也知道, 當撥放結束時, 執行 Play 因 Position 尚未回到起點, 所以不會撥放. 當然我也知道透過 TDSTrackBar 改變 Position 就可回到起點. 但我不想額外再加 TDSTrackBar 元件. 所以才想此請教諸位前輩. 唯一不知道的且想要請教的是,如何快速回到起點, 如 MideaPlayer 的 Rewind 功能. DSPack 有此功能嗎? 謝謝!!
|
scm001
一般會員 發表:0 回覆:12 積分:17 註冊:2002-06-11 發送簡訊給我 |
|
Wawa
一般會員 發表:27 回覆:55 積分:16 註冊:2002-10-04 發送簡訊給我 |
|
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
先弄个procedure
function TWMPFORM.playtarget(targetname: string):boolean ; begin result := false; if not FilterGraph1.Active then FilterGraph1.Active:=true; FilterGraph1.ClearGraph; filtergraph1.RenderFile(targetname); FilterGraph1.Play; end;在filtergraph元件里面找到一个OnGraphComplete的事件, 那个就是在播放完毕后发生的事件, 在里面我的习惯是做个Timer去延迟两秒后播放下一个档案... procedure TWMPFORM.FilterGraph1GraphComplete(sender: TObject; Result: HRESULT; Renderer: IBaseFilter); begin timer1.Enabled:=true; end;Timer就负责延迟三秒后播放下一首,平常就enabled:=false; timer的interval我设3000 procedure TWMPFORM.Timer1Timer(Sender: TObject); begin TIMER1.ENABLED := FALSE; // 关掉~~~~ IF CURRPLAY<(LISTVIEW1.Items.COUNT-1) THEN INC(CURRPLAY) ELSE CURRPLAY:=0; playtarget(ListView1.items[currplay].SubItems[0]); end; |
JasonSu
一般會員 發表:1 回覆:10 積分:7 註冊:2003-06-26 發送簡訊給我 |
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DirectShow9, StdCtrls, ComCtrls, DSPack; type TForm1 = class(TForm) FilterGraph1: TFilterGraph; Button1: TButton; procedure FilterGraph1Activate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FilterGraph1GraphComplete(sender: TObject; Result: HRESULT; Renderer: IBaseFilter); private { Private declarations } MediaSeeking1: IMediaSeeking; public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin FilterGraph1.Active := True; FilterGraph1.RenderFile('C:\Test.Wav'); FilterGraph1.Play; end; procedure TForm1.FilterGraph1Activate(Sender: TObject); begin FilterGraph1.QueryInterface(IID_IMediaSeeking,MediaSeeking1); end; procedure TForm1.FilterGraph1GraphComplete(sender: TObject; Result: HRESULT; Renderer: IBaseFilter); var StopPosition, CurrentPosition: int64; begin FilterGraph1.Stop; If AsSigned(MediaSeeking1) Then Begin MediaSeeking1.GetStopPosition(StopPosition); CurrentPosition := 0; MediaSeeking1.SetPositions(CurrentPosition, AM_SEEKING_AbsolutePositioning, StopPosition , AM_SEEKING_NoPositioning); End; FilterGraph1.Play; end; end. 發表人 - JasonSu 於 2004/04/02 14:17:09 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |