2

我想编写一个没有播放控件的可调整大小的 WindowsMediaplayer (ActiveX)。它应该适合TPanels。

4

1 回答 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 回答