главная продукты downloads форум тех. поддержка

 

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

  www.bousoft.com

   главная страница
   новости СМИ
   ссылки
   о проекте
   добавить в Избранное
   сделать стартовой
 

   наши разработки

   shareware
   freeware
   регистрация
 

справка и FAQ   

   статьи
   книги
   FAQ: WinForms
   FAQ: GDI+
   MS Office
   web-технологии
   wap-технологии
 

   программирование

   visual basic: ActiveX
   visual basic: примеры
   .net framework
   c++
   delphi
   rapidQ
 

   наши компакт-диски

   диск BouSoft #3
   диск Windows PE

Работа с файлами формата AVI.

Часть 1. Открытие и закрытие AVI-файла.

 

В этом цикле статей мы постараемся рассмотреть вопросы, связанные с созданием и обработкой AVI-файлов при помощи функций AVIFile, входящих в состав Windows API.

 

Перед вызовом любых AVIFile-функций, Вам нужно убедиться, что в Вашей программе имеется вызов процедуры AVIFileInit (в терминологии языка C она называется функцией, возвращающей NULL). Эта процедура заставляет Windows подготовить библиотеку функций AVIFile к дальнейшему использованию. После завершения всех видов обработки AVI-файла Вы должны вызвать процедуру AVIFileExit.

 

Для нашей простой тестовой программы поместите следующую строку кода в процедуру обработки события Form_Load:

 

Call AVIFileInit '// открываем библиотеку AVIFile

 

А эту строку добавьте в процедуру обработки события Form_Unload:

 

Call AVIFileExit '// закрываем библиотеку AVIFile

 

Если Вы хотите создать классовый модуль для работы с файлами AVI, поместите вызов AVIFileInit в процедуру Class_Initialize, а вызов AVIFileExit - в процедуру Class_Terminate. Такая структура необходима для того, чтобы в самом начале был вызов AVIFileInit, а по завершении работы с AVI-функциями необходим вызов AVIFileExit.

 

Кроме того, нам необходимо получить имя AVI-файла, который нужно открыть. На самом деле я не люблю задавать имена файлов "жестко", в тексте самой программы, поэтому в данном случае я включил в свой проект класс cFileDlg. Этот класс - один из используемых мной для замены громоздкой библиотеки Microsoft Common Dialog. Если это действительно необходимо, Вы можете заменить этот класс вызовом функций библиотеки Common Dialog. Чтобы получить имя AVI-файла, добавьте на форму Вашего проекта кнопку, и в событии обработки нажатия этой кнопки поместите следующие строки кода:

 

Dim res As Long 'код возврата
Dim ofd As cFileDlg 'класс OpenFileDialog
Dim szFile As String 'имя файла

'Получаем имя AVI-файла, с которым будем в дальнейшем работать
Set ofd = New cFileDlg
With ofd
    .OwnerHwnd = Me.hWnd
    .Filter = "AVI Files|*.avi"
    .DlgTitle = "Open AVI File"
End With
res = ofd.VBGetOpenFileName(szFile)
If res = False Then GoTo ErrorOut

 

Этот код выводит на экран стандартное диалоговое окно выбора файла и присваивает имя выбранного пользователем файла переменной szFile. Если пользователь нажал кнопку "Отмена", то программа переходит к метке ErrorOut (ее мы добавим позднее).

 

Следующий шаг при открытии AVI-файла - получить указатель на выбранный пользователем в диалоговом окне файл. Для этого мы используем функцию AVIFileOpen. Добавьте следующие две строки кода в самый конец процедуры обработки события нажатия на кнопку:

 

Dim pAVIFile as Long 'указатель на AVI файл

res = AVIFileOpen(pAVIFile, szFile, OF_SHARE_DENY_WRITE, 0&)

 

Обратите внимание, что для корректного открытия AVI-файла в функции AVIFileOpen необходимо указать верный OF-флаг. Теперь переменная pAVIFile будет содержать интерфейсный указатель на AVI-файл, заданный строкой szFile. Если функция завершилась успешно, она вернет значение AVIERR_OK (это константа, соответствующая числу 0).

 

Так как в дальнейшем мы будем вызывать множество других API-функций, необходимо добавить базовую структуру обработки ошибок, чтобы программа могла корректно завершиться при возникновении каких-либо проблем. Чтобы проверить результат выполнения предыдущей функции, я добавил следующую строчку сразу после вызова AVIFileOpen:

 

If res <> AVIERR_OK Then GoTo ErrorOut

 

Теперь нам нужно добавить метку ErrorOut:, определить, какая ошибка произошла, и корректно завершить работу программы. Корректное завершение программы подразумевает очистку всех ресурсов, которые могли быть использованы при вызове API-функций и отобразить на экране соответствующее сообщение для пользователя. Вызов AVIFileRelease позволяет закрыть файл и очистить интерфейсный указатель pAVIFile. Обратите внимание, что Вы должны выполнять вызов AVIFileRelease ПОСЛЕ КАЖДОГО вызова AVIFileOpen. Также в этом примере мы отображаем для пользователя сообщение об ошибке. Конечно, если Вы создаете класс обработки, то Вы можете вызвать событие появления ошибки в клиентской программе и уже там отобразить окно сообщения. Вот завершающий код для события обработки нажатия кнопки:

 

ErrorOut:
    If pAVIFile <> 0 Then
        Call AVIFileRelease(pAVIFile)
'//
закрываем файл
    End If

    If (rc <> AVIERR_OK) Then
'если произошла ошибка, показываем сообщение пользователю
        MsgBox "There was an error working with the file:" _
                & vbCrLf & szFile, vbInformation, App.Title
    End If

 

Пока все. Теперь Вы умеете открывать существующий AVI-файл в VB и получать на него интерфейсный указатель (pAVIFile). Готовый работающий пример по этой статье можно скачать здесь.

 

   Перевод и редактура: Буторкин Сергей  Источник: http://www.shrinkwrapvb.com

 

e-mail:

 

bousoft@mail.ru