跳转到内容

Futurebasic/语言/参考/on appleevent

来自维基教科书,自由的教学资源

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

华夏公益教科书