Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Drag out from Application (http://www.flasher.ru/forum/showthread.php?t=211382)

3p.station 19.08.2015 08:20

Drag out from Application
 
Привет. Задача следующая:
1. Есть массив байт
2. Юзер должен иметь возможность перетащить иконку из приложения в папку и в этой папке нужно создать файл с содержимым этого байтмассива.

На данный момент нашел возожность лишь копировать из мне известного места в место куда перетащил иконку юзер, при этом я не могу знать наверняка когда копирование закончилось(событие есть илшь об окончании драга, но не копирования).
Код AS3:

public function testAir()
                {
 
                        var spr:Sprite = new Sprite();
                        spr.graphics.beginFill(0x00000, 0.9);
                        spr.graphics.drawRect(0,0, 100, 100);
                        spr.graphics.endFill();
                        addChild(spr);
                        spr.addEventListener(MouseEvent.MOUSE_DOWN, onDown)
                        spr.addEventListener(NativeDragEvent.NATIVE_DRAG_COMPLETE, handleDragComplete)
                        spr.addEventListener(NativeDragEvent.NATIVE_DRAG_START, onHandleStart)
                        spr.addEventListener(NativeDragEvent.NATIVE_DRAG_UPDATE, onUpdate)
                        spr.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, onDrop)
                }
 
                private function onDown(event:Event):void
                {
                        var spr:Sprite = new Sprite();
                        spr.graphics.beginFill(0xFF000, 0.9);
                        spr.graphics.drawRect(0,0, 50, 50);
                        spr.graphics.endFill();
                        var btmd:BitmapData = new BitmapData(50, 50, true, 0);
                        btmd.draw(spr);
 
                        var imageFile:File =  new File(File.applicationDirectory.nativePath + File.separator + "op.jpg");
 
                        //это я сначала думал что можно будет массив байт записать, но хрен
                        var fs:FileStream = new FileStream();
                        fs.open(imageFile, FileMode.READ);
                        var ba:ByteArray = new ByteArray();
                        fs.readBytes(ba);
                        fs.close();
 
                        var fileArray : Array = new Array();
                        fileArray.push( imageFile );
                        var transferObject:Clipboard = createClipboard(imageFile);
 
                        var dragOptions : NativeDragOptions = new NativeDragOptions();
                        dragOptions.allowCopy = true;
                        dragOptions.allowLink = false;
                        dragOptions.allowMove = true;
 
                        NativeDragManager.doDrag(InteractiveObject(event.target), transferObject, null, new Point(0,0), dragOptions);
                }
 
                protected function onHandleStart(event:NativeDragEvent):void
                {
                        trace("onHandleStart");
                }
 
                protected function onUpdate(event:NativeDragEvent):void
                {
                        //постоянно трейсит во время перетаскивания
                        //trace("onUpdate");
                }
 
                protected function onDrop(event:NativeDragEvent):void
                {
                        trace("onDrop");
                }
 
                //это событие происходит не после копирования, а после того как юзер отпустил курсор, это сто процентов
                protected function handleDragComplete(event:NativeDragEvent):void {
                        //ВОТ ЗДЕСЬ Я мечатю получить путь к папке куда юзер перетянул икноку, но нет, это путь к файлу который копируется
                        var files:Array = event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT, ClipboardTransferMode.ORIGINAL_PREFERRED) as Array;
                        trace("file:", (files[0] as File).nativePath);
                        trace(event.allowedActions);
                        trace("eventPhase", event.eventPhase);
                        trace("dropAction", event.dropAction);
                }
 
                public function createClipboard( sourceFile:File):Clipboard
                {
                        var transfer:Clipboard = new Clipboard();
                        transfer.setData(ClipboardFormats.FILE_LIST_FORMAT, new Array(sourceFile), false);
                        return transfer;
                }

Но это не совсем подходит. В идеале нужно всего лишь узнать куда юзер перетащил иконку, чтобы там создать файл.

Имеет ли кто опыт? Подскажите плиз.

alatar 23.08.2015 14:35

Начните отсюда.

3p.station 04.09.2015 12:17

Приветствую. Да, можно реализовать IFilePromise и байтэррей передавать как данные. Но есть минусы, не везде может поддерживаться, все делается через буффер. Если файл велик, могут быть проблемы, если юзер изменил содержимео буффера, в общем гарантий нет что файл дойдет железно.

А так, да, задача в эйр не решаемая, узнать ПУТЬ к папке куда юзер сделал драг аут невозможно. Это печально и мой проект от этого сильно страдает.


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

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