Flash y .net
[Cómo insertar, enviar recibir acciones con flash (.swf)]

Fecha: 21/Sep/2004 (17/Sep/2004)
Autor: Félix Guerrero felixcriv@msn.com


Para salir de la constante rutina de diseñar interfaces con el aspecto clásico de Windows o utilizando la activación de Styles en XP tenemos a disposición Macromedia Flash, concebida como herramienta de animación para la web también ofrece la posibilidad de comunicarse con otras aplicaciones de programación que soporten la inclusión controles .ocx, para esto ofrece una interfaz denominada Fscommand que hace posible la comunicación entre la aplicación host y la pelicula Shockwave Flash (swf).

La pelicula flash la he cargado desde una clase compilada que administra un archivo de recursos, si deseas puedes cargarla como explico más abajo, o puedes saber sobre los recursos en .net en un articulo ya publicado siguiendo este link.

Si ya te has iniciado en Flash y ActionScript, y conoces el manejo básico de algunos controles ocx, puedes empezar por abrir el fichero Items.swf que está en el zip, consta de un ComboBox que esta inicializado con cuatro labels: Atardecer,Sabana,Cañon,Otoño. Estas etiquetas identificaran a una serie de fotos que se desplegaran para ser seleccionadas y vistas en un pictureBox en nuestra aplicación VB/C# .Net. Este ComboBox emitirá eventos a la aplicación host a través de Fscommand por medio de una acción del control ComboBox (ActionScript), la aplicación host recibe los comandos y argumentos a través del Handler MyAxShockwaveFlash_Fscommand. La comunicación desde la aplicación host a la película se establece a través de setVariable(varName, varValue), siempre ambos valores son cadenas.

 

 

 

Un esquema de la comunicación entre la película y la aplicación; XML puede ser otra forma de comunicarse entre las aplicaciones:

 

 

 

La acción correspondiente departe de la pelicula flash es la siguiente (en las acciones del ComboBox):

 

 

Donde el primer parámetro es el comando a ejecutar en la aplicación y el segundo es el argumento, es decir, nuestro comando a ejecutar en la aplicación tiene el nombre que se ha seleccionado en el ComboBox y el argumento es el mismo.

Recuerda que cualquier control que genere eventos en Flash puede ser usado para utilizar Fscommand, esto incluye botones, listas, menús, películas animadas dinámicamente, entre otros.

En VB .net haz click sobre el Cuadro de herramientas de Windows Forms y luego sobre Personalizar cuadro de herramientas, luego en la ficha de Componentes COM selecciona Shockwave Flash Object, enseguida aparece un nuevo control en el Cuadro de Herramientas llamado ShockwaveFlash.

 

 

 

 

 

Este control nos permite dibujar el área en donde se insertará nuestra pelicula flash, para establecer el path de la pelicula utiliza la propiedad Movie, o bien desde código:

'Asignar el archivo creado al Shockwveflash object
      Me.AxShockwaveFlash1.Movie = System.Environment.CurrentDirectory & "\movie.swf"

 O cargar la pelicula desde un recurso compilado:

Dim Fstream As New FileStream("movie.swf", FileMode.OpenOrCreate)
      obj = Resourcer.getResource("Items")
      'Obtener la data del recurso en bytes
      b = CType(obj, Byte())
      'Escribir la data en el archivo
      Fstream.Write(b, 0, b.Length)
      'Crear el archivo
      Fstream.Close()

'Cargar la pelicula a creada
Me.AxShockwaveFlash1.Movie = System.Environment.CurrentDirectory & "\movie.swf"

Manejo de Fscommand que recibirá y enviará parámetros a la pelicula:

Private Sub AxShockwaveFlash1_FSCommand(ByVal sender As Object, ByVal e As _ AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent) Handles AxShockwaveFlash1.FSCommand
      Select Case e.command
         Case "Sabana"
            GetFileInfo(e.command, str)
            Me.AxShockwaveFlash1.SetVariable("info", str)
            DrawPicture(e.command, Me.Label1, Me.Image)
         Case "Cañon"
            GetFileInfo(e.command, str)
            Me.AxShockwaveFlash1.SetVariable("info", str)
            DrawPicture(e.command, Me.Label1, Me.Image)
         Case "Atardecer"
            GetFileInfo(e.command, str)
            Me.AxShockwaveFlash1.SetVariable("info", str)
            DrawPicture(e.command, Me.Label1, Me.Image)
         Case "Otoño"
            GetFileInfo(e.command, str)
            Me.AxShockwaveFlash1.SetVariable("info", str)
            DrawPicture(e.command, Me.Label1, Me.Image)
      End Select
   End Sub

El procedimiento  GetFileInfo(e.command, str) asigna a una cadena de texto las propiedades de Longitud en bytes, tamaño en pixeles, y resolución vertical y horizontal de la imagen, esta cadena es el valor que se le asigna a la variable info que es un cuadro de texto dinámico en la pelicula.
 

 Sub GetFileInfo(ByVal fileName As String, ByRef strng As String)
      Try
         Dim resx As Object
         resx = Resourcer.getResource(fileName.ToString)
         Dim data() As Byte
         data = CType(obj, Byte())
         Dim picture As New Bitmap(CType(resx, System.Drawing.Bitmap))
         strng = "Tamaño " & CStr(data.Length) & " bytes  "
         strng += picture.Size.ToString & "  "
         strng += "         " & "HR:" & picture.HorizontalResolution.ToString & "  " & "VR:" & _        picture.VerticalResolution.ToStrings
      Catch ex As Exception
         MsgBox(ex.Message & vbCrLf & ex.ToString)
      End Try
   End Sub

Mientras que DrawPicture(e.command, Me.Label1, Me.Image) se encarga de crear la imagen para el PictureBox, según el parámetro command, actualizar el contenido de la etiqueta que enseña el nombre de la imagen según el comando.

Vista de la Aplicación cuando ya se ha seleccionado un Item:

 

 

 

Despliegue del ComboBox:

 

 

 

Nota: Revisa el método Sub new() en el apartado de código generado por el Asistente de Windows Form, justo después de invocar a InitializeComponent(), para ver el código de creación y carga de la pelicula a través de la clase compilada EmbResXs.dll. El archivo .fla pertenece a la versión 2004 MX

 


ir al índice

Fichero con el código de ejemplo: felixcriv_Flash_y_Net.zip- 334 KB