2010-10-13 19 views

Répondre

3

je devais travailler ceci il y a un certain temps, et après beaucoup de googler je trouve que cela fonctionne

Mettez un objet WindowsMedaiPlayer sur le panneau, et en réglant son alignement à alClient,
la zone de contrôle du lecteur peut être masquée avec uiMode := 'none', situé dans le ide ou un code

attribuant ensuite les panneaux redimensionner événement avec

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; 

Adapté de http://our.obor.us/node/1999

Ole2 est pour IOleInPlaceObject, j'ai dû ajouter $(Delphi)\source\rtl\Win au chemin de la bibliothèque pour Delphi pour le trouver.

(delphi 7, wmp 11)

supplémentaire: Quelque chose un peu plus facile à utiliser

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; 

et appelé avec

SmoothResizeMediaPlayer(WindowsMediaPlayer1, panel1.ClientRect, panel1.ClientRect);