S
Sachow
Unregistered / Unconfirmed
GUEST, unregistred user!
我正在做一个CD播放器,现在最头痛的问题就是在CD播放完一首曲子,放
下一首的时候,如何让程序判断出这一变化来。我设了MediaPlayer.notify
为True,但它并不能反映出这一变化来,它只能反映出人工编写代码造成的
变化来! 而且我也找不到MediaPlayer里有能够测出当前播放的曲子是第几
曲的procedure或function来,我看了MCI API,其中有关MCI_Status的命令
中有一个MCI_Status_Current_Track,照帮助文件中它是用来返回当前是第
几Track的,但返回结果很怪:1567!这是什么东西?!
相关代码如下:
procedure TMainForm.Button1Click(Sender: TObject);
var
StatusParm: TMCI_STATUS_PARMS;
Flags: Longint;
FError: LongInt;
begin
Flags := mci_Notify;
StatusParm.dwCallback := Player.Handle;
FError := mciSendCommand(Player.DeviceID,
MCI_STATUS_ITEM+MCI_STATUS_CURRENT_TRACK,
Flags,
Longint(@StatusParm));
if FError <> 0 then
ShowMessage('Failed')
else
begin
Label3.Caption := IntToStr(StatusParm.dwReturn);
end;
end;
后来我又想到用计时器来监测,如果
Player.Position > Player.Trackposition[当前曲目] then
当前曲目加1,
觉得颇费周章,各位有没有更好的算法?另外,为什么在放CD的时候调用
Player.Close过程不能关闭Player?程序提示没有MCI设备打开!怎么办?
下一首的时候,如何让程序判断出这一变化来。我设了MediaPlayer.notify
为True,但它并不能反映出这一变化来,它只能反映出人工编写代码造成的
变化来! 而且我也找不到MediaPlayer里有能够测出当前播放的曲子是第几
曲的procedure或function来,我看了MCI API,其中有关MCI_Status的命令
中有一个MCI_Status_Current_Track,照帮助文件中它是用来返回当前是第
几Track的,但返回结果很怪:1567!这是什么东西?!
相关代码如下:
procedure TMainForm.Button1Click(Sender: TObject);
var
StatusParm: TMCI_STATUS_PARMS;
Flags: Longint;
FError: LongInt;
begin
Flags := mci_Notify;
StatusParm.dwCallback := Player.Handle;
FError := mciSendCommand(Player.DeviceID,
MCI_STATUS_ITEM+MCI_STATUS_CURRENT_TRACK,
Flags,
Longint(@StatusParm));
if FError <> 0 then
ShowMessage('Failed')
else
begin
Label3.Caption := IntToStr(StatusParm.dwReturn);
end;
end;
后来我又想到用计时器来监测,如果
Player.Position > Player.Trackposition[当前曲目] then
当前曲目加1,
觉得颇费周章,各位有没有更好的算法?另外,为什么在放CD的时候调用
Player.Close过程不能关闭Player?程序提示没有MCI设备打开!怎么办?