Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Delphi и Flash. Обмен данными (http://www.flasher.ru/forum/showthread.php?t=118919)

LameAS3 07.12.2008 17:22

Delphi и Flash. Обмен данными
 
Приветствую форумчан! :victory:

Есть задача: замутить визуальный интерфейс в виде флешки, а вычислительные и другие механизмы разместить в коде Делфи.
Как вставить Flash в Delphi я и так знаю: импорт АктивИкс, бла-бла-бла и так далее. Этой начальной инфой весь инет загажен. Меня лишь мучают вопросы о передачи данных между Флешкой и Программой содержащую ее(делфи форма т.е.).
Метод Flash -> Delphi мне извесен - это fsCommand.
А вот метод Delphi -> Flash мне не совсем ясен, а именно то как действуют SetVariable и GetVariable в ActionScript 3.0? Ну вот к примеру почитав это, пришел к выводу что можно делать вот так:
В swf-ролике находится Dynamic Text с именем dtext. В делфи пытаюсь такое сделать
Код:

Memo1.Text:=Flash.GetVariable('dtext.text');
На что мне при выполнении программы выдаются окна с матами и ругательствами.
Вроде на вашем же форуме читал, что для всего этого лучше в AS3 использовать ExternalInterface, но везде примеры показаны для JS а как их реализовать в Delphi - не пойму smile

Помогите пожалуйста, ребята, очень надо

-----------------

Ответ найден:
Спасибо за ссылочку Rzer ^_^
Привожу пример так, как сделал его я.

Во флеш, в AS3, в рут классе пишем примерно такое:
Код AS3:

package  {
        import flash.display.Sprite;
        import flash.external.ExternalInterface;
 
        public class MainClass extends Sprite {
                public function MainClass() {
                        ExternalInterface.addCallback("getFromDelphi", getFromDelphi);
                        ExternalInterface.call("sendToDelphi", "Delphi, Hello");
                }
                public function getFromDelphi(val:String):void {
                        dtext.text = val; // это в ролике у меня лежит Динамический текст с именем "dtext"
                }               
        }       
}

На форму в Delphi кидаем Flash проигрываетль в виде ActiveX(я его обозвал просто Flash) и пишем такое:
Код:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Flash.Movie:= ExtractFilePath(Application.ExeName)+'Untitled-1.swf';
end;
//***//
procedure TForm1.FlashFlashCall(ASender: TObject; const request: WideString);
begin
  showmessage(request);
  Flash.CallFunction('<invoke name="getFromDelphi"><arguments><string>Hi, Flash</string></arguments></invoke>');
end;

При запуске программы мы увидим такое сообщение:
Цитата:

<invoke name="sendToDelphi" returntype="xml"><arguments><string>Delphi, Hello</string></arguments></invoke>

VovkaMorkovka1 07.12.2008 17:50

Поисчи в примерах от адоба, у них реализован сабжевый механизм, с помощью С# правда, но .NET он и в африке .NET

silin 07.12.2008 18:48

глянь еще http://www.flasher.ru/forum/showthread.php?t=114163

LameAS3 07.12.2008 19:07

VovkaMorkovka1, а где эти примеры адобовские?

VovkaMorkovka1 07.12.2008 20:06

Цитата:

Сообщение от LameAS3 (Сообщение 782136)
VovkaMorkovka1, а где эти примеры адобовские?

Ну раз примеры адобовские, то логично предположить, что находятся они на сайте адоба :) www.adobe.com и далее поиск :)

Rzer 07.12.2008 20:31

http://atflash.ru/2008/11/externalin...e-visualbasic/ для vb. Для дельфи думаю аналогично.

LameAS3 07.12.2008 20:53

VovkaMorkovka1
1) это ясень пень, что Адобовский примеры не на Майкрософт лежат =Р
2) уже нашел эти примеры))

Rzer
изучаю документ....

Добавлено через 16 минут
Rzer
Большое тебе СПАСИБИЩЕ!!
Это кАкраз то что я искал!!! Все работает!

В первом топе опишу тоже самое, но в Delphi, чтобы такие же как я нашди решение для граблей своих

LameAS3 19.12.2008 17:34

Так, теперь у меня есть маленький вопросик:
А как передать во Флэш-функцию несколько параметров?

VovkaMorkovka1 19.12.2008 20:28

опять - же кури примеры

dhk 07.01.2009 01:53

Доброго времени суток.
перерыл всё что мог и никак не найду ответа на свой вопрос. в этой теме как бы он затронут, но применить к своему ничего не смог. сам вопрос.
Есть какой-то swf файл (написан не мною и грузится на страничку), отображает какие-то данные. Пишу приложение на delphi в котором загружаю эту флешку и налажива обмен и управление swf файлом с моего приложения.
ShockwaveFlash.SetVariable, ShockwaveFlash.GetVariable и т.п. работает отлично, но вот с функциями проблема.
ShockwaveFlash.CallFunction - ни в какую.. не хочет работать. на все попытки выдает сообщение "Неопознанная ошибка".
Поиски ответа привели меня максимум к подобным вопросам, на который были ответы "Ты наверное перерыл весь инет и ничего не нашел, а заставить работать так и не удалось?"

Вот для наглядности код флешки. Есть какая-то функция
Код:

function newfunc(str)
{
    _root.name = str;
}

Как передать параметер и вызвать эту функцию в делфе. по идее должно быть все с помощью
ShockwaveFlash.CallFunction()
других способов не вижу, может кто делал другим способом?

alexcon314 07.01.2009 02:10

ShockwaveFlash.CallFunction() на стороне оболочки взаимодействует с классом ExternalInterface на стороне флэша.
Поищите про ExternalInterface.addCallback(), ExternalInterface.call(). Т.е. если в свф нет ничего подобного - работать не будет.
PS. за делфи не скажу точно, но по-другому вроде не должно.
что-то такое
Код:

function newfunc(str)
{
    _root.name = str;
}
ExternalInterface.addCallback("newfunc",this,newfunc);

вызывать из оболочки надо типа так
Код:

ShockwaveFlash.CallFunction('<invoke name="newfunc"><arguments><string>string_arg</string></arguments></invoke>');

dhk 07.01.2009 02:21

alexcon314, спс)
вот где собака порылась. понял. там такого нет, свф общается с .pl на серваке.
жаль, будем дальше голову ломать как это реализовать.

Cross AssembleR 09.09.2011 11:21

Подниму старую тему. К сожалению, решения проблемы я так и не нашёл. Задача такая же, как и у топикстартера. AS3, Flash Develop. Но при комплиляции указанного кода возникает ошибка:

Цитата:

[Fault] exception, information=Error: Error #2067: ExternalInterface не доступен в этом контейнере. Для работы ExternalInterface требуется Internet Explorer ActiveX, Firefox, Mozilla 1.7.5 (или более высокой версии) или другой браузер, который поддерживает NPRuntime.
По этому поводу я нашёл следующее:
Цитата:

Класс ExternalInterface доступен только при следующих условиях:

во всех поддерживаемых версиях Internet Explorer для Windows (5.0 и выше);

в приложении контейнера (например, в качестве приложения для настольных систем) с помощью экземпляра элемента управления ActiveX для Flash Player;

в любом обозревателе, который поддерживает интерфейс NPRuntime, включая на данный момент версии, начиная с Firefox 1.0, Mozilla 1.7.5, Netscape 8.0 и Safari 1.3.

Во всех остальных ситуациях (например, при запуске в автономном проигрывателе) свойство ExternalInterface.available возвращает значение false.
Мне следует поместить Flash Player в контейнер браузера? Но зачем мне это нужно, когда я хочу работать с автономным приложением Delphi. Что я делаю не так? Подскажите пожалуйста как разобраться с этой неувязкой.

UPD:
На СS5 данный способ обмена данными между Delphi и Flash был налажен. Однако, в FD всё равно возникает такая же ошибка. Не хватает каких-то библиотек?

Cross AssembleR 23.09.2011 15:01

И опять вверх. Всё-таки, может кто-нибудь подсказать, как с помощью Flash Develop'eра внедрить swf-ролик в Delphi-приложение? Во Flash CS5 он компилируется без проблем и так же без проблем встраивается. На FD указанная выше ошибка #2067. Флэшка "не ощущает себя в теле контейнера" и без этого не запустится. Как заставить её это сделать?


Часовой пояс GMT +4, время: 07:45.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.