Futurebasic/語言/參考/on appleevent
(+) 外觀 (+) 標準控制檯
ON APPLEEVENT (eventtype&,eventClass&)Â{FN userFunction|GOSUB{lineNumber|"stmtLabel"}}
2001 年 5 月(版本 5)
AppleEvents 用於應用程式之間的通訊。(在處理 Apple Events 時,您經常會看到應用程式被稱為程序。)使用此 FB 語句來設定和跟蹤特定型別的 Apple Events。要跟蹤的事件型別和類別是 ON APPLEEVENT 引數的一部分。型別和類別 Apple 事件被分為稱為型別的通用組。這些組被細分為特定的類別。例如,您可能聽說過 Apple 核心事件。每個應用程式都應該理解和處理的事件。此組的類別稱為 _coreEventType。此型別的長整型常量為 _"core"。這兩種地址形式在 FB 中都是可以接受的,但只有一個 (_"core") 區分大小寫。如果您想處理核心事件,您將不得不告訴 Apple Event 管理器哪些四個類別可能是有趣的。例如,您可能想知道 Finder(或其他一些程序)是否向您傳送了開啟文件的訊息。在這種情況下,類別將是 _kAEOpenDocuments 或 _"odoc"。為這種型別和類別設定的事件處理程式將按如下方式輸入
ON APPLEEVENT(_coreEventType,_kAEOpenDocuments) ÂFN myODocHandler
FB 識別一個特殊的事件類別 _"TEXT"。當遇到此類別時,可以使用 APPLEEVENTMESSAGE$ 函式更輕鬆地訪問事件引數的內容。以下簡單示例顯示了您的 ON APPLEEVENT 處理程式如何查詢傳入的文字。
LOCAL FN doAppleEvent PRINT "Message received:" PRINT APPLEEVENTMESSAGE$ END FN ON appleevent(_"buba",_"TEXT") FN doAppleEvent
將大量資料塊透過 Apple Events 作為控制代碼傳遞通常很方便。FB 會自動處理此操作,從 Apple Event 中提取資料並將其作為控制代碼傳輸到您的應用程式。FB 始終複製資料,因此當您完成操作後,必須自行管理處置。以下片段顯示瞭如何接收和處置控制代碼。為了顯示資料已接受,此例程以 ASCII 文字形式列印控制代碼的前五十個字元。
LOCAL DIM AERec as AERecord DIM @OSErr DIM dataHandle as handle DIM n LOCAL FN doAppleEvent OSErr = FN AEGETPARAMDESC(gFBAEEvent&, _keyDirectObject, _"CLAS", AERec) dataHandle = AERec.dataHandle CLS PRINT "Rec'd at ";TIME$ FOR n = 1 TO 50 PRINT CHR$(PEEK([dataHandle]+n)); NEXT CALL DISPOSEHANDLE(dataHandle) END FN
當設定此處理程式時,ON APPLEEVENT 的類別引數為 _"CLAS"。您可以看到它是在 FN AEGETPARAMDESC 中使用所必需的。注意:某些處理程式(如上面的示例)已內置於大多數 FB 執行時中。為了覆蓋行為,您首先必須使用 KILL APPLEEVENT。只允許一個 Apple Event 向量。如果您建立多個 ON APPLEEVENT 向量,每個向量都會覆蓋上一個向量,因此最後一個向量將被使用。為了在一個應用程式中處理多個 eventClasses 和/或型別,為每個型別設定一個向量,並將它們都指向同一個處理程式。處理程式可以透過檢查全域性變數 gFBAEType& 來確定它接收了哪個類別。(有關替換事件向量的正確方法,請參見 KILL APPLEVENT。)
示例
CD Example: AppleEvents Folder
SENDAPPLEEVENT、HANDLEEVENTS、APPLEEVENTMESSAGE$、GETPROCESSINFO、KILL APPLEEVENT