Сегодня решил попробовать совместить навыки разработки в 1С и Flash. Простой вывод swf-файла в поле HTML документа 1С не так интересен. Гораздо интереснее было бы реализовать передачу данных из 1С во Flash. Для этого будем использовать параметр flashvars, который можно определить в коде html-страницы.
Для написания кода для Flash проектов я использую IDE FlashDevelop. Если вы решите повторить создание swf-файла с помощью FD, то при установке необходимо будет позволить установщику скачать актуальный FlexSDK. После запуска IDE создаете новый проект "AS3 Project" и заменяете код в созданном файле Main.as на нижеприведенный, после чего можно компилировать проект. Готовый файл будет находиться в подкаталоге /bin проекта. В результате у нас получится swf-файл, содержащий текстовый контейнер, который можно перетаскивать мышкой. При этом он при перетаскивании немного увеличивается в размерах и отбрасывает тень.
packageТеперь создаем обработку. Добавляем макет "flash", тип "Двоичные данные" и загружаем в него созданный swf-файл.
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.DropShadowFilter;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
/**
* ...
* @author mickey.1cx
*/
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
startTest();
}
private function startTest():void
{
var container:Sprite = new Sprite;
var tf:TextField = new TextField();
tf.autoSize = TextFieldAutoSize.LEFT;
tf.border = true;
tf.background = true;
tf.backgroundColor = 0xfacedd;
tf.selectable = false;
container.addChild(tf);
tf.appendText("params:" + "\n");
try
{
var keyStr:String;
var valueStr:String;
var paramObj:Object = loaderInfo.parameters;
for (keyStr in paramObj)
{
valueStr = String(paramObj[keyStr]);
tf.appendText("\t" + keyStr + ":\n" + valueStr + "\n");
}
}
catch (error:Error)
{
tf.appendText(error.toString());
}
addChild(container);
container.addEventListener(MouseEvent.MOUSE_DOWN, dragEnable);
container.addEventListener(MouseEvent.MOUSE_UP, dragDisable);
}
private function dragEnable(e:Event):void
{
var _target:Sprite = e.currentTarget as Sprite;
_target.startDrag();
_target.scaleX = _target.scaleY = 1.25;
_target.filters = [new DropShadowFilter()];
}
private function dragDisable(e:Event):void
{
var _target:Sprite = e.currentTarget as Sprite;
_target.stopDrag();
_target.scaleX = _target.scaleY = 1;
_target.filters = [];
}
}
}
Добавляем макет "html", тип "Текстовый документ", помещаем в него текст html-страницы.
<HTML>Форма обработки будет содержать поле HTML, поле ввода текста для импорта и текст исходной html-страницы.
<HEAD>
</HEAD>
<BODY>
<param name="movie" value="testFlashVars.swf" />
<param name="quality" value="high" />
<embed src="testFlashVars.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="800" height="600"
flashvars=""
>
</embed>
</BODY>
</HTML>
При открытии обработки swf-файл будет передаваться клиенту и выгружаться во временный файл. Так же, в шаблоне html будет происходить замена путей к этому файлу. При выполнении импорта текста в шаблоне html будет происходить замена данных переменной flashvars и обновление поля HTML документа.
Запускаем обработку, вводим любой текст и жмем "Выполнить импорт". Введенный текст переносится в текстовый контейнер flash.&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); ВремХранилище = ПоместитьВоВременноеХранилище(ОбработкаОбъект.ПолучитьМакет("flash"), УникальныйИдентификатор); ХТМЛ_Шаблон = ОбработкаОбъект.ПолучитьМакет("html").ПолучитьТекст(); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) ПодготовитьHTML(); КонецПроцедуры &НаКлиенте Процедура ПодготовитьHTML() ВремFlash = ПолучитьИмяВременногоФайла("swf"); ФайлFlash = ПолучитьИзВременногоХранилища(ВремХранилище); ФайлFlash.Записать(ВремFlash); ХТМЛ_Шаблон = СтрЗаменить(ХТМЛ_Шаблон, "testFlashVars.swf", ВремFlash); ХТМЛ_Строка = ХТМЛ_Шаблон; ХТМЛ = ХТМЛ_Шаблон; КонецПроцедуры &НаКлиенте Процедура ПриЗакрытии() УдалитьФайлы(ВремFlash); КонецПроцедуры &НаКлиенте Процедура ВыполнитьИмпорт(Команда) ХТМЛ_Строка = СтрЗаменить(ХТМЛ_Шаблон, "flashvars=" + """" + """", "flashvars=" + """" + "import=" + ТекстИмпорт + """"); ХТМЛ = ХТМЛ_Строка; КонецПроцедуры
Так же можно протестировать перетаскивание мышкой.
И конечно же, сама обработка testFlash.
Не качается ((
ОтветитьУдалитьОк, добавил на яндекс http://yadi.sk/d/xfQYMWC37frQO
Удалить