div.main {margin-left: 20pt; margin-right: 20pt}
Программирование на VBA в
Microsoft Office. Проигрыватель звуковых файлов
Здесь мы рассмотрим простейший пример применения
мультимедиа в приложениях на Visual Basic for Applications — проигрывание
WAV-файлов. Толковое озвучивание событий в прикладной программе всегда
привлекает внимание пользователей и повышает их интерес к работе с этой
программой. Остаётся узнать, как это сделать.
Запустите Word или Excel, откройте документ с
примерами прошлой статьи (КГ № __ “…Создаём свои объекты”) — объектом
dlgFileOpen и формой ownMediaPlayer для выбора WAV-файлов. Вышеозначенный
пример таблицы Excel с программами на VBA Вы сможете также найти на http://brestmedia.f2s.com/ в
разделе “Скачать”.
Запустите редактор Visual Basic (для
начинающих — комбинация Alt+F11). Далее нам понадобится ещё один объект. В
окне проекта кликните правой кнопкой мыши и во всплывающем меню выберите пункт
“Вставить->” и далее “Модуль класса”. В окне свойств назовите класс
SoundPlayer.
Теперь в окне исходного текста будем
программировать.
Простое проигрывание звука
осуществляется функцией WinAPI PlaySound. Её 32-разрядная версия в Win32API
именуется PlaySoundA. Она может воспроизводить WAV-файлы, все
зарегистрированные системные события и ресурсы из EXE и DLL файлов. Описание
её выглядит следующим образом:
Private Declare Function playSound Lib
"winmm.dll" _
Alias "PlaySoundA" (ByVal lpszSoundName
As String, _
ByVal hMod As Long, ByVal uFlags As
Long) As Long
Параметры: lpszSoundName — имя
WAV-файла, системного события либо ресурса, которые надо воспроизвести, hMod —
источник воспроизведения. Если источник — файл или системное событие, то
hMod=0, а если источник — ресурс из EXE или DLL файла, то hMod должен
содержать ссылку на загруженный в память ресурс. uFlags — параметры
воспроизведения.
Если надо воспроизвести файл, то
необходимо устанавливать флаг SND_FILENAME. Если системное событие, то —
SND_ALIAS. Если указанное событие или файл не существуют, то функция
проигрывает звук, соответствующий системной ошибке.
Дополнительные флаги обозначают:
SND_SYNC — синхронное воспроизведение (приложение ожидает завершения
проигрывания звука и только потом продолжает работу), SND_ASYNC — асинхронное
воспроизведение (приложение не ждёт завершения проигрывания звука, а
параллельно продолжает работу), SND_NODEFAULT — в случае ошибки (файл не
найден) не проигрывается стандартный звук, SND_NOWAIT — если драйвер звуковой
карты занят, не ждать освобождения.
Тут необходимо уточнить, что в
приложениях Microsoft Office (как 97, так и 2000) в разных операционных
системах (Windows 9x/NT/2000) асинхронное воспроизведение не работает. Почему,
мне установить не удалось. Если получится у Вас — сообщите.
Описание остальных свойств и методов
класса.
‘Хранит имя последнего проигранного
файла
Private PlayFileName As
String
‘Хранит имя последнего проигранного
события
Private PlaySysMsgAlias As
String
‘Остановить текущее проигрывание
звука
Public Function PlayStop() As
Boolean
Call playSound("", 0&,
SND_NODEFAULT)
End Function
‘Виртуальное свойство — при
присваивании
‘ему имени WAV-файла проигрывается
звук
Property Let PlayFile(ByVal
strWAVFileName As String)
PlayFileName = strWAVFileName
Call playSound(strWAVFileName, 0&,
_
SND_ASYNC Or SND_NODEFAULT _
Or SND_FILENAME Or
SND_NOWAIT)
End Property
‘Виртуальное свойство — при чтении
возвращает
‘имя последнего проигранного
файла
Property Get PlayFile() As
String
PlayFile = PlayFileName
End Property
‘При присваивании названия
‘зарегистрированного
системного
‘события проигрывается
звук
Property Let PlaySys(ByVal
strSysMsgAlias As String)
PlaySysMsgAlias =
strSysMsgAlias
Call playSound(strSysMsgAlias, 0&,
SND_ASYNC Or SND_NODEFAULT Or SND_ALIAS)
End Property
‘Возвращает имя последнего
проигранного
‘системного события
Property Get PlaySys() As
String
PlaySys = PlaySysMsgAlias
End Property
Для использования SoundPlayer’а в
редакторе Visual Basic откройте для редактирования форму
ownMediaPlayer.
Добавьте кнопку проигрывания файла и
двойным щелчком мыши по форме перейдите в окно редактирования исходного текста
формы.
В разделе описаний добавьте
строку:
Dim SNDPlayer As
SoundPlayer ‘— объект типа
SoundPlayer
‘Метод инициализации формы уже будет
выглядеть так:
Private Sub
UserForm_Initialize()
‘Создание экземпляра
объекта
Set SNDPlayer = New
SoundPlayer
Set dlgFiler = New
dlgFileOpen
End Sub
‘Метод обработки события —
нажатия
‘кнопки проигрывания звука
Private Sub
CommandButton1_Click()
SNDPlayer.PlayFile =
TextBox1.Value
End Sub
Сохраните набранные программы, перейдите
в таблицу Excel и нажмите кнопку запуска формы. Нажмите кнопку выбора файла и
укажите WAV-файл. В поле ввода формы появится его полное имя. Теперь нажмите
кнопку проигрывания звука и в полной мере насладитесь работой своего
творения.
Чтобы достичь более полного контроля над
проигрыванием звука, например, воспроизводить звук в интервалах от 2-й секунды
до 4,52 секунды, произвольно останавливать проигрывание, делать паузы и
продолжать воспроизведение, и т.д., надо пойти другим путём. Необходимо
запрограммировать работу приложения с мультимедиа через MCI (Media Control
Interface), что мы далее и будем делать.
В следующей статье рассмотрим пример
объекта для проигрывания AVI-видеороликов в окне формы через MCI. При этом
вывод видео в окне выполняется независимо от основного приложения, т.е.
приложение продолжает работу, не ожидая окончания видеоролика.
Пример таблицы Excel с описанными
программами на VBA Вы сможете найти на http://brestmedia.f2s.com/ в
разделе “Скачать”.
to be continued…
Виктор Маковчик makovchik@tut.by http://brestmedia.f2s.com/
|