Flash - статьи

Проигрывание Flash ролика


Создаём на CBuilder новый проект с единственной формой Form1. Из палитры компонентов ActiveX помещаем на форму компоненту ShackwaveFlash. Заносим с помощью инспектора объектов или программно в свойство ShockwaveFlash1->Movie полный путь и имя файла Flash ролика (расширение файла swf). В примерах Flash ролик помещён в тот же каталог что и exe-файл, поэтому в них свойство удобно менять программно, размещая код в обработчике события создания формы:

void __fastcall TForm1::FormCreate(TObject *Sender)

{

ShockwaveFlash1->Movie = ExtractFilePath
(Application->ExeName) + "ball.swf";

}

Установите свойства ShockwaveFlash1->Loop и ShockwaveFlash1->Playing в true. Нажмем F9, чтобы провести промежуточную проверку приложения. На форме должен двигаться и деформироваться овал. Если вместо этого на форме просто белый квадрат, то скорее всего неправильно установлено свойство ShockwaveFlash1->Movie (файл ball.swf находится в ).

Отметим, что свойства, методы и поля класса TShockwaveFlash можно просмотреть в файле ShockwaveFlashObjects_OCX.h. Рекомендуем сделать это. Информацию о методах можно найти на сайте компании Macromedia, в описании и в Help пакета Flash.

Теперь модифицируем наше приложение так, чтобы продемонстрировать возможности управления ходом выполнения Flash ролика. Вид главной формы представлен на рис. 5. Кнопки Stop, Play, Back, Forward, Rewind вызывают одноименные методы ShockwaveFlash1:

  • Stop – останавливает выполнение ролика;

  • Play – инициирует выполнение ролика с текущего фрейма;

    Back - переход на предыдущий фрейм;

    Forward - переход на следующий фрейм;

    Rewind - переход на следующий фрейм;



При нажатии кнопок Back, Forward, Rewind, если ролик проигрывается то, перед выполнением соответствующего метода производится остановка методом Stop.

Рис. 6. Вид формы

Кнопка "Перейти" совместно с CSpinEdit1 демонстрирует использование метода ShockwaveFlash1->GotoFrame – переход на произвольно заданный номер фрейма.

Кнопка "Загрузить новый Flash ролик" вызывает диалоговое окно и загружает новый swf файл. (См. поставляемый с примером square.swf)..


Отметим, что в программе используются:



  • свойство ShockwaveFlash1-> TotalFrames для отображения общего количества фреймом во Flash ролике;


  • метод ShockwaveFlash1->IsPlaying. Возвращаемое им значение позволяет определить проигрывается ли в текущий момент ролик.

    метод ShockwaveFlash1->CurrentFrame для отображения номера текущего фрейма при остановках.


Исходный код программы находится в архиве .

Текст основного модуля из архива

#include < vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------

#pragma package(smart_init)

#pragma link "ShockwaveFlashObjects_OCX"

#pragma link "CSPIN"

#pragma resource "*.dfm"

TForm1 *Form1;

//-------------------------------

__fastcall TForm1::TForm1
(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------

void TForm1::ShowCurFrame(void) //
показать номер текущего фрейма

{

Label2->Caption = IntToStr
(ShockwaveFlash1->CurrentFrame()); // номер текущего фрейма

Label2->Visible = true;

}

//--------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

ShockwaveFlash1->Movie =
ExtractFilePath(Application->ExeName) + "ball.swf";

Label4->Caption = IntToStr
(ShockwaveFlash1->TotalFrames); // Общее число фреймов

}

//--------------------------------

void __fastcall TForm1::
Button2Click(TObject *Sender)

{

ShockwaveFlash1->Stop();

ShowCurFrame();

}

//--------------------------------

void __fastcall TForm1::
Button3Click(TObject *Sender)

{

ShockwaveFlash1->Play();

Label2->Visible = false;

}

//--------------------------------

void __fastcall TForm1::
Button4Click(TObject *Sender)

{

if (ShockwaveFlash1->IsPlaying())

ShockwaveFlash1->Stop();
// если проигрывается, то остановим

ShockwaveFlash1->Back();
// на предыдущий фрейм

ShowCurFrame();

}

//---------------------------------

void __fastcall TForm1::
Button5Click(TObject *Sender)

{

if (ShockwaveFlash1->IsPlaying())



ShockwaveFlash1->Stop();
// если проигрывается, то остановим

ShockwaveFlash1->Forward();
// на следующий фрейм

ShowCurFrame();

}

//--------------------------------

void __fastcall TForm1::
Button6Click(TObject *Sender)

{

if (ShockwaveFlash1->IsPlaying())

ShockwaveFlash1->Stop(); //
если проигрывается, то остановим

ShockwaveFlash1->Rewind(); //
на 1-й фрейм

ShowCurFrame();

}

//--------------------------------

void __fastcall TForm1::
Button7Click(TObject *Sender)

{

ShockwaveFlash1->GotoFrame
(StrToInt(CSpinEdit1->Text)); // на введенный фрейм

ShowCurFrame();

}

//---------------------------------

void __fastcall TForm1::
Button8Click(TObject *Sender)

{

if (OpenDialog1->Execute())

{

if (ShockwaveFlash1->IsPlaying())

ShockwaveFlash1->Stop(); //
если проигрывается, то остановим

ShockwaveFlash1->Movie =
OpenDialog1->FileName;

Label4->Caption = IntToStr
(ShockwaveFlash1->TotalFrames); // Общее число фреймов

ShockwaveFlash1->Play();

Label2->Visible = false;

}

}

//-------------------------------


Содержание раздела