Программирование под ОС / C - C++ /
| |
| | |
Возможно вас заинтересует
|
|
Пишем CD проигрыватель 2
Нам понадобятся компоненты: Label ( Label 1) ля отображения названия трека; Label ( Label 2)- для отображения времени; Timer ( Timer 1)-который будет следить за состоянием проигрывателя; Компонент MediaPlayer ( MediaPlayer 1) – который и будет организовывать воспроизведения музыки, поскольку кнопки это компонента использоваться не будут, ему можно передать Visible -> false (в ОбъектИнспектор); и компонент Button ( Button 1;2;3), которые послужат нам кнопками навигации. Значки на кнопках навигации – это текст, изображенный шрифтом Webdings . При использовании этого шрифта, например цифре 4 будет соответствовать значок play .
Ну, приступим к написанию:
#include <vcl.h>
#pragma hdrstop
#include "CDPlayer_.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
#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)
// выводит в поле Label1 информацию о текущем треке
void __fastcall TForm1::TrackInfo()
{
int ms; // время звучания трека, мсек
AnsiString st;
Track = MCI_TMSF_TRACK(MediaPlayer->Position);
MediaPlayer->TimeFormat = tfMilliseconds;
ms = MediaPlayer->TrackLength[Track];
MediaPlayer->TimeFormat = tfTMSF;
st = "Трек "+ IntToStr(Track);
st = st + ". Длительность "+ IntToStr(MINUTE(ms));
st = st + ":" + IntToStr(SECOND(ms));
Label1->Caption = st;
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Button1->Caption = PLAY;
Button2->Caption = PREVIOUS;
Button3->Caption = NEXT;
MediaPlayer->Notify = true; // разрешить событие Notify
}
// изменение состояния плеера
void __fastcall TForm1::MediaPlayerNotify(TObject *Sender)
{
switch ( MediaPlayer->Mode )
{
case mpOpen: // пользователь открыл дисковод
{
Button1->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 TForm1::Button1Click(TObject *Sender)
{
if ( Button1->Tag == 0 ) {
// щелчок на кнопке Play
MediaPlayer->Play();
Button1->Caption = STOP;
Button1->Hint = "Стоп";
Button1->Tag = 1;
Button3->Enabled = true; // доступна кнопка "следующий трек"
MediaPlayer->Notify = true;
Timer->Enabled = true;
TrackInfo();
}
else {
// щелчок на кнопке Stop
Button1->Caption = PLAY;
Button1->Hint = "Воспроизведение";
Button1->Tag = 0;
MediaPlayer->Notify = true;
MediaPlayer->Stop();
Timer->Enabled = false;
}
}
// сигнал от таймера: вывести номер трека
// и время воспроизведения
void __fastcall TForm1::TimerTimer(TObject *Sender)
{
int trk; // трек
int min, sec; // время
AnsiString st;
if ( MediaPlayer->Mode == mpPlaying ) // режим воспроизведения
{
// получить номер воспроизводимого трека и
trk = MCI_TMSF_TRACK(MediaPlayer->Position);
if ( trk != Track ) // произошла смена трека
{
TrackInfo();
Track = trk;
if ( Track == 2 )
Button2->Enabled = true; // доступна кнопка "пред.трек"
if ( Track == MediaPlayer->Tracks)
Button3->Enabled = false; // кнопка "след.трек" недоступна
}
// вывод информации о воспроизводимом треке
min = MCI_TMSF_MINUTE(MediaPlayer->Position);
sec = MCI_TMSF_SECOND(MediaPlayer->Position);
st.printf("%d:%.2d",min,sec);
Label2->Caption = st;
return;
}
// Если дисковод открыт или в нем нет
// AudioCD, то Mode == mpOpen.
// Ждем диск, т.е. до тех пор пока не будет Mode == mpStopped + кол-во треков > 1
if ( (MediaPlayer->Mode == mpStopped) &&
(MediaPlayer->Tracks > 1) )
{
// диск вставлен
Timer->Enabled = false;
Button1->Caption = PLAY;
Button1->Enabled = true;
Button1->Tag = 0;
MediaPlayer->Notify = true;
// получить информацию о времени звучания CD
MediaPlayer->TimeFormat = tfMilliseconds;
int ms = MediaPlayer->Length;
AnsiString st = "MusCD. Время звучания: ";
st = st + IntToStr(MINUTE(ms));
st = st + ":" + IntToStr(SECOND(ms));
Label1->Caption = st;
MediaPlayer->TimeFormat = tfTMSF;
Label1->Visible = true;
Track = 0;
return;
}
// дисковод открыт или в дисководе не Audio CD
if (( MediaPlayer->Mode == mpOpen )||
(MediaPlayer->Mode == mpStopped) && (MediaPlayer->Tracks == 1))
{
Label1->Caption = "Вставьте CD диск";
if ( Label1->Visible )
Label1->Visible = false;
else Label1->Visible = true;
}
}
// щелчок на кнопке "следующий трек"
void __fastcall TForm1::Button3Click(TObject *Sender)
{
MediaPlayer->Next();
// если перешли к последнему треку, то кнопку
// Next сделать недоступной
if ( MCI_TMSF_TRACK(MediaPlayer->Position) == MediaPlayer->Tracks )
Button3->Enabled = false;
if (! Button2->Enabled ) Button2->Enabled = true;
TrackInfo();
Label2->Caption = "0:00";
}
// щелчок на кнопке "предыдущий трек"
void __fastcall TForm1::Button2Click(TObject *Sender)
{
MediaPlayer->Previous(); // в начало текущего трека
MediaPlayer->Previous(); // в начало предыдущего трек
if ( MCI_TMSF_TRACK(MediaPlayer->Position) == 1 )
Button2->Enabled = false;
if ( ! Button3->Enabled )
Button3->Enabled = true;
TrackInfo();
Label2->Caption = "0:00";
}
// пользователь закрыл окно программы
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
MediaPlayer->Stop();
MediaPlayer->Close();
}
Проигрыватель готов, кроме этого на форму можно добавить еще две кнопки, которые будут открывать.закрывать СиДи привод. Кнопка "открываем" на собитыие onClick():
mciSendString("Set cdaudio door open wait", NULL, 0, Handle);
Закрываем сиди onClick():
mciSendString("Set cdaudio door closed wait", NULL, 0, Handle);
И не забудьте добавить #include <mmsystem.h>
Впринципе есть куча вещей, которые могут внесни большую функциональность в наш проигрыватель, но это уже совсем другая история...
Последние статьи: Программирование под ОС / C - C++ /
| |
| | |
Сейчас я покажу как можно написать простой проигрыватель CD дисков. Для начала разместим все нужные компоненты на форме (см. рисунок)... подробнее
|
Кол. просмотров: общее - 5611 сегодня - 0
|
|
Продолжаю тему клонирования программ darkamstera на Delphi в С++Builder. В этой статье я покажу, как с помощью стандартных компонентов, можно создать свой браузер. Браузер будет на движке всеми-любимого InternetExplorer. Наш зверь сможет ходить по URL... подробнее
|
Кол. просмотров: общее - 4348 сегодня - 1
|
|
Выводим информацию о нашей родненькой системе. Для получения большей части информации мы будем использовать обширные функции, это не так сложно, как может показатся с первого взгляда и вообще код довольно простой и примитивный, так что покапавшись в нем пару минут - можно в легкостью разобраться что к чему, зачем и как... подробнее
|
Кол. просмотров: общее - 4154 сегодня - 0
|
|
Здраствуй, сечас я покажу, как в CBuilder можно создать свой простой FTP-клиент, похожий пример можно найти в документации C++Builder Developnets Guilde... подробнее
|
Кол. просмотров: общее - 5370 сегодня - 0
|
|
Здраствуй, в этой статье я расскажу про способы получения e-mail писем и их прочтения.
Для начала давайте составим интерфейс будущей программы Вот, что у меня вышло... подробнее
|
Кол. просмотров: общее - 4220 сегодня - 0
|
|
|