Изменение размера MediaPlayer без управления кнопками воспроизведения - PullRequest
2 голосов
/ 13 октября 2010

Я хотел закодировать изменяемый размер WindowsMediaplayer (ActiveX) без элементов управления воспроизведением. это должно соответствовать TPanels.

1 Ответ

4 голосов
/ 13 октября 2010

Я должен был решить это некоторое время назад, и после долгих поисков я обнаружил, что это работает

Поместите объект WindowsMedaiPlayer на Panel и установите его выравнивание на 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 isдля IOleInPlaceObject мне пришлось добавить $(Delphi)\source\rtl\Win в путь к библиотеке, чтобы delphi нашел его.

(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);
...