我想编写一个没有播放控件的可调整大小的 WindowsMediaplayer (ActiveX)。它应该适合TPanels。
问问题
3547 次
1 回答
4
不久前我不得不解决这个问题,经过大量谷歌搜索后,我发现它可以工作
在 Panel 上放一个 WindowsMedaiPlayer 对象,并设置它的 align 为 alclient,
可以隐藏播放器控制区域uiMode := 'none'
,在 ide 或代码中设置
然后分配面板调整大小事件
uses Ole2;
procedure TForm1.Panel1Resize(Sender: TObject);
const
IID_IOleInPlaceObject: SYSTEM.TGUID = '{00000113-0000-0000-C000-000000000046}';
var
IOIPObj: IOleInPlaceObject;
begin
SYSTEM.IDispatch(WindowsMediaPlayer1.OleObject).QueryInterface(IID_IOleInPlaceObject, IOIPObj);
IOIPObj.SetObjectRects(Panel1.ClientRect, Panel1.ClientRect);
end;
procedure TForm1.Play;
begin
WindowsMediaPlayer1.uiMode := 'none'; //show no interface, this can be set from the ide
WindowsMediaPlayer1.URL := 'movie.mpg';
WindowsMediaPlayer1.stretchToFit := True;
WindowsMediaPlayer1.Controls.play;
end;
改编自http://our.obor.us/node/1999
Ole2 用于 IOleInPlaceObject,我必须添加$(Delphi)\source\rtl\Win
到 delphi 的库路径才能找到它。
(德尔福 7,wmp 11)
额外:一些更容易使用的东西
uses Ole2;
procedure SmoothResizeMediaPlayer(aMediaPlayer: TWindowsMediaPlayer; PosRect,ClipRect:Trect);
const
IID_IOleInPlaceObject: SYSTEM.TGUID = '{00000113-0000-0000-C000-000000000046}';
var
IOIPObj: IOleInPlaceObject;
begin
SYSTEM.IDispatch(aMediaPlayer.OleObject).QueryInterface(IID_IOleInPlaceObject, IOIPObj);
IOIPObj.SetObjectRects(PosRect, ClipRect);
end;
并调用
SmoothResizeMediaPlayer(WindowsMediaPlayer1, panel1.ClientRect, panel1.ClientRect);
于 2010-10-13T04:14:29.193 回答