1

与えられたもの:次のイベントを伴うFlex TileList:

<mx:nativeDragDrop>
  <![CDATA[
    if(event.clipboard.hasFormat(ClipboardFormats.FILE_LIST_FORMAT)) {
      var files:Array = event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;

      for each(var file:File in files)
      {
        // file.data is null here!
      }

      this.listData.refresh();
    }
  ]]>
</mx:nativeDragDrop>

このTileListにドラッグしたjpegからサムネイルのリストを作成しようとしています。Image.sourceはURLを使用して画像を表示できますが、最初に画像を縮小する必要があります(hi rez photos)ファイルからのBitmapDataが必要で、file.dataがnullである以外は、既にスケーリング部分が完了しています。

また、私はこれを試しました:

var x:URLRequest = new URLRequest(value.file.url); // this is a local file (e.g. file:///C:/somefile.jpg)
var b:Bitmap = new Bitmap(x.data as BitmapData);

データもnullです!とてもイライラします。どんな助けでもいただければ幸いです。

4

1 に答える 1

0

これは AIR アプリケーションの一部だと思います。(プレーンな Flex アプリからクリップボードにアクセスすることはできません。)

私は AIR の経験がありませんが、2 番目のコード ブロックは明らかに間違っています。URLRequestインスタンス自体は何もしません。リクエストの詳細を格納する静的オブジェクトにすぎません。その URL からデータを取得するには、 を作成しLoader、次のようにそのローダーにリクエストを渡す必要があります。

var req:URLRequest = new URLRequest(value.file.url); // this is a local file (e.g. file:///C:/somefile.jpg)
var ldr:Loader = new Loader();
ldr.addEventListener(Event.COMPLETE, function(event:Event):void {
   var b:Bitmap = event.target.content as Bitmap;
});
ldr.load(req);

もちろん、Event.COMPLETEハンドラーを入力する必要があります。このLoaderクラスを使用して SWF および画像オブジェクトをロードできることに注意してください。それ以外の場合は、URLLoader自分でデータを使用して解析する必要があります。

ブロックに関しては、ドキュメントnativeDragDropのスニペットを次に示します。

通常、nativeDragEnter または nativeDragOver イベントのハンドラーは、ドラッグされているデータと、許可されているドラッグ アクションを評価して、インタラクティブ オブジェクトがドロップを受け入れることができるかどうかを判断します。インタラクティブ オブジェクトが適格なターゲットであることを指定するには、イベント ハンドラーが NativeDragManager.acceptDrop() 関数を呼び出して、オブジェクトへの参照を渡す必要があります。ユーザーが指定されたオブジェクト上でマウス ボタンを離すと、そのオブジェクトがドロップ ターゲットになり、nativeDragDrop イベントが送出されます。

ちゃんと呼んでNativeDragManager.acceptDrop()ますか?

于 2009-02-12T19:53:14.697 に答える