2

再生コントロールなしで、サイズ変更可能な WindowsMediaplayer (ActiveX) をコーディングしたいと考えていました。TPanels に適合する必要があります。

4

1 に答える 1

4

私はこれを少し前に解決しなければなりませんでしたが、多くのグーグル検索の後、これが機能することがわかりました

WindowsMedaiPlayer オブジェクトを Panel に配置し、その align を alclient に設定すると
、プレイヤー コントロール領域を非表示にすることができ、 IDEuiMode := 'none'またはコードで設定します

次に、パネルのサイズ変更イベントを割り当てます

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 に答える