Проигрыватель компакт дисков
#define Webdings // на кнопках плеера стандартные символы, // изображение которых взято из шрифта Webdings
#ifdef Webdings
// "текст" на кнопках при использовании
// шрифта Webdings
#define PLAY "4"
#define STOP "<"
#define PREVIOUS "9"
#define NEXT ":"
#else
// текст на кнопках при использовании
// обычного шрифта, например, Arial
#define PLAY "Play"
#define STOP "Stop"
#define PREVIOUS "Previous"
#define NEXT "Next"
#endif
// эти макросы обеспечивают перевод интервала времени,
// выраженного в миллисекундах в минуты и секунды
#define MINUTE(ms) ( (ms/1000)/60)
#define SECOND,(ms) ( (ms/1000) %60)
// выводит в поле Label 1 информацию о текущем треке
void __fastcall TForml::TrackInfo()
{
int ms; // время звучания трека, мсек
AnsiString st;
Track = MCI_TMSF_TRACK(MediaPlayer-> Position);
MediaPlayer-> TimeFormat = tfMilliseconds;
ms = MediaPlayer-XTrackLength[Track];
MediaPlayer-> TimeFormat = tfTMSF;
st = "Трек "+ IntToStr(Track);
st = st + ". Длительность "+ IntToStr(MINUTE(ms));
st = st + ":" + IntToStr(SECOND(ms));
Label1-> Caption = st; }
void __fastcall TForml::FormCreate(TObject *Sender)
{
Buttonl-> Caption = PLAY;
Button2-> Caption = PREVIOUS;
Button3-> Caption = NEXT;
MediaPlayer-> Notify = true; // разрешить событие Notify }
// изменение состояния плеера
void __fastcall.TForml::MediaPlayerNotifу(TObject *Sender)
{
switch ( MediaPlayer-> Mode)
{
case mpOpen: // пользователь открыл дисковод (
Buttonl-> Enabled = false;
Button1-> Caption = PLAY;
Button1-> Tag = 0;
Button2-> Enabled = false;
Button3-> Enabled = false;
Label2-> Caption = "00:00";
/* по сигналу от таймера будем проверять
состояние дисковода */
Timer-> Enabled = True; }
}
MediaPlayer-> Notify = true;
}
// щелчок на кнопке Play/Stop
void _fastcall TForml::ButtonlClick(TObject *Sender)
{
if ( Buttonl-XTag = 0) {
// щелчок на кнопке Play
MediaPlayer-> Play() ;
Buttonl-> Caption = STOP;
Buttonl-> Hint = "Стоп";
Buttonl-> Tag = 1;
Button3-> Enabled = true; // доступна кнопка "следующий трек"
MediaPlayer-> Notify = true;
Timer-> Enabled = true;
Tracklnfо();
}
else {
// щелчок на кнопке Stop
Buttonl-> Caption = PLAY;
Buttonl-> Hint = "Воспроизведение";
Buttonl-> Tag = 0;
MediaPlayer-> Notify = true;
MediaPlayer-> Stop();
Timer-> Enabled = false; } }
// сигнал от таймера: вывести номер трека
// и время воспроизведения
void __fastcall TForml::TimerTimer(TObject *Sender)
{
int trk; // трек
int min, sec; // время
AnsiString st;
if ( MediaPlayer-> Mode == mpPlaying) // режим воспроизведения
{
// получить номер воспроизводимого трека
trk = MCI_TMSF_TRACK(MediaPlayer-> Position);
if ( trk != Track) // произошла смена трека
{
TrackInfo0 ;
Track = trk; if { Track == 2)
Button2-> Enabled = true; // доступна кнопка "пред.трек"
if ( Track == MediaPlayer-XTracks)
Button3-> Enabled = false; // кнопка "след.трек" недоступна }
// вывод информации о воспроизводимом треке
min = MCI_TMSF_MINUTE(MediaPlayer-> Position);
sec = MCIJTMSF_SECOND(MediaPlayer-> Position);
st.printf("%d:%.2d",min,sec); Label2-> Caption = st; return;
}
/* Если дисковод открыт или в нем нет
Audio CD, то Mode == mpOpen.
Ждем диск, т. е. до тех пор, пока не будет
Mode == mpStopped + кол-во треков > 1
*/ if ( (MediaPlayer-> Mode == mpStopped) &&
(MediaPlayer-XTracks > 1)} <
// диск вставлен
Timer-> Enabled = false;
Buttonl-> Caption = PLAY;
Buttonl-> Enabled = true;
Buttonl-XTag = 0;
MediaPlayer-> Notify = true;
// получить информацию о времени звучания CD
MediaPlayer-XTimeFormat = tfMilliseconds;
int ms = MediaPlayer-> Length;
AnsiString st = "Audio CD. Время звучания: ";
st = st + IntToStr(MINUTE(ms));
st = st + ":" + IntToStr(SECOND(ms)};
Labell-> Caption = st;
MediaPlayer-XTimeFormat = tfTMSF;
Labell-> Visible = true; Track = 0;
return;
}
// дисковод открыт или в дисководе не Audio CD
if (( MediaPlayer-> Mode == mpOpen)||
(MediaPlayer-> Mode == mpStopped) && (MediaPlayer-> Tracks == 1))
{
Labell-> Caption = "Вставьте Audio CD";
if ( Labell-> Visible)
Labell-> Visible = false; else Labell-> Visible = true;
}
}
// щелчок на кнопке "следующий трек"
void__fastcall TForml::Button3Click(TObject *Sender)
{ MediaPlayer-> Next();
// если перешли к последнему треку, то кнопку Next
// сделать недоступной
if ( MCI_TMSF_TRACK(MediaPlayer-> Position) == MediaPlayer-> Tracks)
Button3-> Enabled = false;
if (! Button2-> Enabled) Button2-> Enabled = true; Tracklnfо();
Label2-> Caption = "0:00";
}
// щелчок на кнопке "предыдущий трек"
void__fastcall TForml::Button2Click(TObject *Sender)
{
MediaPlayer-> Previous(); // в начало текущего трека
MediaPlayer-> Previous(); // в начало предыдущего трека
if ( MCI_TMSF_TRACK(MediaPlayer-> Position) == 1)
Button2-> Enabled = false;
if ( ! Button3-> Enabled) Button3-> Enabled = true;
Tracklnfо();
Label2-> Caption = "0:00"; }
// пользователь закрыл окно программы
void __fastcall TForml::FormClose(TObject *Sender, TCloseAction SAction)
{
MediaPlayer-> Stop();
MediaPlayer-> Close(); }