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:
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:
....
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:
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!
Um forte abraço!