C++ Builder - вопросы программирования

       

на кнопках плеера стандартные символы,



Листинг 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();
}
 


Содержание раздела