主要作者:万一
--------------------------------------------------------------------------------
代码文件:
--------------------------------------------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MPlayer;
type
TForm1 = class(TForm)
Button1: TButton;
MediaPlayer1: TMediaPlayer;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
MediaPlayer1.Visible := False;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MediaPlayer1.FileName := 'c:\temp\Test.mp3';
MediaPlayer1.Open;
MediaPlayer1.Play;
end;
end.
--------------------------------------------------------------------------------
窗体文件:
--------------------------------------------------------------------------------
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 149
ClientWidth = 270
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 96
Top = 72
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
object MediaPlayer1: TMediaPlayer
Left = 8
Top = 24
Width = 253
Height = 30
TabOrder = 1
end
end
--------------------------------------------------------------------------------
这样我懂,TMediaPlayer能不能像一个变量一样,可以随时申明,随时应用的,我的代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
mm: TMediaPlayer;
begin
mm := TMediaPlayer.Create(Self);
mm.FileName := 'F:\音乐\刘德华-黑蝙蝠中队.mp3';
mm.AutoOpen := True;
mm.Play;
end;
这里我把它定义成一个变量,可就是运行会出错,我想应该是mm := TMediaPlayer.Create(Self); 这个有问题,它需要个 TComponet类型,但我不知道怎么弄, 只是把 self 弄进去,感觉应该是这边错, 老师这个要怎么建立(create)!
@heyongan
应该需要指定 parent, 如果要隐藏, 把宽高置为 0 即可.
其实模拟 TMediaPlayer, 自己定义一个类也行.
应该需要指定 parent, 如果要隐藏, 把宽高置为 0 即可.
其实模拟 TMediaPlayer, 自己定义一个类也行.
我只要随时申明随时可以用就可以,而且不要从控件栏拉下控件,简单的说是把它当成一个变量来操作, 我刚才那那个构造函数改为: mm := TMediaPlayer.CreateParented(Handle); 但是还是不行,甚至也有加了mm.Parent := Self; 可结果仍然是不行
@heyongan
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, MPlayer, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
mm: TMediaPlayer;
procedure TForm1.FormCreate(Sender: TObject);
begin
mm := TMediaPlayer.Create(Self);
mm.Parent := Self;
mm.Visible := False;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
mm.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
mm.FileName := 'c:\temp\test.mp3';
mm.Open;
mm.Play;
end;
end.
老师,可以了, 原来我刚才一直用同一个文件,而那TMediaPlayer又没释放,所以一直会出现设备被占用...... 真是感谢老师!
直接用 API 也很简单:
如果是 WAV:
PlaySound('C:\snd.wav', 0, snd_FILENAME and snd_ASYNC);
如果是 MP3(也可以播放 WAV,包括视频也可以):
mciSendString('Open "G:\mp3\snd.mp3" alias MyMp3', nil, 0, 0);
mciSendString('Play MyMp3', nil, 0, 0);
如果是 WAV:
PlaySound('C:\snd.wav', 0, snd_FILENAME and snd_ASYNC);
如果是 MP3(也可以播放 WAV,包括视频也可以):
mciSendString('Open "G:\mp3\snd.mp3" alias MyMp3', nil, 0, 0);
mciSendString('Play MyMp3', nil, 0, 0);