Как стать автором
Обновить

C# WinForm/WPF + Adobe Flash

Время на прочтение3 мин
Количество просмотров13K
Всем здравствуйте, это мой самый первый пост, до этого был только читателем данного сайта. Темой данного поста, является взаимодействие двух разный технологий, каждая из которых работает в своей управляемой среде, Adobe Flash и Microsoft .NET.

В свое время, для одного .NET проекта искал замену графики GDI+ для WinForm. В качестве такой альтернативы была выбрана Flash технология. С SilverLight в то время не был знаком, а затем организовать взаимодействие с этой технологий для WinForm, через компонент WebBrowser, не получилось.


После установки Adobe Shockwave Player, при выборе Com объектов в среде Visual Studio, становится доступным визуальный компонент Shockwave Flash Object. Этот компонент имеет множество свойств для работы с роликами в формате swf. В частности, если задать физический или сетевой путь к ролику в свойстве Movie, он будет отображен на форме, также, как бы это происходило в браузере. Затем, через метод SetVariable(string Property, string Data), можно передать информацию из C# в какое-либо свойство Flash.

WinForm + Flash



Объявление внешнего свойства Flash на ActionScript 2.0 (1.swf)
//Получить данные
getvar = function () {
};
// Установить данные
setvarData = function (value) {
	var Value:Number=Number(value);
             // Перейти на кадр
	_root.gotoAndStop(Value+1);
};
addProperty("MyObject", getvar, setvarData); 


Передать информацию в Flash ролик из С#.
Перед этим в WinForm был положен компонент Shockwave Flash Object, с именем Flash и задано его свойство Movie c физическим путем к ролику 1.swf.
int i = 1;
Flash.SetVariable("MyObject",i.ToString());


WPF + Flash



Недавно стало интересно, как приложение на WPF будет выглядеть в связке с Flash. Поискал по интернету, но к сожалению такой информации если и есть, то её оказалось очень мало.
В итоге, создал Flash компонент для этого типа приложений.

XAML
<UserControl x:Class="WindowsFormsApplication1.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid Background="#FF00E100" Loaded="Grid_Loaded">
        <WindowsFormsHost HorizontalAlignment="Stretch" Name="windowsFormsHost1" VerticalAlignment="Stretch" DataContext="{Binding}" Focusable="True" Margin="22,12,24,21" Background="#FF00005A" />
    </Grid>
</UserControl>


Flash Object
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using AxShockwaveFlashObjects;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{
    /// <summary>
    /// Логика взаимодействия Flash
    /// </summary>
    public partial class UserControl1 : UserControl
    {
        public AxShockwaveFlashObjects.AxShockwaveFlash AxShockwaveFlash;
        public UserControl1()
        {
            AxShockwaveFlash = new AxShockwaveFlash();
            InitializeComponent();           
            windowsFormsHost1.Child = AxShockwaveFlash;

            this.AxShockwaveFlash.VisibleChanged += new System.EventHandler(this.AxShockwaveFlash_VisibleChanged);
        }


        public string _Movie;

        public  string Movie {
            set {  _Movie = value;    }
            get { return AxShockwaveFlash.Movie; }
        }



        private void AxShockwaveFlash_VisibleChanged(object sender, EventArgs e)
        {
            if (IsVisible)
            {
                try
                {
                    if (Movie != null || Movie != _Movie)
                        AxShockwaveFlash.Movie = _Movie;
                }
                catch
                {
                }
            }
        }

        private void Grid_Loaded(object sender, RoutedEventArgs e)
        {
            AxShockwaveFlash.Menu = false;
        }

    }
}



Передать информацию в Flash ролик из С#, аналогично WinForm
Перед этим был положен компонент UserControl1, с именем Flash и задано его свойство Movie c физическим путем к ролику 1.swf.
int i = 1;
Flash.AxShockwaveFlash.SetVariable("MyObject",i.ToString());
Теги:
Хабы:
Всего голосов 15: ↑9 и ↓6+3
Комментарии7

Публикации

Истории

Работа

.NET разработчик
68 вакансий

Ближайшие события