Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Интеграция Flash ролика в Delphi проект (http://www.flasher.ru/forum/showthread.php?t=85260)

MaxxSoft 19.09.2006 10:00

Интеграция Flash ролика в Delphi проект
 
Для работы с Flash в Delphi использую ActiveX (компонент TShockwaveFlash)
Передача данных в ролик осуществляется с помощью метода
Код:

procedure TShockWaveFlash.SetVariable(const: name: WideString; const value: WideString);
что является не совсем удобным в ряде случаев, так как после установки значения переменной необходимо выполнить какие-либо действия.
Для решения этой проблемы создаю дополнительный кадр, в котором вызываются нужные функции и, после установки значения переменной, этот кадр проигрываю, примерно так:
Код:

with swMovie do
begin
  SetVariable('MenuVisible', '1');
  GotoFrame(FrameNum);
  Play;
end;

В кадре FrameNum:
Код:

Menu._visible = MenuVisible > 0;
Полученное решение крайне неудобное. В то же время у компонента TShockWaveFlash объявлен метод:
Код:

function TShockwaveFlash.CallFunction(const request: WideString): WideString;
который, судя по названию, должен вызывать пользовательскую функцию в ролике. Тем не менее эксперименты с использованием данного метода ни к чему не привели. При передаче любого параметра вылетает TOleException "Неопознанная ошибка".
Может быть кто-нибудь использовал данную функцию?

FourSide 19.09.2006 11:20

В Delphi писал так:
flash.setVariable('varname', 'varvalue');

А во флэше на глобальную переменную вешал функцию отлова изменения значения методом watch.

MaxxSoft 19.09.2006 12:19

Цитата:

Сообщение от FourSide
А во флэше на глобальную переменную вешал функцию отлова изменения значения методом watch.

Спасибо за информацию, но что-то не получается с наскока разобраться в использовании watch.
В хелпе написано:
Цитата:

usage
myObject.watch( prop, callback [, userData] )
Parameters
prop A string indicating the name of the object property to watch.

callback The function to invoke when the watched property changes. This parameter is a function object, not a function name as a string. The form of callback is callback(prop, oldval, newval, userData).

userData An arbitrary piece of ActionScript data that is passed to the callback method. If the userData parameter is omitted, undefined is passed to the callback method. This parameter is optional.
Правильно ли я понял, вешать этот метод можно только на свойства созданного экземпляра какого-нибудь класса? Или на любую глобальную переменную? Также не совсем понял про второй параметр, вызываемую функцию... Это не имя функции, а сама функция?
Если не сложно напиши небольшой пример кода.

Arreke 30.01.2008 01:11

Присоединяюсь к MaxxSoft.
Дырку в поиске протёр, но ответа не нашёл.
Опишите подробно как юзать setVariables() + watch.

Arreke 30.01.2008 11:32

Задача наипростейшая, но именно на ней упёрся об стену.
Вообщем на флешке имееся ComboBox, содержимое которого надо загрузить из Delphi. Так понимаю, содержимое ComboBox - строковой массив - ComboBox.labels
Моё решение,

Код:

procedure TForm1.Button2Click(Sender: TObject);
var
  i :integer;
begin
  for i:= 1 to 3 do
  ShockwaveFlash1.SetVariable('varComboBox.labels[' + inttostr(i) + ']', inttostr(i));
end;

Ничё не происходит, то есть не могу получить доступ к элементам массива флешки. Или может как сделать varComboBox.addItems() средствами Delphi ?

etc 30.01.2008 12:58

Arreke, отредактируйте свой пост и оформите код тегами [code][/code].

Arreke 30.01.2008 15:49

Спс, __etc, разобрался.

Во флеш:
Код:

_root.st=""
_root.fun=null
_root.fun1=function(){
        varComboBox.addItem(_root.st);
}
var cbFun=function(prop, oldVal, newVal){
        _root[newVal]();
}
_root.watch("fun",cbFun);

В Delphi:
Код:

procedure TForm1.Button2Click(Sender: TObject);
var
i :integer;
begin
for i:= 1 to 3 do begin
  ShockwaveFlash1.SetVariable('_root.st', inttostr(i));
  ShockwaveFlash1.SetVariable('fun', 'fun1');
end;
end;

Работает.

Теперь другой, наивный вопрос, зависит ли компонент ShockwaveFlash на Delphi от флеш плеера установленного в системе, то есть будет ли работать мой exe-шник с swf-файлом на компе, где не установлен флешплеер и вообще нет выхода в инет???

etc 30.01.2008 19:36

Arreke, я где-то написал «Создайте новый пост с отредактированным кодом»? Я просил отредактировать существующий пост, благо такая возможность есть. В следующий раз не забывайте оформлять код.


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

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