Skip to main content

[AIR] NativeDragEvent


在 3 月 19 日於台北舉辦的 「Adobe 3.19 AIR 上市技術講座」中看到幾個外國 Adobe AIR 範例,其中有些運用到 NativeDragEvent (AIR only) 意指使用者可以"直接拖曳"外部檔案到 AIR 視窗做互動。以下是NativeDragEvent 簡單的用法:

Flash CS3 / AIR 1.0專案
Action in frame1
Stage中有個 TextField names "txt"

import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;

stage.nativeWindow.alwaysInFront=true;

txt.addEventListener( NativeDragEvent.NATIVE_DRAG_OVER, doDragOver );

function doDragOver(e:NativeDragEvent):void {
var cd:Clipboard = e.clipboard as Clipboard;

if (cd.hasFormat( ClipboardFormats.TEXT_FORMAT ) ) {
var str:String = e.clipboard.getData( ClipboardFormats.TEXT_FORMAT ) as String;
txt.text = str;
//貼文字
} else {
var arr:Array = e.clipboard.getData( ClipboardFormats.FILE_LIST_FORMAT ) as Array;
txt.text = arr[0].nativePath;
//第一筆File路徑
}
}

Comments

  1. 這個功能真的很方便,
    但是有個問題請教,
    是否只能使用視窗來Run這個 Air App,
    不能內嵌在網頁裡面嗎?

    謝謝

    ReplyDelete

Post a Comment

Popular posts from this blog

[Swift3] weak 與 unowned 關鍵字

雖然在 Swift 中看起來"很像"是不需要煩惱內存管理的問題,不過實際上它還是遵循著自動引用計數 (ARC) 的規則,當一個物件沒有被其他對象引用時會自動被銷毀,如果三魂七魄沒有完全回位的話,就會有個靈體留在現世的空間裡,最經典的範例如下: 閉包(Closure)引用 classClassA { typealias Complete = ()->() var name : String var onComplete : Complete? init(_ name: String){ self.name = name print("Hello I am \(self.name)") onComplete = { print("\(self.name): onComplete!") // --> 閉包引用 self, 計數 + 1 } } deinit { print("deinit: \(self.name)") } } var a : ClassA? = ClassA("A") // --> 引用計數 + 1 a = nil // 2-1 = 1 還剩下 1 所以沒辦法銷毀 ---output------- Hello I am A 由於這邊的 onComplete 宣告為 Optional, 正確的做法要連同 onComplete 一起刪除才可以被回收,若不是 Optional 則會進入無法回收狀態: var b : ClassA? = ClassA("B") b?.onComplete = nil // --> 還好是 Optional 可以設成 nil 計數 - 1 b = nil // 計數 = 0 所以被回收 ---output------- Hello I am B deinit: B 但是做人不需要煩惱太多,這時候就出動 unowned 關鍵字讓物件可以順利被回收: onComplete = { [unowned self] in print...