Começando pela Base do Delphi, Defina um formulário com nome de FormPrincipal.
Agora, adicionando Panels para ficar com um estilo de Windows Media Player:
mediaplayer1.JPG

Setando o estilo da borda do form para: bsNone, Obtemos aquele estilo de "Sem Bordas".
Para colocar as imagens nos botões, coloque a fonte de texto do botão para: "Webdings", tam=11;
O numero "0" é o minimizar; o "2" é o maximizar e a letra "r" é o fechar.

Para que o formulário seja arrastado pelo mouse, o seguinte código terá de ser adicionado:

Declare Três variaveis no VAR da Unit Principal

  Capturando   : Boolean; //Variavel para saber se está em movimento ou não
  PosicaoMouse : TPoint;  //Variavel para armazenamento do clique.
  MusicaAtual  : Integer; //Variavel para guardar a musica atual

Na Ação OnMouseDown do Painel Principal(Você pode utilizar a mesma ação para o label), Adicione o seguinte código:


procedure TFormPrincipal.PanelTopoMouseDown(Sender: TObject; Button:TMouseButton;  Shift: TShiftState; X, Y: Integer);
begin
  if
ssleft in shift then begin
    Capturando:= True;
    PosicaoMouse.X:= X;
    PosicaoMouse.Y:= Y;
  end
  else

    Capturando:= False;
end;

Quando você seta para a var: PosicaoMouse, as coordenadas que você deu o clique, automaticamente ele fará o cálculo com base de posições diferentes da que esta armazenada

Na Ação OnMouseMove do Painel Principal(Você pode utilizar a mesma ação para o label), Adicione o seguinte código:

procedure TFormPrincipal.PanelTopoMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if
Capturando then begin
    Left:= Left - (PosicaoMouse.X - X);
    Top:= Top - (PosicaoMouse.Y - Y);
  end;
end;

Agora você está calculando realmente de acordo com a posição do mouse.

Na Ação OnMouseUp do Painel Principal(Você pode utilizar a mesma ação para o label), Adicione o seguinte código:

procedure TForm1.Panel3MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Capturando:=False;
end;

Você parou com a seleção do formulario, e agora tem que dizer que não está mais Capturado... pois senão o form ficará preso ao mouse.

Sua tela deverá ficar mais ou menos assim em Run-Time:
mediaplayer2.JPG

....

Agora Adicione, um TStringGrid ao lado, e defina as seguintes propriedades:
Align = alClient
DefaultRowHeight = 16
FixedRows = 0
FixedCols = 0
ColCount = 3
RowCount = 1
ScrollBars = ssVertical
Options -> GoHorzLine = False
Options -> GoVertLine = False
Name = StringGridPlaylist

Crie o seguinte procedimento:

Procedure EscreveLinha(Textos:Array of String; Linha:integer);
Var
  I:Integer;
Begin
  for
i:=0 to length(Textos)-1 do
    FormPrincipal.StringGridPlaylist.Cells[I, Linha]:= Textos[I];
End;

Agora este procedimento servirá para escrever linhas completas no String Grid, que mostrará os nomes das musicas.

...

No OnFormCreate Adicione o seguinte Código:

  with StringGridPlaylist do begin
    ColWidths[1]:= 50;
    ColWidths[0]:= (Width - ColWidths[1]) - 25;
    ColWidths[2]:= 0;
  end;

Este código, serve para definir o tamanho das colunas, para que elas fiquem do tamanho do StringGrid.

---

Adicione um TMediaPlayer Presente na aba System, Nomeie o de MP1, e deixe apenas visível os botões: Play, Pause, Stop

...Depois, vá na ação do TStringList e coloque a ação OnDblClick o seguinte código;

  if Trim( StringGridPlaylist.Cells[2, StringGridPlaylist.Row] ) = then Exit;  //Sai, pois não tem musica.
  mp1.FileName:=StringGridPlaylist.Cells[2, StringGridPlaylist.Row];
  mp1.Open;

*Adicione uma barra de progresso no painel inferior, com o nome de PB1, com a propriedade Smooth = True, e em Anchors -> akRight = true;
*Adicione um Label no painel do Centro com o nome de lblNomeMusica

Faça como está na foto abaixo:
mediaplayer3.JPG

Adicione estas funções, nesta ordem:
function Arquivo(Entrada:String):STring;
var
  I, P: Integer;
Begin
  for I := length(Entrada) downto 0 do
    if Entrada[i] = . then begin
      P:= I;
      Break;
    end;
  Result:= copy(Entrada, 1, I-1);
end;

Function HHMMSS(i:integer):string;
var
  HH,MM,SS: Integer;
begin
  SS:= (i div 1000);
  MM:= (SS div 60);
  HH:= (MM div 60);
  Result:= FormatFloat(00,HH)+:+ FormatFloat(00,MM)+:+ FormatFloat(00,SS);
end;

function CalculaTempo(Arquivo:String):String;
Begin
  with
TMediaPlayer.Create(nil) do begin
    FileName:= Arquivo;
    Open;
    Result:= HHMMSS(Length);
    Close;
    Free;
  end;
end;

Uma vai retornar o nome de um arquivo sem a extensão, e a outra é para o tempo.

...Depois, Volte à ação do TStringList e coloque a ação OnDblClick o seguinte código:

  if Trim( StringGridPlaylist.Cells[2, strngrd1.Row] ) = then Exit;  //Sai, pois não tem musica.
  lblNomeMusica:= Arquivo( ExtractFileName(StringGridPlaylist.Cells[2, StringGridPlaylist.Row]) );
  mp1.FileName:=StringGridPlaylist.Cells[2, StringGridPlaylist.Row];
  lblNomeMusica.Caption:=StringGridPlaylist.Cells[0, strngrd1.Row];
  mp1.Open;
  MusicaAtual:=StringGridPlaylist.Row;
 
 ProgressBar1.Max:= mp1.Length;
  mp1.Play;

---

Seu tocador já está funcionando mas falta colocar para ele abrir os arquivos, e colocar as ações dos botões, e trocar de musica.

*Adicione um PopupMenu, e ligue com o StringGrid. depois adicione um menu nele assim: "Adicionar Musica".
*Adicione um OpenDialog com o nome de dlgOpen1;

Agora vá no clique do menu "Adicionar Musica" e no evento OnClick adicione o seguinte código:

  if not dlgOpen1.Execute then Exit;
  if StringGridPlaylist.Cells[0,0] = then begin
    EscreveLinha([ Arquivo( ExtractFileName(dlgOpen1.FileName) ),
                   CalculaTempo(dlgOpen1.FileName),
                   dlgOpen1.FileName  ], 0);
  end else begin
    StringGridPlaylist.RowCount:= StringGridPlaylist.RowCount + 1;
    EscreveLinha([ Arquivo( ExtractFileName(dlgOpen1.FileName) ),
                   CalculaTempo(dlgOpen1.FileName),
                   dlgOpen1.FileName  ], StringGridPlaylist.RowCount-1);
  end;

---

Agora adicione uma variavel no VAR da unit, com o nome MudandoTempo do tipo Boolean;
Adicione um timer com a propriedade Interval para 1, e coloque o seguinte código no evento OnTimer:

  if not (mp1.Mode = mpPlaying) then Exit;
  If MudandoTempo then exit;  

  pb1.Position:= mp1.Position;

---

Vá na pb1, e no evento OnMouseMove coloque o seguinte códgio:

  if ssleft in Shift then begin
    ChangingTime:=True;
    pb1.Position:= ( x * pb1.Max ) div pb1.ClientWidth;
  end;

E depois no Evento OnMouseUp e coloque o seguinte código:
  if (mp1.Mode = mpPlaying) then begin
    mp1.Position:= pb1.Position;
    mp1.Play;
    ChangingTime:=False;
  end;

---

Va na Ação OnNotify do TMediaPlayer e coloque o seguinte código:

procedure TFormPrincipal.mp1Notify(Sender: TObject);
begin
  if
(mp1.Position = mp1.Length) and (mp1.FileName <> ) then Begin
    if MusicaAtual = StringGridPlaylist.RowCount-1 then
      MusicaAtual:=0
    else
      MusicaAtual:= MusicaAtual +1;

    mp1.FileName:=StringGridPlaylist.Cells[2, MusicaAtual];
    lblNomeMusica.Caption:=StringGridPlaylist.Cells[0, MusicaAtual];
    mp1.Open;
    pb1.Max:= mp1.Length;
    mp1.Play;
  end;
end;

---

Acertando os botões.... o mais simples fica por último!

vá no botão de fechar e coloque o código:
  Close.

...no botão de maximizar / restaurar coloque o código:
  if WindowState = wsNormal then
    WindowState := wsMaximized
  else
    WindowState := wsNormal;

...e no minimizar coloque:
  application.minimize;

---------------------------------

acho que é o suficiente =D
Agora... uma foto dele em ação!
mediaplayer4.JPG

Um forte abraço!