Flash-элементы

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Flash-элементы » Flash + Delphi, Flash + Builder C++ » Взаимодействие Flash и Delphi, Flash и Builder C++


Взаимодействие Flash и Delphi, Flash и Builder C++

Сообщений 1 страница 16 из 16

1

В данном разделе рассматриваем взаимодействие Flash и Delphi.
Вопрос такого взаимодействия (так же как и Flash + Builder C++) возникает далеко не у всех. Еще несколько лет назад он был совершенно не проработан и по нему можно было найти крохи информации. Он и сейчас остается почти таким же в отличие от Flash + PHP.

Взаимодействие Flash и Delphi происходит посредством элемента ActivX для Flash (Shockwave Flash), устанавливаемого в Delpi-приложение.
(Аналогично происходит взаимодействие Flash и Builder C++)
Спрашивается, а зачем это надо? Ну, если у Вас возник такой вопрос, то, значит пока это Вам, точно, не надо.
А, вообще, ответ может звучать примерно так. К Delphi-приложению с его огромной многофункциональностью присоединяется элемент с огромными возможностями по управлению графикой. То есть приложению добавляется этакое интеллектуальное графическое ядро. И смысл такого подключения в том, чтобы передать во Flash нужную информацию, а уж она и сгенерирует и нарисует все, что нужно. И результаты такого симбиоза очень даже впечатляют.

0

2

Ссылка на хорошую статью по Установка компонента Shockwave Flash
Можно сказать пошаговая инструкция по установке.

А здесь ресурс, название которого говорит само за себя. Но что-то сильной активности там нет delphiflash.com.
На главной странице предлагаются для скачивания два пакета.
1. Flash Viewer Engine - набор компонентов для Delphi, C++ Builder and Lazarus, которые добавляют некоторые возможности, такие как загрузка из разных источников, сграбивание 32-RGBA фреймы и тд..

2. Flash SlideShow Engine (ActiveX Edition and Delphi Edition) - компонент для создания анимации во Flash, подобно слайд-шоу с различными эффектами движения и трансформации.

0

3

Эту статью "Установка компонента ..." хорошо знаю, попалась мне пару лет назад. Все очень подробно и хорошо описано (особенно для тормозов).
Конечно, установка ShockwaveFlash в Delphi-приложение не вызывает особых проблем (хотя у кого как). Но, судя по информации в сети, технология эта не особенно популярна вследствие непонимания, а зачем это надо. Flash как отдельная web-технология, благодаря значительному развитию ее AS3 Адобом, почти самодостаточна. А Delphi традиционно сама по себе. Вот и непонятно, зачем их совмещать?
Необходимость совмещения чаще возникает у разработчиков ПО, чем у web-мастеров и админов. И при правильном применении этой технологии результат можно получить очень впечатляющий. Это я говорю на основе личного опыта. :glasses:

Отредактировано Brunoff (2012-11-18 15:33:29)

0

4

Brunoff написал(а):

а зачем это надо

Ну, надо или не надо - это от поставленной задачи зависит. А здесь решение  как раз очень простое и удобное. Вставил компонент shockwave, настроил протокол обмена с программой и все. Потом даже редактировать Flash можно независимо от общей программы, что очень удобно.

0

5

Конечно, возможность независимого редактирования графики очень удобно. Особенно, если нужно править только графику. Но это не единственное достоинство. И с передачей данных во Flash-приложение можно получить большой выигрыш, ведь не надо передавать буквально все, достаточно только то, на основе чего Flash сама может отрисовать графические объекты (особенно если много однотипных с одинаковыми свойствами).
Был у меня такой проект по мониторингу серверных процессов. Там как раз было много однотипных граф. объектов, которые рисовала Flash как наглядный результат мониторинга.

0

6

Brunoff, можете рассказать об этом проекте? Лишние подробности можно опустить (если это касается коммерческого проекта), только суть применения технологии.

0

7

Да, было бы интересно услышать о применении технологии в реальном проекте.

0

8

Некоторое время назад мы разрабатывали информационную систему. В общих чертах суть этой системы следующая.
На сервере содержится тематическая информация (в базе данных). Тематик не слишком много, около пары сотен. Внешний пользователь после регистрации в системе может сделать запрос на сервер для получения любой тематической информации из БД. Запрос делается из клиента, установленного на ПК пользователя.
Клиент формирует запрос к системе по доступным тематикам (он знает о доступности в результате обновление, приходящих с сервера).
На стороне севера запрос обрабатывается обработчиками. Их порядка 10, работают последовательно. Сначала анализ санкционированности запроса, затем проверка регистрации пользователя, затем разбирается что запрашивается и т. д. до последнего. Последний обработчик формирует собственно задание на подготовку архива с запрошенной информацией. Архив пересылается пользователю и клиент расшифровывает архив. Это сама инфосистема.

Если все обработчики отработали корректно, то все нормально. Но если на любом этапе какой-то из обработчиков определил некорректную информацию, то он выставляет код ошибки и завершает весь цикл обработки.
Каждый обработчик пишет свой суточный лог-файл. При большом количестве запросов эти файлы могут достигать несколько десятком Мб.
Задача была в мониторинге работы всех обработчиков с возможностью видеть незавершенные циклы обработки.
Делала это программа на Builder С++ с графическим Flash-ядром. Она считывала файлы логов и передавала для отрисовки во Flash. Хоть файлы логов и большие, но для отрисовки важны только времена событий.
Flash по полученной информации строила гистограммы для каждого обработчика. Поскольку время всего цикла обработки невелико (неск. мс). то гистограммы для всех обработчиков (в масштабе графика) для одного события выстраиваются вдоль одной вертикальной линии. А если цикл не завершен, то линия обрывается и это сразу видно на графике.
Вот пара скринов с гистограммами для 4-х обработчиков. Второй скрин с увеличенным масштабом (раздвинут по времени). Хорошо видны незавершенные группы.
http://s2.uploads.ru/t/uIODd.jpg http://s3.uploads.ru/t/SUhXI.jpg

Функциональная схема самой системы приведена на картинке. Картинка снята с Flash-приложения для демонстрации наглядности работы информационной системы. Само Flash-приложение можно посмотреть в Галерее в разделе приложений.

https://forumstatic.ru/files/0012/30/1b/76750.jpg

Вот, собственно, такое совместное использование С++ и Flash.

Отредактировано Brunoff (2012-11-26 09:24:50)

0

9

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

0

10

Так особенно большой скорости передачи и нет. Нет необходимости считывать логи в реальном масштабе времени. Можно снимать данные по таймеру хоть раз в минуту. Переписываются только события с прошлого замера. И в самой Flash анимации особой нет (кроме масштабирования рабочего поля), позиционировал по временной шкале и установил штрих.
Так что вполне справлялась. Подвисаний не было. Но при этом наглядно просматривались все сбои.

0

11

Так при такой частоте событий гистограммы очень плотно стоят при отсутствии масштабирования. Как же сбои то заметить? Или нужно масштабировать, но тогда все время бегать по таймлайну?

0

12

Modus, все правильно.
Для поиска сбоев была предусмотрена некоторая автоматизация. Время событий для незавершенных процессов писалось в массив. И потом по этому массиву можно было быстро найти эти события на таймлайне.
А для контроля в реальном масштабе как раз можно раздвинуть тамлайн до нужных пределов (например, один час на весь экран или еще меньше) и смещать синхронно с текущим временем. Тогда будут отображаться только текущие обработки.

0

13

Тогда все понятно и вполне логично.
А сами рисунки гистограмм куда-нибудь сохранялись? И что с ними делать дальше?

0

14

Да никуда сохранять их не надо. Они только для наглядности отображения процессов. Кроме того по файлам логов всегда можно отрисовать заново по любой дате. А факты сбоев фиксировались для отчета о работе.

0

15

Код:
/****** AS3 ******/
/**
* text_df - TextField на сцене с инстанименем text_df
* button - Кнопка на сцене с инстанс именем button
**/
import flash.events.MouseEvent;
import flash.external.ExternalInterface;

// В ExternalInterface регистрируем функцию по которой будем вызывать её из Delphi
ExternalInterface.addCallback("myFunction", myFunction);

function myFunction(val:String, i:Number){
 text_df.text = val+" "+ String(i);
}

// Прослушиватель для кнопки "buttoon"
button.addEventListener(MouseEvent.CLICK, myClick);

function myClick(event:MouseEvent){
 ExternalInterface.call("FlashToDelphi","Delphi+Flash",2013);
}

Создаём проект Delphi.
Импортируем ActiveX Control ShockwaveFlash.
На форму кидаем ShockwaveFlash1 и одну кнопку Button1.
Сохраняем проект рядом с нашим SWF файлом.
По созданию формы пишем следующий код:

Код:
// Delphi
procedure TForm1.FormCreate(Sender: TObject);
begin
 // Указываем ShockwaveFlash1 где находится ролик.
 ShockwaveFlash1.Movie:= ExtractFilePath(Application.ExeName)+'myswf.swf';
end;

В ObjectInspector ShockwaveFlash1 на вкладке "Event" находим событие OnFlashCall кликаем два раза и пишем следующее:

Код:
// Delphi
procedure TForm1.ShockwaveFlash1FlashCall(ASender: TObject;
  const request: WideString);
begin
 ShowMessage(request);
end;

Кликаем на Button1 дважды и пишем следующее:

Код:
// Delphi
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShockwaveFlash1.CallFunction('<invoke name="myFunction" returntype="xml">'+
                                '<arguments>'+
                                   '<string>ProjectSoft</string>'+
                                   '<number>2013</number>'+
                                '</arguments>'+
                               '</invoke>');
end;

Лучше один раз показать, как это делается.
Так же не забываем, что swf мы можем встроить проект как ресурс. Так же мы можем в проект встроить как ресурс и саму библиотеку ActiveX, проверить установлен ли Flash у юзера, установить на время работы программы если не установлен и по окончанию работы программы удалить ActiveX если установку производила наша программа.
Сылка на оригинальную статью "Flash AS3 + Delphi, Обоюдное взаимодействие Flash и Delphi"

0

16

ProjectSoft, приветствуем Вас на нашем форуме. Ваш ник и аватар известен далеко за пределами Demiart, где Вы всем очень помогаете своими советами, особенно новичкам, у которых уйма вопросов по каждому чиху во Flash.

ProjectSoft, спасибо за конструктивное дополнение.
Интересно, что по поиску на тему "Flash + Delphi" эта ссылка на Demiarte не появляется (во всяком случае я ее не видел). А на самом Demiarte я не искал, хотя довольно часто заглядываю в раздел Flash.
В принципе происходило все так, как написано во вступлении Вашего поста (на Demiart). Прошло какое-то время, прежде чем появилась необходимость поработать со старыми (или доработать) проектами. И вот тогда выяснилось, что то что работало s AS2, с ходу не работает в AS3. Однако, актуальность такой связки остается в силу ряда причин и не в последнюю очередь благодаря огромным возможностям Flash по отображению графического контента.

0


Вы здесь » Flash-элементы » Flash + Delphi, Flash + Builder C++ » Взаимодействие Flash и Delphi, Flash и Builder C++