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