2010-03-21 2 views
1

У меня есть приложение flex и встроено в него файл Flash (SWF), используя <mx:SWFLoader>. В файле Flash есть кнопка «Выход». Я хочу иметь возможность обрабатывать событие нажатия кнопки в приложении flex.Управление гибким приложением из встроенного управления флэш-памятью

Итак, когда эта кнопка в файле флэш-файла нажата, я хочу выполнить действие в родительском приложении flex. Как я могу это сделать? Благодаря!

ответ

0

Вы можете сделать это, если событие от вспышки «пузыри». При отправке события из флэш-памяти, сделайте следующее:

dispatchEvent(new Event("myEventName", true)); // that 'true' for bubbles, in the constructor 

Тогда вы должны быть в состоянии захватить его в Flex не проблема, с:

addEventListener("myEventName", handler); 

... до тех пор, пока addEventListener вызывается компонент на или выше SWFLoader.

Если вы не можете изменить Flash SWF, или это полный черный ящик, то вы можете просто зарегистрировать MouseEvent.CLICK обработчик с useCapture = true, и проверьте, чтобы увидеть, если это правая кнопка:

swfLoader.addEventListener(MouseEvent.CLICK, swfLoader_clickHandler, true, 0, true); 

protected function swfLoader_clickHandler(event:MouseEvent):void 
{ 
    if (event.target.name == "some_way_to_identify_the_button") 
     // do X 
} 

Надежда что помогает, Lance

+0

@viatroops: эй, это не сработало. У меня есть доступ к fla. Fla выполняет эту строку кода 'dispatchEvent (новое событие (« myEvent »), true));' и у меня есть обработчик события swfloader_completeHandler на SWFLoader в Flex. В этом методе у меня есть 'swfloader.addEventListener (" myEvent ", nextStepFunction);'. Но теперь, когда я нажимаю кнопку выхода в swf-файле (когда она встроена в приложение flex), ничего не происходит. Я сделал что-то не так? – Aishwar

+0

попробуйте, так dispatchEvent выглядит так: 'dispatchEvent (новое событие (« myEvent », true)); вместо этого' dispatchEvent (новое событие («myEvent»), true)) 'и пытаюсь установить useCapture на listener к true, например: addEventListener («myEventName», обработчик, true, 0, true); '. Дай мне знать, если это работает. –

+0

@viatroops. Ой, это была опечатка. Да, это то, что я имел для отправки. Я попробовал второй addEventListener, и это тоже не сработало. – Aishwar

0

Вы можете сделать это, используя класс Loader в AS3 (в скрипте flex). Даже вы можете делать это динамически. в MXML

<mx:SWFLoader id="myLoader" width="500" source="swf/kabin42.swf" 
          complete="initSwf();"/> 


private function initNestedAppProps2():void { 
    var loadedMc:MovieClip = MovieClip(myLoader.content); 
    loadedMc= MovieClip(myLoader2.content); 
    //access the button with instance name myButton: 
    loadedMc.myButton.addEventListener(MouseEvent.CLICK, onBtnClick); 
} 

private function onBtnClick(event:MouseEvent):void{ 
    Alert.show("button clicked 2"); 
} 

При MyButton щелчке onBtnClick метод обработчика событий будет называться .. я надеюсь, это решить проблему ..

Смежные вопросы