Anitan,
Cita:
Empezado por Anitan
...Alguna idea de como Usar TMediaPlayer...
|
Revisa este código:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, MPlayer, ComCtrls, MMSystem, ShlObj;
const
MCI_SETAUDIO = $0873;
MCI_DGV_SETAUDIO_VOLUME = $4002;
MCI_DGV_SETAUDIO_ITEM = $00800000;
MCI_DGV_SETAUDIO_VALUE = $01000000;
MCI_DGV_STATUS_VOLUME = $4019;
CSIDL_MYMUSIC = $D;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
ListBox1: TListBox;
ScrollBar1: TScrollBar;
ProgressBar1: TProgressBar;
MediaPlayer1: TMediaPlayer;
Timer1: TTimer;
GroupBox1: TGroupBox;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure ListBox1DblClick(Sender: TObject);
procedure MediaPlayer1Click(Sender: TObject; Button: TMPBtnType; var DoDefault: Boolean);
procedure ScrollBar1Change(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Button3Click(Sender: TObject);
procedure MediaPlayer1Notify(Sender: TObject);
private
public
end;
MCI_DGV_SETAUDIO_PARMS = record
dwCallback: DWORD;
dwItem: DWORD;
dwValue: DWORD;
dwOver: DWORD;
lpstrAlgorithm: PChar;
lpstrQuality: PChar;
end;
MCI_STATUS_PARMS = record
dwCallback: DWORD;
dwReturn: DWORD;
dwItem: DWORD;
dwTrack: DWORD;
end;
var
Form1: TForm1;
Terminated : Boolean;
PlayList : Boolean;
implementation
{$R *.dfm}
function GetSpecialFolderPath(const CSIDL: Integer): string;
var
Buffer: Array[0..255] of Char;
begin
if SHGetSpecialFolderPath(Application.Handle, @Buffer[0], CSIDL, False) then
Result := Buffer
else
RaiseLastOSError;
end;
procedure MPSetVolume(MP: TMediaPlayer; Volume: Integer) ;
var
p: MCI_DGV_SETAUDIO_PARMS;
begin
p.dwCallback := 0;
p.dwItem := MCI_DGV_SETAUDIO_VOLUME;
p.dwValue := Volume;
p.dwOver := 0;
p.lpstrAlgorithm := nil;
p.lpstrQuality := nil;
mciSendCommand(MP.DeviceID, MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM, Cardinal(@p)) ;
end;
function MPGetVolume(MP: TMediaPlayer): Integer;
var
p: MCI_STATUS_PARMS;
begin
p.dwCallback := 0;
p.dwItem := MCI_DGV_STATUS_VOLUME;
mciSendCommand(MP.DeviceID, MCI_STATUS, MCI_STATUS_ITEM, Cardinal(@p)) ;
Result := p.dwReturn;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MediaPlayer1.VisibleButtons := [btPlay, btPause, btStop];
MediaPlayer1.Width := 271;
MediaPlayer1.Height := 30;
MediaPlayer1.TimeFormat := tfMilliseconds;
MediaPlayer1.AutoEnable := False;
MediaPlayer1.EnabledButtons := [];
ScrollBar1.Min := 0;
ScrollBar1.Max := 1000;
ScrollBar1.Position := MPGetVolume(MediaPlayer1);
ProgressBar1.Smooth := True;
ProgressBar1.Min := 0;
ProgressBar1.Max := 0;
Timer1.Interval := 1000;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if ProgressBar1.Max <> 0 then
ProgressBar1.Position := MediaPlayer1.Position;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
OpenDialog : TOpenDialog;
i : Integer;
begin
OpenDialog := TOpenDialog.Create(self);
OpenDialog.InitialDir := GetSpecialFolderPath(CSIDL_MYMUSIC);
OpenDialog.Options := [ofFileMustExist,ofAllowMultiSelect];
OpenDialog.Filter := 'MP3|*.mp3';
OpenDialog.FilterIndex := 1;
if OpenDialog.Execute then
begin
for i:= 0 to OpenDialog.Files.Count - 1 do
begin
ListBox1.Items.Add(OpenDialog.Files[i]);
if ListBox1.ScrollWidth < ListBox1.Canvas.TextWidth(OpenDialog.Files[i]) then
ListBox1.ScrollWidth := ListBox1.Canvas.TextWidth(OpenDialog.Files[i]) + 120;
end;
MediaPlayer1.EnabledButtons := [btPlay, btPause, btStop];
MediaPlayer1.FileName := ListBox1.Items.Strings[0];
MediaPlayer1.Open;
ListBox1.ItemIndex := 0;
end;
OpenDialog.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i : Integer;
begin
if ListBox1.Items.Count <> 0 then
begin
PlayList := True;
ScrollBar1.Position := MPGetVolume(MediaPlayer1);
ProgressBar1.Position := 0;
repeat
for i := 0 to ListBox1.Items.Count - 1 do
begin
ListBox1.ItemIndex := i;
MediaPlayer1.FileName := ListBox1.Items.Strings[i];
MediaPlayer1.EnabledButtons := [btPlay, btPause, btStop];
MediaPlayer1.Wait := True;
MediaPlayer1.Open;
MediaPlayer1.Play;
ProgressBar1.Max := MediaPlayer1.Length;
repeat
Application.ProcessMessages;
if Terminated then Exit;
until (MediaPlayer1.Position = MediaPlayer1.Length);
end;
until not CheckBox2.Checked;
PlayList := False;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ListBox1.Clear;
MediaPlayer1.Stop;
MediaPlayer1.EnabledButtons := [];
ProgressBar1.Position := 0;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
ScrollBar1.Position := 1000;
MPSetVolume(MediaPlayer1,ScrollBar1.Position);
MediaPlayer1.FileName := ListBox1.Items.Strings[ListBox1.ItemIndex];
MediaPlayer1.EnabledButtons := [btPlay, btPause, btStop];
MediaPlayer1.Open;
ProgressBar1.Position := 0;
ProgressBar1.Max := MediaPlayer1.Length;
if PlayList then
Terminated := True;
end;
procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
ScrollBar1.Position := 1000;
MPSetVolume(MediaPlayer1,ScrollBar1.Position);
ProgressBar1.Max := MediaPlayer1.Length;
MediaPlayer1.FileName := ListBox1.Items.Strings[ListBox1.ItemIndex];
MediaPlayer1.EnabledButtons := [btPlay, btPause, btStop];
MediaPlayer1.Open;
ProgressBar1.Position := 0;
ProgressBar1.Max := MediaPlayer1.Length;
if CheckBox1.Checked then
begin
Mediaplayer1.AutoRewind := True;
Mediaplayer1.Notify := True;
end;
MediaPlayer1.Play;
if PlayList then
Terminated := True;
end;
procedure TForm1.MediaPlayer1Click(Sender: TObject; Button: TMPBtnType; var DoDefault: Boolean);
begin
DoDefault := False;
Mediaplayer1.AutoRewind := False;
Mediaplayer1.Notify := False;
case button of
btPlay : begin
if CheckBox1.Checked then
begin
Mediaplayer1.AutoRewind := True;
Mediaplayer1.Notify := True;
end;
MediaPlayer1.Play;
ProgressBar1.Max := MediaPlayer1.Length;
end;
btStop : begin
MediaPlayer1.Stop;
MediaPlayer1.Position := 0;
Mediaplayer1.AutoRewind := False;
Mediaplayer1.Notify := False;
ProgressBar1.Max := 0;
end;
btPause : MediaPlayer1.Pause;
end;
end;
procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
MPSetVolume(MediaPlayer1, ScrollBar1.Position) ;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
Terminated := True;
end;
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
if MediaPlayer1.NotifyValue = nvSuccessful then
begin
if CheckBox1.Checked then
begin
MediaPlayer1.Play;
MediaPlayer1.Notify := True;
end;
end;
end;
end.
El código anterior
selecciona y reproduce archivos MP3 por medio del componente TMediaPlayer, como se muestra en la siguiente imagen:
El ejemplo esta disponible en el link :
http://terawiki.clubdelphi.com/Delph...ediaPlayer.rar
Espero sea útil
Nelson.