C++ Builder :: Игрописательство :: Как написать игру за 21 день ?

Главная

Введение

ЛИКБЕЗ
C++ Builder


ЛИКБЕЗ
C++

Глава №1
Глава №2
Глава №3
Глава №4
Глава №5
Глава №6

Исходники
к пособию

Мои исходники

Статьи
&
Книги


Гостевая

Ссылки

About

E-mail

Rambler's Top100


Статьи ::Воспроизведение флеш-анимации в Borland C++ Builder, Delphi… и MS Word
 

Воспроизведение флеш-анимации в Borland C++ Builder, Delphi… и MS Word

На сайте http://prog-begin.net.ru эту статью разместил 05.05.2005 Dr_Andrew

Статья посвящена созданию проигрывателя флеш-анимации с использованием технологии ActiveX. Написана в рамках проекта «Редактор кода».

Глядя на какую-нибудь удачную штучку, изящное решение в чужой программе, кто из нас не вздыхал: «ах, как бы и мне сделать что-нибудь подобное!» (салют, Лена! ;)). Разумеется, можно это решение повторить, написав нечто своё с нуля. Однако не всегда нам на это хватает знаний, навыков и умений, а, кроме того, дважды изобретать велосипед – это нерациональная трата мыслительной энергии. Так как же быть? Здесь нам на помощь приходит технология разработки приложений, которую можно назвать квинтэссенцией объектно-ориентированного программирования – компонентная модель, когда программа, как дом из кирпичей, собирается из множества объектов-компонентов. Каждый, кто познал муки создания элементов управления в не слушком-то визуальном Visual C++ версий старее 7-й, может оценить всю гибкость и удобство настройки визуальных (да и невизуальных тоже) компонентов.

Источником компонентов может быть сама среда программирования (например, стандартные компоненты библиотеки VCL сред разработки Borland C++ Builder и Delphi), а также компоненты, созданные независимыми разработчиками и поставляемые с исходными кодами (например, полученные с http://www.torry.net); задача в этом случае сводится лишь к компиляции исходного кода компонента и регистрации его в системе.

Но не все разработчики такие альтруисты. Зачастую мы имеем решение, которое хотелось бы использовать в собственной программульке, лишь в виде бинарного (откомпилированного) файла. Это, однако, далеко не конец света. Не касаясь довольно щекотливого вопроса авторских прав и законности использования фрагментов чужих программ в собственных, я остановлюсь на создании собственных компонентов с использованием технологии ActiveX, которую я уже рассматривал в этой статье: http://srt.starinet.com/begin/modules.php?name=News&file=article&sid=50

Для тех, кто не читал: технология ActiveX предназначена для включения в свои программы откомпилированных динамически присоединяемых библиотек (с расширениями имён *.ocx и *.dll), в том числе написанных на других языках программирования, нежели тот, который Вы используете в своём проекте. Не следует думать, что эту технологию придумали на радость компьютерным пиратам. ;) Современные программы – это крупные проекты, над которыми работают команды программистов, каждый из которых имеет свой любимый язык программирования (наглядный пример – наши проекты, над которыми трудятся любители C++, Паскаля и даже Клариона ;)). Вместо того, чтобы переводить исходный код программы с одного языка на другой, можно собрать её из отдельных откомпилированных модулей, используя технологию ActiveX. Кроме того, подключением модулей ActiveX, так называемых элементов управления, можно значительно расширять возможности основной программы, например, браузера. Такой широко известный браузер, как «ослик» (IE – Internet Explorer), по сути представляет собой не самостоятельную программу, а набор элементов управления ActiveX, подключаемых по мере необходимости.

Примечание: если программа работает с Интернет, то можно ожидать, что она имеет компоненты ActiveX (*.ocx, *.dll), которые можно использовать. Чаще всего они находятся в системной папке Windows.

Теперь можно было бы поподробнее остановиться на таких интересных штучках как COM и OLE, но поскольку я всё-таки не программист, то рискую что-нибудь напутать и вызвать неудовольствие многоуважаемых экспертов. :) Да и зачем пережёвывать теорию, которой полно в любом учебнике? Лучше перейти к примерам, а то у меня уже руки чешутся. А у Вас?

В качестве примера я выбрал вопрос, который с занудной регулярностью мелькает на программистских сайтах: «как реализовать воспроизведение флеш-анимации (т.е. воспроизведение файлов с расширением *.swf, созданных в Macromedia Flash – Dr_Andrew) в моей программе?» Не вижу никаких сложностей и препятствий, ибо флеш-плейер взаимодействует с различными браузерами именно на основе технологии ActiveX. Итак, за работу!

Прежде всего, убедитесь, что в подпапке system32 Вашей папки Windows имеется нужный файл – Flash.ocx (возможный путь к файлу C:Windowssystem32macromedflashFlash.ocx). Если его там нет, то бегом на http://www.mult.ru – там Вам установят этот плейер в добровольно-принудительном порядке. ;)

Убедившись, что ингредиенты в наличии, приступим к приготовлению основного блюда. Запустите… что бы Вы думали? MS Word! Перейдите в редактор Visual Basic for Applications (если Вы не знаете, как это сделать, обратитесь к моей статье по ссылке выше). Создайте пользовательскую форму, измените её свойство Name на MainForm, а свойство Caption – на Флеш-плейер. Щёлкните правой кнопкой мыши по свободному месту панели инструментов ToolBox и выберите в контекстном меню Additional Controls (э-э… вроде, мы это уже когда-то делали? ;))

Пробегите по списку и отметьте (поставьте крестик в коробочке) Shockwave Flash Object. Нажмите OK. Ага! В ToolBox’е появился новый компонент – ShockwaveFlash! Перенесите его на форму.

Из всех свойств компонента нам нужно поработать лишь с двумя: измените имя объекта (Name) на Flash, а свойству Movie присвойте имя (с путём) флеш-файла, который плейер будет проигрывать (например, у меня это E:Мои документыМои видеозаписиMiscsong.swf).

Примечательно, что как только Вы закончите вводить имя файла, плейер начнёт его воспроизведение (только переключитесь на какое-нибудь другое свойство). Как видим, несмотря на сложность самой технологии ActiveX, её использование оказывается простым, как грабли!

Данный пример, однако, я привёл лишь для демонстрации и разминки: честно говоря, я не люблю Visual Basic, т.к. он является интерпретатором, а я на выходе люблю получать старый, добрый EXE-файл. :)

Поэтому закроем всё, что мы «наваяли» в Word’е и начнём шаманить с Borland C++ Builder. Любителям Дельфи повторить всё это будет несложно, ибо касательно интерфейса Билдер и Дельфи – суть одно и то же!

Перед началом работы Вам необходимо создать 2 папки: одну для сохранения файлов проекта и будущей готовой программы медиаплейера (файл с расширением имени *.exe) – где хотите, у меня это “E:__WORKPROGRMNGPLAYER”, а также папку для установки новых компонентов среды разработки Borland C++ Builder. Назовём её “COMPONENTS” и создадим её в папке самой среды разработки (если при установке Билдера вы согласились с установкой по умолчанию, то она будет находиться в C:Program FilesBorlandBorlandC5”). Впрочем, можете создать папку “COMPONENTS” и в любом другом месте, только не удалите её потом по ошибке! В папке “COMPONENTS” создайте папку “MEDIA”.

Запустите среду разработки Borland C++ Builder, закройте автоматически сгенерированное окно формы и соответствующее ему окно редактора кода, откажитесь от сохранения (ответьте “No” на вопрос “Save changes to Unit1.cpp”).

Выберите в меню пункты File – New, откроется окно Object Repository.

Выберите на вкладке ActiveX объект ActiveX Library (это проект с поддержкой ActiveX, он понадобится нам для установки нового компонента). Нажмите “OK” и откажитесь от сохранения изменений в Project1.

Появится окно редактора кода с автоматически сгенерированным кодом проекта на языке C++. Мы не написали ни строчки!

Сохраните проект (File – Save All) в созданной вами папке “… COMPONENTSMEDIA”, изменив предлагаемое по умолчанию имя Project2.bpr на FlashPlayer.bpr. Приступим к установке собственно компонента медиаплейра. Выберите в меню Component – Install ActiveX Control…

В окне “Import ActiveX” выберите пункт (Shockwave Flash (Version 1.0)). В полях ниже появится имя класса нового компонента “TShockwaveFlash” и страница палитры компонентов, на которой вы сможете его найти: ActiveX.

Щёлкните по кнопке с тремя точками рядом с полем ввода “Unit dir name”, чтобы указать папку, в которой будут сохранены файлы нового компонента. В появившемся диалоговом окне укажите заранее созданную нами папку: “COMPONENTSMEDIA”.

Любая современная программа работает с использованием библиотек (файлов, к которым основной модуль программы обращается в ходе работы для решения определённых задач). Поскольку разные программы используют одни и те же библиотеки для решения одинаковых задач, то это позволяет уменьшить размер основного модуля программы. Однако программа должна знать, где искать ту или иную библиотеку. Поэтому мы должны задать путь поиска библиотек. Для этого щёлкните по кнопке с тремя точками рядом с полем ввода Search Path.

В появившемся окне Directories щёлкните по кнопке с тремя точками, чтобы выбрать путь поиска файлов библиотек. Логично, если это будет “C:Windows”.

Нажмите кнопку “Add”, чтобы добавить путь в список, после чего, используя кнопки с синими стрелочками, расположите строчку “C:Windows” после $BCB(Lib). Теперь всё готово для установки нового компонента. Нажмите кнопку “OK”, а затем – “Install”. Появится окно инсталляции нового пакета. Выберите вкладку “Into new package”, а затем, с использованием кнопки “Browse” выберите папку для установки пакета компонента – всё ту же созданную нами “COMPONENTSMEDIA”. В поле «Имя файла» введите название пакета – Flash, после чего нажмите кнопку «Открыть».

Нажмите кнопку “OK”, после чего ответьте “Yes” на вопрос, следует ли откомпилировать и установить компонент в системе.

После компиляции появится сообщение, что в системе зарегистрирован новый класс и установлен новый компонент. Найти вы его можете, естественно, на странице “ActiveX” палитры компонентов.

Закройте окна пакета и редактора кода, согласившись сохранить изменения в проекте.

Всё! Теперь у нас есть компонент, который мы создали своими руками (ну, пусть и не без помощи компании Shockwave ;))!

Теперь, когда у нас есть нужный компонент, приступим к собственно проектированию нашей программы. Создайте новый проект File – New Application. Появится сгенерированная новая форма, вроде той, какую мы видим при каждом запуске Билдера.

В инспекторе объектов измените свойство “Caption” формы на “Флеш-плейер”, свойству “Position” – poDesktopCenter, “Name” – “MainForm”.

Перенесите на форму компонент MainMenu (класс TMainMenu, вкладка Standard панели инструментов).

Измените её свойство Name на MainMenu.

Дважды щёлкните по значку компонента, чтобы перейти в редактор меню. Создадим в меню единственный пункт, присвоим его свойству Name значение FileMenuItem, а свойству Caption – Файл.

В данном пункте меню создадим 4 подпункта со следующими значениями свойств Name и Caption:

OpenMenuItem – Открыть; PlayMenuItem – Играть; SeptMenuItem – в свойство Caption занесём минус (-); ExitMenuItem – Выход.

В обработчик события щелчка по ExitMenuItem запишем MainForm->Close();

Перенесите на форму компонент OpenDialog (класс TOpenDialog, вкладка Dialogs панели инструментов). Зададим следующие значения его свойствам:

DefaultExt - *.swf, Filter – Все поддерживаемые типы / *.swf, Name – OpenDialog, Options – установите в true следующие свойства ofExtensionDifferent, ofPathMustExist, ofFileMustExist, Title – Открыть флеш-анимацию.

Перейдите на вкладку “ActiveX” палитры компонентов и перенесите компонент TShockwaveFlash на форму. Измените его свойство “Align” на значение “AlClient”, тогда плейер займёт всю область окна. Задайте свойство “AutoSize” главной формы в true. Также задайте следующие значения свойствам флеш-плейера:

Name – Flash, Playing – false.

Сохраните файлы проекта в папке, которую вы создали заранее для своей программы, измените имя проекта, данное ему по умолчанию (Project1.bpr), на “FlashPlayer.bpr”.

Теперь пришла пора написать обработчики событий щелчка по пунктам меню. Понятное дело, что при щелчке по пункту «Открыть» пользователь должен получить возможность с помощью диалога открытия файла выбрать флеш-анимацию для воспроизведения. Как мы знаем из примера с Word’ом, имя файла задаётся свойством Movie. Тем самым, обработчик события будет выглядеть следующим образом:

if(OpenDialog->Execute())

{

Flash->Movie=OpenDialog->FileName;

}

Вернитесь в редактор свойств главного меню и измените свойство Checked пункта PlayMenuItem на true. Напишем обработчик события щелчка по этому пункту:

if(PlayMenuItem ->Checked==true)

{

PlayMenuItem ->Checked=false;

Flash->Playing=false;

}

else

{

PlayMenuItem ->Checked=true;

Flash->Playing=true;

}

Тем самым, если мы захотим приостановить воспроизведение флеш-мульта, нам достаточно только снять галочку в этом пункте меню.

На этом всё. Сохраните изменения, откомпилируйте программу и наслаждайтесь собственным (пусть и не совсем ;)) флеш-плейером!

 

 

 

 
 
Hosted by uCoz