Во время воспроизведения в диалоговом окне должен отображаться номер воспроизводимого трека и время воспроизведения. Рекомендуемый вид формы и окно про граммы приведены на рис. 1.48.

Рис. 1.48. Форма программы

j { Проигрыватель Audio CD.
(с) Культин Н.Б., 2003 )
unit CDp_;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, Buttons, MPlayer,
ExtCtrls, MMSYSTEM;
type
TForml = class(TForm)
MediaPlayer: TMediaPlayer;
Рис. 1.48. Форма и окно программы CD Player
Timerl: TTimer;
BitBtnl: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
Labell: TLabel; *
Label2: TLabel;
Image1: TImage;
procedure FormActivate (Sender: TObject);
procedure MediaPlayerNotifу(Sender: TObject);
procedure BitBtnlClick(Sender: TObject);
procedure TimerlTimer(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BitBtn3Click(Sender: TObject);
private
I Private declarations }
public
I Public declarations }
end;
var
Forml: TForml;
implementation
{$R *.dfm}
var
Track: integer; // воспроизводимый трек
// начало работы программы
procedure TForml.FormActivate(Sender: TObject);
begin
MediaPlayer.Open;
{ Проверить, есть в CD-ROM Audio CD.
Если в дисководе есть диск, то свойство
Mode = mpStopped. Если диска нет
или дисковод открыт, то Mode = mpOpened.
Тип диска можно определить по количеству
треков. Если диск — CD-ROM, то на нем один
трек, на аудиодиске — кол-во треков больше 1 }
if (MediaPlayer.Mode = mpStopped) and
(MediaPlayer.Tracks > 1) then
begin
BitBtnl.Enabled := True;
MediaPlayer.Notify := True;
end
else Timer1.Enabled := True;
end;
// сигнал от MediaPlayer
procedure TForml.MediaPlayerNotify(Sender: TObject),
begin
case MediaPlayer.Mode of
mpOpened: // пользователь открыл дисковод
begin
BitBtnl.Enabled := False;
BitBtnl.Caption := 'Play';
BitBtnl.Tag := 0;
BitBtn2.Enabled := False;
BitBtn3.Enabled := False;
Timerl.Enabled := True;
Label2.Caption := '00:00';
end;
end;
MediaPlayer.Notify := True;
end;
// щелчок на кнопке Play/Stop
procedure TForml.BitBtnlClick(Sender: TObject);
begin
if BitBtnl.Tag = 0
then // щелчок на кнопке Play
begin
BitBtnl.Caption := 'Stop';
BitBtn3.Enabled := True;
MediaPlayer.Notify := False;
MediaPlayer.Play;
Timerl.Enabled :=True;
BitBtnl.Tag := 1;
Track := MCI_TMSF_TRACK(MediaPlayer.Position);
end
else
begin // щелчок на кнопке Stop
BitBtnl.Caption := 'Play';
BitBtn3.Enabled := True;
MediaPlayer.Notify := True;
MediaPlayer.Stop;
Timerl.Enabled := False; •
BitBtnl.Tag := 0;
end;
end;
// сигнал от таймера: вывести номер трека
// и время воспроизведения
procedure TForml.TimerlTimer(Sender: TObject);
var
trk, // трек
min, sec: byte; // время
begin
if MediaPlayer.Mode = mpPlaying then
// режим воспроизведения
begin
trk := MCI_TMSF_TRACK(MediaPlayer.Position);
min := MCI_TMSF_MINUTE(MediaPlayer.Position) ;
sec := MCI_TMSF_SECOND(MediaPlayer.Position) ;
Labe11.Capt ion : =
Format('Track %d.',[trk]);
Label2.Caption :=
Format('%d:%.2d',[min,sec]);
if trk <> Track then
begin
Track := trk;
if Track = 2
then BitBtn2.Enabled := True;
if Track = MediaPlayer.Tracks
then BitBtn3.Enabled := False;
end;
exit;
end;
// если дисковод открыт или в нем нет
// Audio CD, то Mode = mpOpen
// ждем диск ( mpStopped + кол-во треков > 1)
if (MediaPlayer.Mode = mpStopped) and
(MediaPlayer.Tracks > 1) then
begin
Timerl.Enabled := False;
MediaPlayer.Open;
BitBtnl.Enabled := True;
MediaPlayer.Notify := True;
Labell.Caption := 'Audio CD';
Labell.Visible := True;
end;
// дисковод открыт или в дисководе нет диска
if MediaPlayer.Mode = mpOpen then
begin
Labell.Caption := 'Вставьте Audio CD';
if Labell.Visible then
Labell.Visible := False
else
Labell.Visible := True;
end;
end;
// кнопка «
procedure TForml.BitBtn2Click(Sender: TObject);
begin
MediaPlayer.Previous; // в начало текущего трека
MediaPlayer.Previous; // в начало предыдущего трека
if MCI_TMSF_TRACK(MediaPlayer.Position) = 1 then
BitBtn2.Enabled := E'alse;
if not BitBtn3.Enabled
then BitBtn3.Enabled := True;
end;
// кнопка »
procedure TForml.BitBtn3Click(Sender: TObject);
begin
MediaPlayer.Next ;
// если перешли к последнему треку, то кнопку
// Next сделать недоступной
if MCI_TMSF_TRACK(MediaPlayer.Position) = MediaPlayer.Tracks
then BitBtn3.Enabled := False;
end;
// пользователь закрыл окно программы
procedure TForml.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
MediaPlayer.Stop;
end;
• ¦
end.
48. Напишите программу, используя которую можно прослу-
шать компакт-диск. Для выбора воспроизводимого трека (мело-
дии) используйте компонент тгаскваг (рис. 1.49).
Рис. 1.49. Форма программы CD Player
f CD Player. Ccj Культин Н.Б., 2003}
unit CDp2_;
interface
uses
Windows, Messages, SysOtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, ComCtrls, StdCtrls, MPlayer,
ExtCtrls, MMSYSTEM;
type
TForml = class(TForm)
MediaPlayer: TMediaPlayer;
TrackBar: TTrackBar;
Buttonl: TButton;
Timerl: TTimer;
Label1: TLabel;
Label2: TLabel;
procedure TrackBarChange(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure ButtonlClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action:
TCloseAction);
procedure TimerITimer(Sender: TObject);
private
/ Private declarations }
public
{ Public declarations I
end;
var
Forml: TForml;
implementation
($R *.dfm}
var
Track: integer;
// пользователь изменил положение бегунка
procedure TForml.TrackBarChange(Sender: TObject);
var
trk: integer; // трек, который надо воспроизвести
begin
trk :=TrackBar.Position;
if trk > MCI_TMSF_TRACK(MediaPlayer.Position) then
while trk > MCI_TMSF_TRACK(MediaPlayer.Position) do
MediaPlayer.Next
5 Зак. 939
else
while trk < MCI_TMSF_TRACK(MediaPlayer.Position) do
MediaPlayer.Previous;
end;
// кнопка Play/Stop
procedure TForml.ButtorilClick (Sender: TObject);
begin
if Buttonl.Tag = 0 then
begin
Buttonl.Caption := 'Stop';
Buttonl.Tag :=1;
MediaPlayer.Play;
end
else
begin
Buttonl.Caption := 'Play';
Buttonl.Tag :=0;
MediaPlayer.Stop;
end;
end;
procedure TForml.FormActivate(Sender: TObject);
begin
if (MediaPlayer.Mode = mpStopped) and
(MediaPlayer.Tracks > 1)
then begin
Buttonl.Enabled := True;
TrackBar.Max := MediaPlayer.Tracks;
end
else begin
labell.Caption := 'Вставьте в дисковод Audio CD';
end;
end;
// сигнал от таймера
procedure TForml.TimerlTimer(Sender: TObject);
var
trk, // трек
min, sec: byte; // время
begin
case MediaPlayer.Mode of
mpPlaying: // режим воспроизвел
begin
min := MCI_TMSF_MINUTE(MediaPlayer.Position);
sec := MCI_TMSF__SECOND (MediaPlayer. Position) ;
Label2.Caption :=
Format('%d:%.2d',[min,sec]);
// определим, надо ли перемещать бегунок
trk := MCI_TMSF_TRACK(MediaPlayer.Position);
if trk <> Track then
begin
Track:= trk;
TrackBar.Position := Track;
Labell.Caption
Format ('Track %d. ' , [trk]) ;
end;
end;
mpOpen: // дисковод открыт или в нем нет диска
begin
if Buttonl.Enabled then
begin
Labell.Caption :='Вставьте в дисковод Audio CD';
Label2.Caption :='';
Buttonl.Enabled := False; // режим ожидания диска
Buttonl.Caption := 'Play';
end;
// мигание сообщения
if Labell.Visible
then Labell.Visible := False
else Labell.Visible := True;
end;
mpStopped: // плеер остановлен
begin
if not Buttonl.Enabled
then begin
// плеер был в режиме ожидания диска
/'/ теперь диск вставлен
MediaPlayer.Open;
Buttonl.Enabled := True;
Labe11.Caption := 'Track: 1' ;
Labell.Visible := True;
Label2.Caption:= '';
TrackBar.Position : = 1;
TrackBar.Max := MediaPlayer.Tracks;
end;
if Buttonl.Tag = 1 then
begin
// завершено воспроизведение последнего трека
Buttonl.Caption := 'Play';
Buttonl.Tag :=0;
TrackBar.Position := 1;
Labell.Caption := 'Track 1';
Label2.Caption := ' ' ;
end;
end;
end; // case
end;
procedure TForml.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
MediaPlayer.Stop;
end;
end.