Лекции Практические и лабораторные занятия Курсовая работа (проект) Самостоятельная работа студента




Скачать 1.86 Mb.
страница 6/7
Дата 11.10.2016
Размер 1.86 Mb.
1   2   3   4   5   6   7

Лабораторная работа №4



Средства создания мультимедийных приложений

Delphi позволяет легко и просто включать в программу такие мультимедийные объекты, как звуки, видео и музыку. В данной работе рассмотрим, как это сделать, используя встроенный в Delphi компонент TMediaPlayer.



Что такое мультимедиа?

Точного определения, что же это такое, нет. Но в данный момент и в данном месте, наверное, лучше дать по-возможности наиболее общее определение и сказать, что “мультимедиа” - это термин относящийся к почти всем формам анимации, звукам, видео, которые используются на компьютере.

Давая такое общее определение, можно сказать, что мы имеем дело с подмножеством мультимедиа, которое включает:

1. Показ видео в формате Microsoft's Video for Windows (AVI).

2. Воспроизведение звуков и музыки из MIDI и WAVE файлов.

Данную задачу можно выполнить с помощью динамической библиотеки Microsoft Multimedia Extensions для Windows (MMSYSTEM.DLL), методы которой инкапсулированы в компоненте TMediaPlay, находящейся на странице System Палитры Компонент Delphi.

Для проигрывания файлов мультимедиа может потребоваться наличие некоторого оборудования и программного обеспечения. Так для воспроизведения звуков нужна звуковая карта. Для воспроизведения AVI в Windows требуется установить ПО Microsoft Video.

Мультимедиа в Delphi


В Delphi есть компонент TMediaPlayer, который дает Вам доступ ко всем основным возможностям программирования мультимедиа. Данный компонент очень прост в использовании. Простоту использования можно воспринимать двояко:

С одной стороны - это дает возможность любому создавать мультимедиа приложения.

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

Компонент TMediaPlayer

Для начала создайте новый проект, затем поместите компонент TMediaPlayer (стр. System Палитры) на форму, как показано на рис.1.

Рис.1: Компонент TMediaPlayer на форме.

Компонент TMediaPlayer оформлен, как панель управления устройством с кнопками. Как и на магнитофоне, здесь есть кнопки “воспроизведение”, “перемотка”, “запись” и др.

Поместив компонент на форму, Вы увидите, что Инспектор Объектов содержит свойство "FileName" (см. рис.2). Щелкните дважды



Рис.2: Свойства TMediaPlayer в Инспекторе Объектов

на этом свойстве и выберите имя файла с расширением AVI, WAV или MIDI. На рис.2 выбран AVI файл DELPHI.AVI. Далее нужно установить свойство AutoOpen в True.

После выполнения этих шагов программа готова к запуску. Запустив программу, нажмите зеленую кнопку “воспроизведение” (крайняя слева) и Вы увидите видеоролик (если выбрали AVI) или услышите звук (если выбрали WAV или MID). Если этого не произошло или появилось сообщение об ошибке, то возможны два варианта:


  1. Вы ввели неправильное имя файла.

  2. Вы не настроили правильным образом мультимедиа в Windows. Это означает, что либо у Вас нет соответствующего ”железа”, либо не установлены нужные драйверы. Установка и настройка драйверов производится в Control Panel, требования к “железу” приводятся в любой книге по мультимедиа (нужна звуковая карта, например совместимая с Sound Blaster).

Итак, Вы имеете возможность проигрывать AVI, MIDI и WAVE файлы просто указывая имя файла.

Еще одно важное свойство компонента TMediaPlayer - Display. Изначально оно не заполнено и видео воспроизводится в отдельном окошке. Однако, в качестве экрана для показа ролика можно использовать, например, панель. На форму нужно поместить компонент Tpanel (находится в палитре SYSTEM), убрать текст из св-ва Caption. Далее, для TMediaPlayer, в свойстве Display выбрать из списка Panel1. После этого надо запустить программу и нажать кнопку “воспроизведение” (см. рис.3)




Рис.3. Воспроизведение AVI на панели.

Два вида программ мультимедиа

Иногда приходится предоставлять пользователям простой путь для проигрывания максимально широкого круга файлов. Это означает, что Вам нужно будет дать пользователю доступ к жесткому диску или CD-ROM, и затем позволить ему выбрать и воспроизвести подходящий файл. В этом случае, на форме обычно располагается TMediaPlayer, предоставляющий возможность управления воспроизведением.

Иногда программист может захотеть скрыть от пользователя существование компонента TMediaPlayer. То есть, воспроизвести звук или видео без того, чтобы пользователь заботился об их источнике. В частности, звук может быть частью презентации. Например, показ какого-нибудь графика на экране может сопровождаться объяснением, записанным в WAV файл. В течении презентации пользователь даже не знает о существовании TMediaPlayer. Он работает в фоновом режиме. Для этого компонент делается невидимым (Visible = False) и управляется программно.


Пример программы с мультимедиа


Рассмотрим пример построения приложения с мультимедиа первого типа. Создайте новый проект (File | New Project). Поместите TMediaPlayer на форму; поместите компоненты TFileListBox, TDirectoryListBox, TDriveComboBox, TfilterComboBox (находятся на палитре Win3.1)для выбора файла. В свойстве FileList для DirectoryListBox1 и FilterComboBox1 поставьте FileListBox1. В св-ве DirList для DriveComboBox1 поставьте DirectoryListBox1. В св-ве Filter для FilterComboBox1 укажите требуемые расширения файлов:

AVI File(*.avi)|*.avi

WAVE File(*.wav)|*.wav

MIDI file(*.MID)|*.mid

Пусть по двойному щелчку мышкой в FileListBox1 выбранный файл будет воспроизводиться. В обработчике события OnDblClick для FileListBox1 укажите

Procedure TForm1.FileListBox1DblClick(Sender:TObject);

begin

with MediaPlayer1 do



begin

Close;


FileName:=FileListBox1.FileName;

Open;


Play;

end;


end;

Внешний вид формы представлен на рис.4





Рис.4: Начальный вид проекта

Сохраните проект, запустите его, выберите нужный файл и дважды щелкните на него мышкой. MediaPlayer должен воспроизвести этот файл в отдельном окне.

Как уже говорилось выше, видеоролик можно воспроизводить внутри формы, например, на панели. Давайте слегка модифицируем проект и добавим туда панель TPanel (см. рис.5). В св-ве Display для MediaPlayer1 укажите Panel1. Нужно убрать надпись с панели (Caption) и св-во BevelOuter = bvNone. Чтобы переключаться при воспроизведении с окна на панель - поместите TСheckBox на форму и в обработчике события OnClick для него запишите:

procedure TForm1.CheckBox1Click(Sender: TObject);

var

Start_From : Longint;



begin

with MediaPlayer1 do begin

if FileName='' then Exit;

Start_From:=Position;

Close;

Panel1.Refresh;


if CheckBox1.Checked then

Display:=Panel1

else

Display:=NIL;



Open;

Position:=Start_From;

Play;

end;


end;
Запустите проект и воспроизведите видеоролик. Пощелкайте мышкой на CheckBox.


Рис.5: Добавлена панель для воспроизведения видео и переключатель окно/панель.

Во время выполнения программы может потребоваться отобразить текущее состояние объекта MediaPlayer и самого ролика (время, прошедшее с начала воспроизведения, длину ролика). Для этого у объекта TMediaPlayer есть соответствующие свойства и события: Length, Position, OnNotify и др. Давайте добавим в проект прогресс-индикатор (TGauge), который отобразит в процентах, сколько прошло времени (см. рис.6). Для обновления показаний индикатора можно воспользоваться таймером. Поместите на форму объект Ttimer (панель SYSTEM), установите для него Interval = 100 (100 миллисекунд). В обработчике события OnTimer нужно записать:


procedure TForm1.Timer1Timer(Sender: TObject);

begin


with MediaPlayer1 do

if FileName'' then

Gauge1.Progress:=Round(100*Position/Length);

end;


Запустите проект, выберите файл (AVI) и щелкните на нем два раза мышкой. При воспроизведении ролика прогресс-индикатор должен отображать процент, соответствующий прошедшему времени (см. рис.6).


Рис.6: Законченное приложение для воспроизведения AVI, WAV и MDI файлов.
Задание для самостоятельного выполнения:

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




  1. САМОСТОЯТЕЛЬНАЯ РАБОТА СТУДЕНТА


СРСП № 1

Тема: Теоретические основы ООП.

Цель: знать основные определения и понятия

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

Первые программы были организованы очень просто. Они состояли из собственно программы на машинном языке и обрабатываемых данных. Сложность программ ограничивалась способностью программиста одновременно мысленно отслеживать последовательность выполняемых операций и местонахождение большого количества данных.

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

Существенно снизило трудоемкость разработки программ появление в языках средств, позволяющих оперировать подпрограммами. Подпрограммы можно было сохранять и использовать в других программах. В результате были накоплены огромные библиотеки расчетных и служебных подпрограмм, которые по мере надобности вызывались из разрабатываемой программы. Типичная программа того времени состояла из основной программы, области глобальных данных и набора подпрограмм (в основном библиотечных), выполняющих обработку всех данных или их части (рис. 1.1).

Рис. 1.. Архитектура программы, использующей глобальную область данных

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

Необходимость исключения таких ошибок привела к идее использования в подпрограммах локальных данных (рис. 1.2).



Рис. 1.. Архитектура программы, использующей подпрограммы с локальными данными.

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

Усилиями многих авторов такая технология была создана и получила название «структурное программирование».



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

Были сформулированы основные принципы выполнения разработки:



  1. принцип нисходящей разработки, рекомендующий на всех этапах вначале определять наиболее общие моменты, а затем поэтапно выполнять детализацию (что позволяет последовательно концентрировать внимание на небольших фрагментах разработки);

  2. собственно структурное программирование, рекомендующее определенные структуры алгоритмов и стиль программирования (чем нагляднее текст программы, тем меньше вероятность ошибки);

  3. принцип сквозного структурного контроля, предполагающий проведение содержательного контроля всех этапов разработки (чем раньше обнаружена ошибка, тем проще ее исправить).

В основе структурного программирования лежит декомпозиция (разбиение на части) сложных систем с целью последующей реализации в виде отдельных небольших (до 40-50 операторов) подпрограмм. В отличие от используемого ранее интуитивного подхода к декомпозиции, структурный подход требовал представления задачи в виде иерархии подзадач простейшей структуры, для получения которой рекомендовалось применять метод пошаговой детализации. С появлением других принципов декомпозиции (объектного, логического и т.д.) данный способ получил название процедурной декомпозиции.

Метод пошаговой детализации заключается в следующем:

1) определяется общая структура программы в виде одного из трех вариантов (рис 1.3):



  1. последовательности подзадач (например, ввод данных, преобразование данных, вывод данных);

  2. альтернативы подзадач (например, добавление записей к файлу или их поиск);

  3. повторения подзадачи (например, циклически повторяемая обработка данных).

Рис. 1.. Основные структуры процедурной декомпозиции



  1. каждая подзадача, в свою очередь, разбивается на подзадачи с использованием тех же структур.

  1. процесс продолжается, пока на очередном уровне не получается простейшая подзадача, которая достаточно просто реализуется средствами используемого языка (1-2 управляющих оператора языка).

Контрольные вопросы

  1. Что представляет собой структурное программирование?

  2. Сформулируйте основные принципы выполнения разработки.

  3. В чем заключается метод пошаговой детализации?

СРСП № 2

Тема: Абстракция данных, объект. Инкапсуляция.

Цель: знать основные определения и понятия
История становления программирования богата какими-либо нововведениями, которые коренным образом меняют всю предшествующую систему. Одним из первых и наиболее ярких таких открытий можно считать выход в свет книги «Программирование без GOTO». Следующим наиболее важным шагом по праву считают переход к процедурно-функциональному программированию, когда программы разбивались на ряд независимых блоков, и в итоге просто грамотно соединялись в единое целое. Ну и третьим, наверное, самым большим открытием можно считать появление объектно-ориентированного программирования. ООП объединило в себе одновременно процедурные методы, для чего создавались самостоятельные модули, структурное проектирование и стимулировало творческий подход к созданию программ.

Сегодня ни одна программа не представляется без наличия в ней объектов. Объектно-ориентированное программирование вышло на новую ступень своего развития, когда внедрить объект в программу не составляет большого труда, а порой, это за вас сделает визуальная среда. Таким образом, такой мощный инструмент, как объект стал доступным даже для начинающего программиста. Теперь любой программист может использовать всю мощь и эффективность объектно-ориентированного программирования.

Неформально можно сказать, что объектно-ориентированное программирование стоит на трёх китах, таких как инкапсуляция, полиморфизм и наследование.

Объектно-ориентированное проектирование — это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.

Для ООП существует важное значение такое понятие, как абстрагирование.

Абстракция выделяет существенные характеристики некоторого объекта, отличающие его от всех других видов объектов и, таким образом, четко определяет его концептуальные границы с точки зрения наблюдателя.

Для удобного представления программы используются модульность и иерархия.

Модульность — это разделение программы на фрагменты, которые компилируются по отдельности, но могут устанавливать связи с другими модулями.

Иерархия — это упорядочение абстракций, разложение их по уровням.

Сохраняемость — способность объекта существовать во времени, переживая породивший его процесс, и (или) в пространстве, перемещаясь из своего первоначального адресного пространства. Говоря другими словами, сохраняемость — это способность классов использоваться не только в одной программе или части программы.



Контрольные вопросы

  1. Дайте определение абстракций

  2. Дайте определение модульности

  3. Дайте определение иерархий

  4. Дайте определение сохраняемости

СРСП № 3

Тема: Иерархия классов, наследование, полиморфизм.

Цель: знать иерархию классов, основные определения и понятия

Все классы Object Pascal порождены от единственного родителя - класса TObject. Этот класс не имеет полей и свойств, но включает в себе методы самого общего назначения, обеспечивающие весь жизненный цикл любых объектов - от их создания до уничтожения. Новый класс можно создать на основе этого базового класса.

Принцип наследования приводит к созданию дерева классов, постепенно разрастающегося при перемещении от TObject к его потомкам. Каждый потомок дополняет возможности своего родителя новыми свойствами и передает их своим потомкам. В состав Delphi входят более 300 различных классов. Для примера приведем небольшой фрагмент дерева классов Delphi:


Рис.1. Фрагмент дерева классов Delphi

    Класс TPersistent обогащает возможности своего родителя TObject; он умеет сохранять данные в файле и получать данные из него. Класс TComponent умеет взаимодействовать со средой разработчика и передает это умение своим потомкам. Класс TComponent является базовым для создания не визуальных компонентов. TControl не только способен работать с файлами и средой разработчика, но он уже умеет создавать и обслуживать видимые на экране изображения. Класс TControl является базовым для создания визуальных компонентов. Потомок этого класса TWinControl может создавать Windows-окна т.д.

    Контрольные вопросы


  1. От какого класса порождены все классы Object Pascal?

  2. К чему приводит принцип наследования?

СРСП № 4

Тема: Полиморфный объект.

Цель: знать понятие полиморфыного объекта

Если  в  качестве  параметра  можно  передавать любой тип из типов, порождаемых типом  параметра,  то  как  тот,  кто  использует  этот параметр,   определяет   какой   тип  объекта  получен.  Фактически пользователь не знает этого явно. Точный тип фактического параметра неизвестен во время компиляции.  Он может быть любым типом объекта, порожденным от типа параметра var и поэтому  называется полиморфным объектом.

     В чем же преимущество полиморфных объектов?  Самое  главное  в том, что    полиморфные  объекты допускают обработку объектов,  тип которых неизвестен во время компиляции.

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

     Старый способ  заключается  в написании отдельных процедур для изображения графических фигур всех типов,  поддерживаемых  пакетом. Нужно  написать  процедуры  DragCircle,  DragSquare,  DragRectangle и т.д.   Даже  если строгое типирование Паскаля разрешает это (и не забывайте,  что  всегда  есть  способы  обойти строгое типирование) различие  между  типами  графических  фигур   будет,   по-видимому, препятствовать написанию общей подпрограммы изображения этих фигур.

     Кроме того,  окружность не имеет сторон,  квадрат  имеет  одну длину стороны,  прямоугольник - две различные длины сторон и т.д. В этом случае искусные программисты на Turbo  Pascal  идут  дальше  и выполняют  вышеописанную задачу следующим образом:  передают запись графической  фигуры  процедуре   DragIt   как   содержимое   общего указателя.   Внутри   DragIt   просматривают   поле   признака  при фиксированном смещении  внутри  записи  графической  фигуры,  чтобы определить  какой  тип  имеет  данная  фигура  и затем осуществляют вставку с помощью предложения case:

      case FigureIdTage of

        Point: DragPoint;

        Circle: DragCircle;

        Square: DragSquare;

        Rectangle: DragRectangle;

        Curve: DragCurve;

      Конечно, включение   семнадцати   небольших  кусков  программы внутрь одного куска является небольшим шагом вперед,  но  при  этом остается нерешенной     следующая   проблема:   что  делать,   если пользователь пакета определит несколько  новых  графических  фигур, например, пользователь     разрабатывает  дорожные  знаки  и  хочет работать с восьмиугольником для знака остановки.   Пакет  не  имеет типа Octagon (восьмиугольник),  поэтому DragIt не имеет метку этого типа в предложении case и,   следовательно,   откажется нарисовать новую восьмиугольную  фигуру.  Если эту запись передать DragIt,  то фигура типа Octagon должна попасть в часть  else  предложения  case как нераспознанная фигура.

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

     Выход состоит в использовании для объектов  правил расширенной совместимости типов Turbo Pascal и проектировании прикладной задачи с использованием полиморфных объектов и виртуальных  методов.  Если процедура  пакета  DragIt написана так,  чтобы она могла работать с полиморфными объектами,  то она будет работать с любыми  объектами, определенными  внутри  пакета  - и с любыми порожденными объектами, которые Вы определили сами.  Если типы объектов  пакета  используют виртуальные методы, то объекты и подпрограммы пакета могут работать с  обычными  графическими  фигурами  в  собственных  терминах  этой фигуры.  Виртуальный  метод,  который  Вы определите сейчас,  может вызываться  файлом  модуля  .TPU  пакета,  который  был  написан  и откомпилирован годом позже. Объектно-ориентированное программирование  делает  это  возможным,  а   виртуальные   методы являются ключом к решению этой проблемы.

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



Контрольные вопросы

  1. Какой тип объекта называется полиморфным?

  2. В чем же преимущество полиморфных объектов? 

СРСП № 5

1   2   3   4   5   6   7


База данных защищена авторским правом ©infoeto.ru 2022
обратиться к администрации
Как написать курсовую работу | Как написать хороший реферат
    Главная страница