在 AIR 中拖放的基本概念

Adobe AIR 1.0 以及更新的版本

如需在 AIR 應用程式中使用拖放功能的快速說明與程式碼範例,請到 Adobe Developer Connection 參閱下列快速入門文章:

拖放 API 包含下列類別。

拖放手勢階段

拖放手勢包括三個階段:

起始
使用者按住滑鼠按鈕,同時從組件或組件中的項目進行拖曳,以起始拖放作業。 拖曳的項目其來源組件通常是指定做為拖曳初始程式,而且會傳送 nativeDragStart nativeDragComplete 事件。Adobe AIR 應用程式基於回應 mouseDown mouseMove 事件而呼叫 NativeDragManager.doDrag() 方法,以開始拖曳作業。

如果拖曳作業是從 AIR 應用程式外部起始,就不會有傳送 nativeDragStart nativeDragComplete 事件的初始程式物件。

拖曳
使用者按住滑鼠按鈕的同時,將滑鼠游標移至另一個組件、應用程式或桌面上。 只要拖曳動作還在進行,初始程式物件就會一直傳送 nativeDragUpdate 事件。(但在 Linux 版 AIR 中不會傳送此事件。) 當使用者將滑鼠移至 AIR 應用程式中可能的放下目標上方時,放下目標就會傳送 nativeDragEnter 事件。事件處理常式可以檢查事件物件,判斷拖曳的資料是否為該目標所接受的格式;如果是,則呼叫 NativeDragManager.acceptDragDrop() 方法而讓使用者能在目標上放下資料。

只要拖曳手勢仍停留在互動式物件上方,該物件將一直傳送 nativeDragOver 事件。當拖曳手勢離開互動式物件時,物件則會傳送 nativeDragExit 事件。

放下
使用者在可行的放下目標上方放開滑鼠。 如果此目標是 AIR 應用程式或組件,該目標物件就會傳送 nativeDragDrop 事件。事件處理常式可以透過事件物件來存取傳輸的資料。如果目標位於 AIR 外部,則交由作業系統或另一個應用程式處理放下動作。在這兩種情況下,初始物件會傳送 nativeDragComplete 事件 (若拖曳動作是從 AIR 內部開始)。

拖入手勢和拖出手勢都是由 NativeDragManager 類別所控制。NativeDragManager 類別的所有成員均為靜態,因而請勿建立此類別的實體。

Clipboard 物件

經由拖曳而進出應用程式或組件的資料是包含在 Clipboard 物件內。單一 Clipboard 物件可以提供同一份資訊的不同表示形式,從而使其它應用程式便於理解與取用該份資料。例如,提供的影像可同時包括影像資料、經過序列化的 Bitmap 物件和檔案等形式。等到要讀取特定格式的資料時再呼叫顯示函數,便能達到延遲顯示資料的目的。

一旦拖曳手勢開始,要存取 Clipboard 物件就只能從 nativeDragEnter nativeDragOver nativeDragDrop 事件的事件處理常式中著手。在拖曳手勢結束後,即無法讀取或重複使用 Clipboard 物件。

應用程式物件能以參考形式及經過序列化的物件形式傳輸。參考形式只有在來源應用程式內才有效。經過序列化的物件則可在各個 AIR 應用程式之間傳輸,但只能與序列化或還原序列化期間仍為有效的物件搭配使用。經過序列化的物件會轉換成以字串為基礎的資料傳輸格式,亦即 Action Message Format for ActionScript 3 (AMF3)。

使用 Flex 架構

在大部分的情況下,建置 Flex 應用程式時最好使用 Adobe® Flex™ 拖放 API。Flex 架構針對執行於 AIR 中的 Flex 應用程式提供了相應的功能集 (此架構內部即是使用 AIR NativeDragManager)。Flex 也保有一套限制較多的功能集,以因應在更嚴謹的瀏覽器環境下執行應用程式或組件之需要。您無法在執行於 AIR 執行階段環境外的組件或應用程式中使用 AIR 類別。