|
||||||||
|
Мультимедиа. TMediaPlayer
В VCL имеется специальный компонент для работы с мультимедиа - TMediaPlayer. Для пользователя он выглядит как набор кнопок, с помощью которых можно интерактивно управлять устройством. Программист может модифицировать реакцию на нажатия кнопок и другие события, в зависимости от специфики задачи. Под типом устройства мультимедиа подразумеваются как аппаратные, так и программные средства. В компоненте TMediaPlayer тип устройства представлен свойством:
Тип может быть задан как явно пользователем, так и автоматически (по расширению файла) ? в этом случае нужно задать тип dtAutoSelect. Для устройств, не работающих с файлами, тип всегда надо задавать явно. Набор возможностей устройства определяется свойством:
В таблице приведены методы и свойства, обеспечивающие выполнение основных команд интерфейса MCI:
Каждая операция MCI возвращает код завершения. В случае необходимости проверки программист может получить и проанализировать его, используя два свойства:
Пользуясь свойством Mode, можно узнать текущее состояние устройства. Смысл режимов ясен из названий соответствующих констант:
Следующие свойства дают информацию о характеристиках и состоянии устройства:
? начальная позиция данных (если имеются дорожки ? позиция первой дорожки);
? длина данных;
? текущая позиция данных относительно начала (если имеются дорожки ? относительно начала текущей дорожки). Эти три свойства зависят от носителя данных (например, от вставленного компакт-диска или загруженного файла AVI). Значение свойств, хотя и имеет тип Longint, представлено и должно интерпретироваться в зависимости от формата представления времени (свойство TimeFormat). Если у устройства имеются дорожки (как, например, у аудиоплейера), то информацию о них можно получить через свойства:
? число дорожек;
? длина дорожки с номером TrackNum. По умолчанию используется формат времени tfMSF (см. ниже);
? начальное положение заданной дорожки. Число кадров, на которое перемещается позиция устройства при шаге вперед/назад (операциях Step/Back), определяется свойством:
По умолчанию оно равно Length/10. Свойство
устанавливает состояние ожидания окончания операции. Если оно установлено в True, функции MCI (Open, Play и т. п.) вернут управление только по завершении операщш. В противном случае отследить конец операции можно, используя свойство:
Если это свойство установлено в True, драйвер MCI посылает медиаплейеру специальные извещения о завершении каждой операции. Результат операции присваивается свойству:
Программист также имеет возможность получить управление в этот момент, предусмотрев обработчик события:
Если программист хочет использовать свойства Wait и Notify, он должен устанавливать их значения специально перед каждой операцией MCI. После ее завершения их значения более не актуальны и не принимаются во внимание, пока снова не будут переустановлены. Когда свойства не действуют, устройство ожидает конца операции и не посылает извещений (как если бы Wait = True и Notify = False). Идентификатор устройства, получаемый им при открытии (вызове метода Open), равен значению свойства:
Он необходим, когда программист хочет сам вызвать функцию API mciSendCommand для выполнения действий, не предусмотренных методами данного класса. В качестве примера приведена функция, позволяющая узнать наличие носителя данных в устройстве (такая возможность в компоненте TMediaPlayer, к сожалению, отсутствует): function
TFormI.MediaPresent: boolean; Перейдем к рассмотрению единиц измерения интервалов и форматам их представления. Их устанавливает свойство:
Такие свойства, как Length, Position и другие возвращают значения типа Longint. В зависимости от TimeFormat они могут быть проинтерпретированы как:
Для кодирования и декодирования информации в этих форматах используйте модуль MMSystem, где предусмотрены соответствующие функции. Для устройств, имеющих дорожки (типов dtCDAudio и dtVideoDisc), в конструкторе устанавливается формат tfTMSF. Два свойства предназначены специально для устройств видео (таких, как dtAVIVideo, dtDigitalVideo, dtOverlay, dtVCR, dtVideodisc). Первое из них
задает окно (оконный элемент управления), в котором будет производиться отображение видеоданных. Если это свойство равно nil, то драйвер устройства создаст собственное окно. Если устройство не поддерживает альтернативные окна, свойство игнорируется. Прямоугольная область окна Display, в которой должно происходить отображение, задается вторым свойством:
Если значение свойства не определено, вывод в область не производится. Уже говорилось о том, что для пользователя компонент TMediaPlayer выглядит как набор кнопок, каждая из которых соответствует команде MCI. Все типы кнопок определены в множестве:
Отображением кнопок в составе TMediaPlayer во время выполнения управляют три свойства:
определяет множество видимых кнопок. По умолчанию видны все кнопки, но программисту имеет смысл удалить те, операции которых не поддерживаются данным устройством. Кнопки можно удалить и на стадии разработки, и во время исполнения. Например:
Свойство
определяет цветовую раскраску кнопок. Каждой операции (как это принято, например, в бытовой технике) соответствует свой цвет. Значок операции на кнопках, попавших в это множество, в случае их видимости также будет цветным. По умолчанию все кнопки имеют это свойство. Следующее свойство
определяет множество разрешенных кнопок. Оно должно изменяться в зависимости от выполняемой операции (например, при нажатии Pause запрещается и Stop). Объект сам может управлять состоянием своих кнопок, если его свойство:
установлено в True. Еще три опубликованных свойства:
? если это свойство установлено в True, устройство автоматически открывается сразу после загрузки TMediaPlayer;
? имя файла. Используется в том случае, если данные мультимедиа хранятся в файле (например, для dtAVIVideo и dtWaveAudio);
? используется при открытии устройства. True означает возможность одновременного открытия его другими задачами (другими объектами TMediaPlayer). Пара событий, возникающих при нажатии кнопок TmediaPlayer, определяется свойствами:
Обработчику события OnClick передается тип нажатой кнопки в параметре Button. В результате обработки он должен вернуть значение в параметре DoDefault. Если оно равно True, вызывается соответствующая кнопке функция MCI и после этого ? OnPostClick. Если оно равно False, ничего не происходит (подразумевается, что пользователь сам вызвал требуемые функции MCI).
Для комментария : kadan@grsu.grodno.by | |||||||||||||||||||||||||||||||||||||||
За содержание страницы отвечает Гончарова М.Н. © Кафедра СПиКБ, 2002-2017 |