求救!!! 如何实现把播放的视频限制一个TWinControl上??? 200分(200分)

  • 主题发起人 主题发起人 zenglinguo
  • 开始时间 开始时间
Z

zenglinguo

Unregistered / Unconfirmed
GUEST, unregistred user!
现在有个有多媒体解码的Dll文件(C++编译的),程序调用DLL来播放多媒体文件(DLL新建一个播放窗体),
那么有什么方法可以指定这个播放窗体在DELPHI界面的窗体中显示,比如Delphi中的多媒体控件TMediaPlayer
一样的,默认情况下,Mediaplayer也是新建一个播放窗体的,但是TMediaPlayer有一个Display属性,可以把
他的DISPLAY属性设置成对应的一个WinControl的对象(比如一个Panel对象),那么就可以在Panel中实现播放了
,他的播放区域限制在这个Panel中。
  那么请问通过调用这个Dll文件,如何实现在一个WinControl的对象上播放呢,我看了一下这个Dll的源码,他里
面是有创建新窗体的过程,能不能修改DLL源码,做到不创建新窗体,而是指向一个WinControl组件呢,如何实现呢,
 请大家出点注意
 
这个实现因该不是太难,如果你熟习DirectShow最好 啊!
给个简单代码参考一下吧!

var

pGB: IGraphBuilder;
pMC: IMediaControl;
pME: IMediaEventEx;
pMS: IMediaSeeking;
pVW: IVideoWindow;


procedure TFormMain.RunClick(Sender: TObject);
var

hr: HRESULT;
begin
CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, pGB);
pGB.RenderFile('aviDemo.AVI', nil);//媒体位置

pGB.QueryInterface(IID_IVideoWindow, pVW);
pGB.QueryInterface(IID_IMediaEventEx, pME);
pGB.QueryInterface(IID_IMediaControl, pMC);

pVW.put_Owner(Panel1.Handle);//播放窗体WinControl
pVW.put_WindowStyle(WS_Child or WS_Clipsiblings);
pVW.SetWindowPosition(0, 0, Panel1.Width, Panel1.Height);//播放窗体的大小设置

pME.SetNotifyWindow(Handle, WM_GraphNotify, 0);//播放消息

pMC.Run//开始
end;
 
谢谢这位仁兄,但能不能不用DirecxShow实现,就用windows的中的SDK能做到吗?
 
MS有DirecX的SDK,不过都是C++的!

要不把你的程序和DLL发给我,看能不能解决你的难题!

Email:jsjxuwenjun@126.com
 
后退
顶部