如何让windows media player 6.4和9.0的控件共存?在9.0中如何获得媒体的总时间长度?(50分)

  • 主题发起人 主题发起人 eaglepsm
  • 开始时间 开始时间
E

eaglepsm

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序中大量的代码是基于6.4的版本的,现在准备升级到9.0,但许多技术问题没有解决,所以我想暂时将6.4和9.0集成到程序中,但当我一旦在project中加入包含TWindowsMediaPlayer控件的窗体后,6.4版本的MediaPlayer11.SelectionEnd便无法访问,用6.4版本的TMediaPlayer打开asf文件后显示“未指定的错误”,无奈只有在运行时在需要使用9.0的控件时利用
Application.CreateForm(TFormWindowsMediaPlayer,FormWindowsMediaPlayer);
创建9.0的窗体,但又出现了新的问题,6.4版本的控件在未创建9.0的窗体时能够基本正常地播放asf文件(有的asf文件播放时出现停顿),一旦创建9.0的控件后,就出现“未指定的错误”,我本想利用FormWindowsMediaPlayer.Free来释放窗体,但不行,以下是我的代码:
procedure TFormMediaFileList.select_player();
var
bl:boolean;
begin

bl:=FormOptionSetDlg.CheckBoxUseWmp9.Checked;
media_ext:=ExtractFileExt(media_file_path);
//查找媒体文件的扩展名
if MicroSoftMedia.IndexOf(media_ext)<>-1 then
//用微软的播放器播放
begin

FormMediaPlay.FormStyle:=fsStayOnTop;
FormRlPlay.FormStyle:=fsNormal;
if bl=true then
//用9.0的播放器播放
begin

Application.CreateForm(TFormWindowsMediaPlayer,FormWindowsMediaPlayer);
FormWindowsMediaPlayer.Show;
FormWindowsMediaPlayer.start_play_movie_with_microsoft_control(media_file_path);
end else
//用6.4的播放器播放
begin

if FindWindow('TFormWindowsMediaPlayer', 'FormWindowsMediaPlayer')<>0 then
//如果以前已经创建了9.0的窗体则删除
begin

FormWindowsMediaPlayer.Free;
end;

FormMediaPlay.Show();

FormMediaPlay.start_play_movie_with_microsoft_control(media_file_path);

end;

FormMain.active_player:=MicroSoft
end
else
if RealNetWorkMedia.IndexOf(media_ext)<>-1 then
//用realplayer播放
begin

FormRlPlay.FormStyle:=fsStayOnTop;
FormMediaPlay.FormStyle:=fsNormal;
FormRlPlay.Show();
FormMain.start_play_movie(media_file_path);
FormMain.active_player:=RealNetWork;
end;

if FormOptionSetDlg.CheckBoxAutoRecordAfterOpenOtherMediaFile.Checked=true then

begin

//not finished
end;

hide();
end;
 
怎么没人理我呢?
 
为什么不用directshow呢?强大多啦![?]
 
我没有时间去学习directshow
 
获得总长度是比较简单的,你不仔细看一下,呵呵
 
后退
顶部