Смекни!
smekni.com

Учебно-методическое пособие для студентов физико-математических специальностей вузов Балашов (стр. 15 из 18)

Таблица 6. Назначение кнопок компонента MediaPlayer

Кнопка

Действие

Play Воспроизведение
Pause Пауза воспроизведения или записи. Если медиаплеер в момент щелчка уже в состоянии паузы, то воспроизведение или запись возобновляются
Stop Остановка воспроизведения или записи
Next Переход на следующий трек или в конец
Prev Переход на предыдущий трек или в начало
Step Перемещение вперед на заданное число кадров
Back Перемещение назад на заданное число кадров
Record Начало записи
Eject Освобождение объекта, загруженного в устройство

Воспроизведение видеоинформации по умолчанию производится
в окно, которое создает само открытое устройство мультимедиа.

В компоненте MediaPlayer определены события OnClick и OnNotify. Первое из них происходит при выборе пользователем одной из кнопок медиаплеера. Второе — OnNotify — происходит после возвращения очередного метода, если свойство медиаплеера Notify было установлено
в true. Способ возврата любого метода медиаплеера определяется свойством Wait. Если установить Wait равным false, то возвращение управления в приложение происходит сразу после вызова метода, не дожидаясь завершения его выполнения. Таким образом, задав Notify равным true
и Wait равным false, можно обеспечить немедленный возврат в приложение и отображения пользователю текущего состояния объекта мультимедиа.

Свойства Notify и Wait действуют только на один очередной метод, поэтому их значения надо каждый раз восстанавливать в обработчиках событий OnClick или OnNotify.

Пример 3

Создадим проект, который позволяет проигрывать мультимедийные файлы. Начните новый проект и перенесите на форму компоненты MediaPlayer, Button и OpenDialog.

В фильтре компонента OpenDialog можно задать, например, имена фильтров и сами фильтры, как показано на рисунке 32.

Рисунок 32

Обработчик нажатия на кнопку может содержать операторы

procedure TForm1.Button1Click(Sender: TObject);

begin

if OpenDialog1.Execute() then

MediaPlayer1.FileName:= OpenDialog1.FileName;

MediaPlayer1.Open;

end;

В данной процедуре открывается устройство мультимедиа, соответствующее выбранному пользователем файлу. При этом надо проследить, чтобы в компоненте MediaPlayer свойство DeviceType равнялось dtAutoSelect. Это обеспечит автоматический выбор соответствующего устройства мультимедиа, исходя из расширения выбранного файла.

В компоненте MediaPlayer при желании можно указать имя файла FileName, открываемого в момент начала выполнения приложения. Тогда надо установить свойство AutoOpen в true.

С помощью данного приложения вы можете слушать музыку, смотреть немые и звуковые клипы, т. е. наслаждаться всеми прелестями мультимедиа, если, конечно, они уже есть в вашем компьютере.

Задания:

1. Проверьте все примеры из лабораторной работы.

2. Создайте программу, в которой непрерывно прослушивается один и тот же звуковой файл во все время работы приложения.

3. Создайте приложение, которое позволяет запускать видеоклипы, посредством компонента Animate.

Лабораторная работа 10. Исключительные ситуации

Цель: изучить класс Exception и возможности при обработке ошибок.

Класс Exception является прямым потомком базового класса TObject. Вместе со своими потомками он предназначен для обработки исключительных ситуация (исключений), возникающих при некорректных действиях программы: например, в случае деления на 0, при попытке открыть несуществующий файл, при выходе за пределы выделенной области динамической памяти и т. п. Рассматриваются основные свойства исключений и их использование для повышения надежности программ.

При работе в среде Delphi эксперименты с исключениями плохо прослеживаются, т. к. при каждом исключении среда перехватывает управление программой. В этом случае бывает полезно отменить такое поведение среды. Для этого вызовете опцию Tools, Debugger Options и на странице Language Exceptions уберите флажок в переключателе Stop on Delphi Exceptions.

Для обработки исключений в Object Pascal предусмотрен механизм защищенного блока, который может записываться в двух различных видах. Первый имеет следующий вид:

try

<операторы>

except

<обработчики исключений>

else <операторы>

end;

Второй определяется в виде

try

<операторы>

finally

<операторы>

end;

Защищенный блок начинается зарезервированным словом try (попытаться [выполнить]) и завершается словом end. Существуют два типа защищенных блоков — except (исключить) и finally (в завершение), отличающихся способом обработки исключения. В блоке except порядок
выполнения операторов таков: сначала выполняются операторы секции try... except; если операторы выполнены без возникновения исключительной ситуации, работа защищенного блока на этом прекращается и управление получает оператор, стоящий за end; если при выполнении части try возникло исключение, управление получает соответствующий обработчик в секции except, а если таковой не найден — первый из операторов, стоящих за словом else.

В блоке finally операторы в секции finally...end получают управление всегда, независимо оттого, возникло ли исключение в секции try...finally или нет. Если исключение возникло, все операторы в секции try...finally, стоящие за «виновником» исключения, пропускаются и управление получает первый оператор секции finally...end. Если исключения не было, этот оператор получает управление после выполнения последнего оператора секции try...finally.

Обработчики исключений в блоке except имеют такой синтаксис:

on < класс исключения> do <оператор>;

Здесь on, do — зарезервированные слова; <класс исключения> — класс обработки исключения; <оператор> — любой оператор Object Pascal.

Обратите внимание: имя класса служит своеобразным ключом выбора, а собственно обработка осуществляется оператором, стоящим за do (этот оператор может быть составным, так что обработка исключения может занимать произвольное количество операторов Object Pascal).

Поиск нужного обработчика осуществляется с начала списка вниз до тех пор, пока не встретится класс, способный обрабатывать исключение данного типа. Если подходящего класса не обнаружено, управление передается операторам, стоящим за словом else, а если таковых нет, то выполняется умалчиваемая обработка исключения.

Если важен лишь факт возникновения исключительной ситуации
и несущественен тип связанной с ним ошибки, можно оставлять только необходимый код реакции на любую ошибку.

try

………..

except

ShowMessage(‘Ошибка’);

………………

end;

Защищенные блоки могут вкладываться друг в друга на неограниченную глубину и встречаться в блоке обработки исключительной ситуации.

Класс Exception является родительским для всех классов исключений. У этого класса имеется множество дочерних классов, каждый из которых отвечает за конкретное исключение. При возникновении исключительной ситуации объекты классов обработчиков создаются и уничтожаются автоматически. Таких классов очень много, поэтому рассмотрим только некоторые:

EAbort — обработка любой исключительной ситуации;

EIntError — любая ошибка в целочисленных вычислениях, среди
которых отметим такие: EDivByError — деление на 0, EintOverload — переполнение;

EMatcError — любая ошибка при выполнении вычислений с плавающей запятой, среди которых: EZeroDivide — вещественное деление на 0; EOverflow — переполнение; EInfalidArgument — аргумент функции вне допустимого диапазона;

EArrayError — ошибка при работе с массивами;

EConvertError— ошибка в функциях StrToInt и StrToFloat;

EFOpenError — ошибка при открытии файла;

EInOutError — любая ошибка в файловых операциях;

EInvalidGridOperator — любая ошибка при работе с таблицами;

EInvalidGraphOperator — недопустимая графическая операция.

Рассмотрим еще некоторые исключительные ситуации, которые будут работать с объектами, рассматриваемыми в следующих лабораторных работах: EStrimError — произвольная ошибка при работе с потоками данных, EThread — ситуация борьбы за общий ресурс в программе с несколькими потоками событий, EDatabaseError — ошибка при работе с базами данных.

Пример 1

Необходимо заполнить таблицу числа по следующему правилу: генерируется случайное число, а затем в ячейке компонента StringGrid1 сохраняется обратное значение. Заранее не известно, был ли сгенерирован 0, и будет ли допустима операция деления. Для корректной работы данной программы необходимо задавать защищенный блок; процедура формирования таблицы будет иметь вид:

procedure TForm1.Button1Click(Sender: TObject);

var i,j:Integer;

a:real;