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