Главная страница

Лекції_1_ІЗВП. Коледж промислової автоматики та інформаційних технологій


Скачать 1.63 Mb.
НазваниеКоледж промислової автоматики та інформаційних технологій
Дата07.09.2021
Размер1.63 Mb.
Формат файлаpdf
Имя файлаЛекції_1_ІЗВП.pdf
ТипРобоча програма
#230328
страница7 из 7
1   2   3   4   5   6   7
Tsearchrec sr; if (Findfirst( Soundpath + "*.wav", faanyfile, sr) == 0)
{
// знайдений файл з розширенням wav
Listboxl->items->add(sr.Name);
// додамо ім'я файлу в список
// ще є файли з розширенням wav? while (Findnext(sr) == 0)
Listboxl->items->add(sr.Name);
} if (Findfirst( Soundpath + "*.mid", faanyfile, sr) == 0) {
// знайдений файл з розширенням mid
Listboxl->items->add(sr.Name);
// додамо ім'я файлу в список
// ще є файли з розширенням mid? while (Findnext(sr} = 0)
Listboxl->items->add(sr.Name); } if (Findfirstf Soundpath + "*.rmi", faanyfile, sr) == 0) {
// знайдений файл з розширенням rmi
Listboxl->items->add(sr.Name);
// додамо ім'я файлу в список
// ще є файли з розширенням rmi? while (Findnext(sr) == 0)
Listboxl->items->add(sr.Name); }
// відтворити перший файл if ( Listboxl->items->count != 0)

87
{
Label2->caption = Listboxl->items->strings[1];
Mediaplayerl->filename = Soundpath + Listboxl->items->strings[l];
Mediaplayerl->open();
Mediaplayerl->play();
} }
// клацання на елементі списку void__fastoall Tforml::listboxlclick(Tobject *Sender)
{
Label2->caption = Listboxl->items->strings[Listboxl->itemindex];
Mediaplayerl->filename = Soundpath + Label2->caption;
Mediaplayerl->open();
Mediaplayerl->play() ; }
Працює програма таким чином. Відразу після запуску функція обробки події oncreate формує список звукових файлів (WAV, MID і RMI), які знаходяться в підкаталозі Media головного каталога Windows. Оскільки на різних комп'ютерах каталог, в який встановлена операційна система, може називатися по-різному, то для отримання його
імені використовується
API функція Getwindowsdirectory значенням якої є повне ім'я каталога Windows. Список звукових файлів формується За допомогою функцій Findfirst і Findnext. функція Findfirst забезпечує пошук файлу, що задовольняє критерію пошуку, вказаному при виклику функції.
Функція Findnext продовжує процес пошуку. Обом функціям як параметр передається структура типу Tsearchrec поле Name якою (у разі успіху) містить ім'я файлу, що задовольняє критерію пошуку. Після того, як список звукових файлів сформований, застосуванням методу активізується процес відтворення першого файлу.
Клацання на елементі списку обробляється функцією Tfom1: :Listbox1click яка привласнює значення властивості Filename компоненту Mediapiayer1 за допомогою методу open відкриває вибраний файл і застосуванням методу Play активізує процес відтворення.

88
Наступний приклад показує, як на основі компоненту Mediapiayer можна створити цілком пристойний програвач компакт-дисків. Вид форми і діалогового вікна програми приведений на мал. 3.2.6. Окрім компонентів, показаних на малюнку, у формі є компонент Mediapiayer.
Оскільки кнопки компоненту Mediapiayer під час роботи програми не використовуються (для управління плеєром служать кнопки Button1, Button2 і Buttons), властивості visible привласнено значення false асам компонент знаходиться за межею форми. Рис. 3.2.6. Форма програми CD Player Значки на кнопках управління — це текст, зображений шрифтом Webdings. При використанні цього шрифту, наприклад, цифрі 4 відповідає значок Play.
Відповідність значків Webdings і звичайних символів відображає таблицю. 3.2.8.
Таблиця 3.2.8. Зображення символів шрифту Webdings Символ
Webdings
Звичайний символ — наприклад, шрифт Arial Код символу
(шістнадцятиричний)
9 39 4
34
: ас Компонент Timer використовується для організації циклу опиту стану медіаплєєра. Під час відтворення CD функція обробки події Ontimer виводить на
індикатор (у полі влучні Label1) номер трека і час відтворення.

89 Вид вікна програми відразу після її запуску у випадку, якщо в дисководе знаходиться Audio CD, приведений на мал. 3.2.7. У випадку, якщо в дисководе диска немає або диск не звуковий, замість інформації про час відтворення буде виведено повідомлення "Вставте Audio CD". Клацання на кнопці Play (Button1) активізує процес відтворення. Під час відтворення на індикаторі відбивається номер і тривалість відтворного трека, а також час від початку відтворення (мал.
3.2.8). Рис. 3.2.7. На початку роботи на індикаторі виводиться інформація про час відтворення CD або повідомлення про необхідність вставити в дисковод Audio CD Рис. 3.2.8. Під час відтворення на індикаторі відображається інформація про відтворний трек Текст програми приведений в лістингу 3.2.3. Слід звернути увагу на подію Notify яке може генерувати Mediapiayer. Подія Notify виникає у момент зміни стану плеєра за умови, що значення властивості Notify рівно true. У даній програмі подія Notify використовується для виявлення факту відкриття CD- дисковода користувачем.
Лістинг 3.2.3. Програвач компакт-диск дисків
#define Webdings на кнопках плеєра стандартні символи

90
// зображення яких узяте з шрифту 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; }

91 void __fastcall Tforml::formcreate(Tobject *Sender)
{
Buttonl->caption = PLAY;
Button2->caption = PREVIOUS;
Button3->caption = NEXT;
Mediaplayer->notify = true; // вирішити подію Notify }
// зміна стану плеєра void у *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 = "Стоп

92
Buttonl->tag = 1;
Button3->enabled = true; // доступна кнопка "Наступний трек"
Mediaplayer->notify = true;
Timer->enabled = true; о
} 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; // кнопка "след.трек" недоступна }

93
// виведення інформації про відтворний трек 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))

94
{
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;
о
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; о
Label2->caption = "0:00"; }
// користувач закрив вікно програми void __fastcall Tforml::formclose(Tobject *Sender, Tcloseaction Saction)
{
Mediaplayer->stop(); Mediaplayer->close(); }
1   2   3   4   5   6   7


написать администратору сайта