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




Листинг 4 3



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











Содержание  Назад  Вперед