на кнопках плеера стандартные символы,
Листинг 4.3.
Проигрыватель компакт дисков
#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();
}
Содержание раздела