Написание простого медиа-проигрывателя (часть 1)
Простейший медиа-проигрыватель можно создать стандартными средствами Windows. Существуют модули, которые доступны из любого языка программирования - это ActiveX. Delphi в этом плане не исключение. Встроенный в систему Windows Media Player имеет собственный ActiveX-модуль, который мы легко можем использовать в своей программе. Правда, кардинально изменить в нём что-либо не получится. В данной статье я покажу пример, как использовать этот компонент.
Для начала ActiveX-компонент (сокращённо AX) нужно интегрировать в оболочку Delphi. Делается это легко: открываем диалоговое окно Component - Import ActiveX Control. В разных версиях Delphi этот пункт меню может называться по-разному, но ключевым остаётся слово ActiveX. В открывшемся окне в списке компонент найдите строку Windows Media Player. Нажмите кнопку Install. В появившемся окне можно указать, в какой пакет следует установить компонент. Можно оставить всё по умолчанию и нажать ОК. После этого на вкладке ActiveX палитры компонент появится кнопка WindowsMediaPlayer. Теперь можно приступить к созданию проигрывателя.
Для начала поместите компонент на форму - щёлкните по его значку и затем по форме. Вы увидите знакомое изображение - изображение проигрывателя. Его внешний вид зависит от версии установленного в системе компонента. Примерный вид того, что вы увидите, изображён на рисунке 1.
Для начала давайте сделаем возможность открытия нужного файла. За путь к файлу, который нужно воспроизводить, отвечает свойство URL типа WideString (строка). Давайте сделаем для программы меню, куда и добавим нужный нам пункт. Поместите на форму TMainMenu (страница Standard). Дважды щёлкните по значку TMainMenu, лежащему на форме. Откроется дизайнер меню. Выделите единственный пункт в заголовке меню и в его свойстве Caption напишите "Файл". Затем щёлкните по созданному пункту и снизу появится ещё одна пустая строка. Там и введите название нашего пункта - "Открыть". Следующей строкой давайте создадим разделитель для меню - в свойстве Caption поставьте один-единственный символ - минус ("-"). Следующей строкой сделайте пункт "Выход". Ну вот, программа уже имеет меню, хотя и небольшое. Теперь нужно связать пункт меню с диалогом открытия файла. Найдите компонент TOpenDialog на странице Dialogs и поместите его на форму. Активируйте свойство Filter и нажмите на кнопку с тремя точками ("..."). В появившемся окне введите желаемые типы файлов. В поле Filter Name нужно ввести описание типов файлов, а в поле Filter - сам фильтр. Пример на рисунке 2.
Чтобы с компонентом было удобно работать, измените его свойство Name на MediaPlayer.
Выделите компонент и перейдите в окно Object Inspector. Свойств (Properties) у компонента не очень много, а вот событий (Events) гораздо больше. Но мы используем лишь некоторые из них.
Для удобства, компонент MainMenu1 переименуем в MainMenu, а OpenDialog1 - в OpenDialog.
Пришло время запрограммировать пункт меню "Открыть". Откройте дизайнер меню и дважды щёлкните по нужному пункту - откроется редактор кода. В этом месте следует написать:
if OpenDialog.Execute then MediaPlayer.URL:=OpenDialog.FileName;
Метод Execute открывает диалог и, если пользователь не нажал "Отмена", то функция возвращает значение True, а в FileName записывается путь к выбранному файлу. Затем мы присваиваем свойству URL проигрывателя выбранный файл. Запустите программу и попробуйте открыть файл. Всё должно работать, файл должен воспроизводиться.
Теперь давайте приведём окно проигрывателя к нормальному виду. Сам проигрыватель нужно растянуть на всю ширину окна - измените его свойство Align на alClient. Саму форму стоит сделать поменьше, т.к. наш проигрыватель пока что воспроизводит только аудио-файлы. На мой взгляд, для формы можно установить ширину (Width) равной 300, а высоту (Height) - 200. Наконец, можно изменить вид окна и установить BorderStyle в значение bsSizeToolWin, а заголовок (Caption) - "Simple Media Player".
Теперь запрограммируем пункт "Выход" - для этого следует написать в его обработчике всего одну строку:
Self.Close;
Этот метод закрывает текущую форму (Self - объект, выбранный по умолчанию, форма) и завершает приложение.
Теперь нужно сделать в меню элементарные команды управления воспроизведением - Start, Stop, Pause. Конечно, в проигрывателе и без того есть существующие кнопки, но они должны иметь своё отражение и в меню.
Для начала добавьте в заглавную строку меню (туда, где "Файл") пункт "Управление". Затем добавьте два пункта - "Старт / Стоп" и "Пауза". Запрограммировать эти команды легко. Для управление воспроизведением служит набор методов Controls, а узнать текущее состояние проигрывателя можно из свойства PlayState. Вот как выглядит обработчик пункта "Старт / Стоп":
if MediaPlayer.PlayState = wmppsPlaying then MediaPlayer.Controls.Stop else MediaPlayer.Controls.Play;
А вот обработчик "Паузы":
if MediaPlayer.PlayState =wmppsPlaying then MediaPlayer.Controls.Pause;
Запустите программу и проверьте её работоспособность.
Как видите, мы создали сравнительно простой, но рабочий проигрыватель. В следующий раз мы продолжим его разработку. Примерное изображение окна программы после выполнения всех действий, описанных в статье, показано на рисунке.
Автор: Ерёмин А.А.
Статья добавлена: 16 февраля 2006
Следующая статья: Написание простого медиа-проигрывателя (часть 2) »
Зарегистрируйтесь/авторизируйтесь,
чтобы оценивать статьи.
Статьи, похожие по тематике
Для вставки ссылки на данную статью на другом сайте используйте следующий HTML-код:
Ссылка для форумов (BBCode):
Быстрая вставка ссылки на статью в сообщениях на сайте:
{{a:17}} (буква a — латинская) — только адрес статьи (URL);
{{статья:17}} — полноценная HTML-ссылка на статью (текст ссылки — название статьи).
Поделитесь ссылкой в социальных сетях:
Комментарии читателей к данной статье
Репутация: нет |
maxwallaby (25 мая 2011, 01:51): Не OpenPictureDialog, а OpenDialog использовать надо!
Вы в type указали одно, а в процедуре TForm1.N2Click указываете на совершенно иной, несуществующий объект. Будьте внимательны! .... type TForm1 = class(TForm) WindowsMediaPlayer: TWindowsMediaPlayer; MainMenu: TMainMenu; OpenDialog: TOpenDialog; {- вот так эту строчку записать надо} N1: TMenuItem; N2: TMenuItem; .... |
Репутация: нет |
WAKA-WAKA (25 мая 2011, 00:58): У меня все заработало с первого раза.
И получилось реализовать плейлист. |
Репутация: нет |
Loki05 (29 марта 2011, 16:20): И почему кнопки вперед, назад не активны?
|
Репутация: нет |
Loki05 (29 марта 2011, 16:19): А как сюда сделать плейлист?
|
Репутация: нет |
maxwallaby (21 декабря 2010, 17:17): Ну так укажите программе с чем конкретно работать надо.
В частности не OpenPictureDialog, а OpenPictureDialog1 Тоже самое с MediaPlayer. Нужно указывать с каким конкретно компонентом работаете. И к тому-же, если не ошибаюсь, то надо не OpenPictureDialog а OpenDialog, естественно с единицей в конце (OpenDialog1) В остальном действуйте по готовому коду. Удачи! |
Репутация: +40 |
Ерёмин А.А. (1 декабря 2010, 11:10): Текст ошибки какой?
|
Репутация: нет |
Кузнецов Алексей (1 декабря 2010, 02:05): Нажимаю запустить выдаёт ошибку в строчке
if OpenDialog.Execute then |
Репутация: +40 |
Ерёмин А.А. (29 ноября 2010, 22:10): Что именно не так? Вроде выглядит всё точно так же, как и в статье.
|
Репутация: нет |
Кузнецов Алексей (28 ноября 2010, 23:57): я впервый раз пробую сделать что то подобное и у меня неполучилось хотя внешний вид как на картинке а вот с кодом чет нетак скажите что unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ExtDlgs, OleCtrls, WMPLib_TLB; type TForm1 = class(TForm) WindowsMediaPlayer: TWindowsMediaPlayer; MainMenu: TMainMenu; OpenPictureDialog: TOpenPictureDialog; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; Eghfdktybt1: TMenuItem; N5: TMenuItem; N6: TMenuItem; N7: TMenuItem; procedure N2Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure N5Click(Sender: TObject); procedure N6Click(Sender: TObject); procedure N7Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.N2Click(Sender: TObject); begin if OpenDialog.Execute then MediaPlayer.URL:=OpenDialog.FileName; end; procedure TForm1.N4Click(Sender: TObject); begin Self.Close; end; procedure TForm1.N5Click(Sender: TObject); begin IF MediaPlayer.PlayState = wmppsPlaying Then MediaPlayer.Controls.Stop Else MediaPlayer.Controls.Play; end; procedure TForm1.N6Click(Sender: TObject); begin IF MediaPlayer.PlayState = wmppsPlaying Then MediaPlayer.Controls.Stop Else MediaPlayer.Controls.Play; end; procedure TForm1.N7Click(Sender: TObject); begin IF MediaPlayer.Playstate =wmppsPlaying Then MediaPlayer.Controls.Pause; end; end. |
Оставлять комментарии к статьям могут только зарегистрированные пользователи.