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 Manager 哪四個類別可能引起您的興趣。例如,您可能想知道 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 文字形式列印控制代碼的前 50 個字元。
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