unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, MPlayer, StdCtrls, ExtCtrls, Menus, ComCtrls, ActnList;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    PopupMenu1: TPopupMenu;
    Open1: TMenuItem;
    Exit1: TMenuItem;
    ActionList1: TActionList;
    aExit: TAction;
    aOpen: TAction;
    aResize: TAction;
    Panel2: TPanel;
    TrackBar1: TTrackBar;
    mp1: TMediaPlayer;
    procedure mp1Click(Sender: TObject; Button: TMPBtnType;
      var DoDefault: Boolean);
    procedure mp1Notify(Sender: TObject);
    procedure Panel1Click(Sender: TObject);
    procedure aExitExecute(Sender: TObject);
    procedure aOpenExecute(Sender: TObject);
    procedure aResizeExecute(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

function HMS2S(t: integer): integer; begin Result := (t shr 16)and$ff + ((t shr 8)and$ff)*60 + (t and $ff)*3600; end;

{$R *.dfm}

procedure TForm1.mp1Click(Sender: TObject; Button: TMPBtnType;
  var DoDefault: Boolean);
begin
       TrackBar1.Max := mp1.Length;
       TrackBar1.Position := mp1.Position;
       Panel1.BoundsRect := mp1.DisplayRect;
end;

procedure TForm1.mp1Notify(Sender: TObject);
begin
  with Sender as TMediaPlayer do
  begin
    case Mode of
      mpNotReady: ;//	Not ready
      mpStopped:  ;//	Stopped
      mpPlaying:  ;//	Playing
      mpRecording:;//	Recording
      mpSeeking:  begin;//	Seeking
          TrackBar1.Position := HMS2S(mp1.Position);
      end;
      mpPaused:   ;//	Paused
      mpOpen:     ;//	Open
    end;
    Notify := True;
  end;
end;

procedure TForm1.Panel1Click(Sender: TObject);
begin
   with mp1 do begin
     if (Mode = mpOpen) then aOpenExecute(self);
     if Mode = mpPlaying then Pause;
     if (Mode = mpPaused)or(Mode = mpStopped) then Play;
   end;
end;

procedure TForm1.aExitExecute(Sender: TObject);
begin
   mp1.Close;
   Close;
end;

procedure TForm1.aOpenExecute(Sender: TObject);
var fn: string;
begin
  with mp1 do begin
    if PromptForFileName(fn, 'All|*.*','', 'Open a Media File') then begin
       FileName := fn;
       Open;
       TimeFormat := tfHMS;
       aResizeExecute(mp1);
       TrackBar1.Max := HMS2S(Length);
       TrackBar1.Position := HMS2S(Position);
       Play;
    end;
  end;
end;

procedure TForm1.aResizeExecute(Sender: TObject);
var r: TRect;
begin
   r.Top := 0;
   r.Left := 0;
   r.Right := Width;
   r.Bottom := Height - Panel2.Height - 35;
   if Sender is TForm then begin
      Panel1.Height := r.Bottom;
      mp1.DisplayRect := r;
   end else
   if Sender is TMediaPlayer then begin
      Width := mp1.DisplayRect.Right;
      Height := mp1.DisplayRect.Bottom + Panel2.Height + 35;
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  aResizeExecute(Self);
end;

end.
