Authorware类和函数:authorware6实际示例6 变量、函数和表达式地运用(二)

作者:网络 来源:佚名 更新时间:2008-03-24 点击:

authorware提供的系统函数

    authorware提供的变量是用来存储模块信息,authorware所提供的函数是用来完成特定的任务。
    函数使用的位置是:
    1.【运算】设计按钮的对话框中。
    2.作为设计按钮的装饰。
    3. 用于对话框的相关项的设置。
    通过使用authorware所提供的系统函数,读者可以设计基于终端用户交互时获取的信息来进行判断调用的程序模块。这样,在终端用户和计算机之间便形成了人机的对话的环境。
    使用【window】菜单中的【functions】命令选项(快捷键为ctrl+shift+f),弹出图6-32所示的authorware的【function】函数对话框。该对话框中的相关内容在下面我们将系统地学习。

 

图6-32 【functions】函数对话框

    (1)【category】:函数类型列表:在该下拉列表(如图6-33)中是authorware所提供的系统函数和读者自定义的函数类型的列表。
    authorware函数分为19种类型,读者在使用函数时,最好能知道函数所属的类,如果能知道函数所属的类。则我们可以快捷地使用函数类型列表,从该类函数的函数名列表中我们可以迅速地寻找到所需的authorware函数的位置。
    下面请读者来学习autorware提供的所有系统函数的类型:
    a.【character】:字符管理函数:这些authorware所提供的函数主要是用来处理文本内容及字符串的处理。
    b.【file】:文件管理函数:这些authorware所提供的函数能使读者可以方便地创建和维护外部文件。
    c.【framework】:框架管理函数:这些函数使读者可以实现在框架结构内部的某些特定功能,例如在框架结构内实施一个对某一关键词的查找等特定功能。
    d.【general】:一般目的函数:这些函数执行一些系统普通级的任务。例如删除一个显示对象,播放媒体信息等等。
    e.【graphic】:绘图函数:这些函数决定显示的对象如何在展示窗口中显示。例如在展示窗口画方框或圆。并为方框或圆设置填充模式和颜色。
    f.【icons】:设计按钮管理函数:利用这些函数来管理流程线上的设计按钮。例如使用这类函数显示或删除设计按钮或在一个【显示】设计按钮中改变一个显示对象所处的层级别。
    g.【jump】:跳转控制函数:跳转函数不仅能够从一个设计按钮跳转到另一个设计按钮中,而且还能够跳转到一个外部文件中。例如我们可以设置:当最终用户在一定时间内没有反应时,authorware程序跳转去执行某一特殊的设计按钮中的内容,或跳转执行某一特定的外部程序模块,以便实现特殊的自动演示功能。
    h.【language】:编程语言函数:  authorware提供的这些函数用来执行特殊的语言编程操作。例如if-then 语句、repeat while等语句。
    i.【list】:列表函数(该类函数是autorware4.0新增的函数类型):使用该类函数,可以对相关对象按照一定的规则排序,或按照特定的规则建立索引。
    j.【math】:数学运算函数:这些函数能完成复杂的数学运算,从简单的加法到随机数的生成。autorware可以执行大多数我们所需要的数学运算。
    k.【network】:网络管理函数:对于要在国际互联网上运行的模块,我们使用这类函数来实现某些特定的功能。例如:访问外部文件,或从网络上下载内容到本地硬盘上,都是通过使用该类函数来实现的。
    l.【ole】:ole管理函数:ole处理函数用来处理展示窗口中的ole对象。authorware 4.0支持所有标准的ole通信。
    m.【platform】:平台管理函数: 平台管理函数用来获取以后xcmds或dll要使用的信息。例如一个平台函数将返回发生器类型,以便确定authorware当前是否在执行应用程序。
    n.【time】:时间管理函数:该类函数根据不同的规则将日期转化为数字格式,方便我们的程序设计中对日期的比较,或者显示系统的日期和时间。
    o.【video】:视频管理函数:该类函数用来管理程序设计中引入的视频,包括视频的播放、暂停、寻找特定帧等等对视频内容进行操作的特殊功能。该类函数详细使用方法参见【视频的引入】中视频函数的使用。
    p.【xtras】:xtras函数:该类函数可以控制和使用xtras文件,或者获取xtras文件的相关信息。
    q.【xtra activex】:activex控件函数;
    r.【xtra fileio】:xtra文件输入输出控制函数。
    除了上面我们学习的19大类函数外,还有其它两个选项:
    ①【all】全部:选择该选项,则在函数名列表中按照字母顺序显示authorware所提供的所有的系统函数的名称。
    ②定制:定制函数类型列表是以读者所开发的程序模块文件名为标志。选择该类型选项,在函数名列表中将显示所有用户自己创建的和使用的xcms(macintosh)或dll(windows)生成的所有函数。
    (2) 函数名列表:一旦读者选定了某种函数类型,则在类型菜单下面的列表框中的内容就变成该类函数的所有函数名的列表。读者可以在该显示框中选择函数,单击一个函数名,【functions】函数对话框中的相关内容会相应改变。
    (3) 【referenced by】:引用:一旦读者选定了函数后,在引用区域显示框中将显示所有使用该函数的设计按钮。
    (4) 【show icon】:显示设计按钮命令按钮:单击该命令按钮,使用读者所选中函数的设计按钮在流程线上高亮显示。

提示:
    双击函数名列表中的该函数,可以达到同显示设计按钮命令按钮相同的功能。
    (5) 【description】:描述窗口:在该窗口中具体描述了函数的语法规则和参数含义,为读者使用该函数提供了详细的步骤。
    (6) 【load】命令按钮:单击该命令按钮,使读者可以定位及输入外部函数。这些外部函数可以是cms(macintosh)、dll或ucd(windows),或者其它包含用户自行设计的代码的应用程序。
    (7) 【rename】命令按钮:使用该命令按钮,读者可以修改在函数名列表中选择的函数。

注意:
    对于authorware所提供的系统函数来说,该命令按钮无效,该命令按钮只能修改用户自定义的函数。
    (8) 【unload】:卸载命令按钮:当一个用户自定义的函数在程序模块中的任何一个地方都不再使用时,读者可以卸载或删除它,要删除一个不再使用的自定义函数,只需在函数名列表中选择该函数,然后单击【delete】删除命令按钮来删除该函数即可。
    (9) 【paste】粘贴命令按钮:同变量的粘贴命令按钮相同,读者可以使用该命令按钮将函数名列表中选中的函数粘贴到打开的【运算】设计按钮对话框或可以接受函数的区域或外部对象中。
    当一个函数被粘贴到应用位置时,它包含了为确保函数能够正确运行所需的所有域的占位符。
    前面我们学习了authorware【functions】对话框中相关选项的含义和使用方法,在今后的学习中,我们还要使用到该对话框来实现特殊的功能。而且,在程序的调试过程中,【functions】函数对话框同【variables】变量对话框一样,可以作为一个独立的浮动窗口出现在windows窗口上,读者可以随时通过该对话框来了解自己所使用的函数语法的正确性。从而,可以加快程序的设计和调试。

函数的参数和返回值

    函数是具有特殊的语法规则,用来实现特定任务的程序。所以,当我们使用一个函数时,必须要遵循正确的语法规则。在语法规则中最重要的是要正确地使用参数,函数的参数是读者提供给函数为完成某一特定任务所需要的输入信息。几乎所有的系统函数都需要输入参数。
    在authorware所提供的众多函数中,参数的使用和函数的返回值的类型有很大的差别。
    1. 参数的类型
    首先,让我们来介绍一下参数的类型:
    (1) 带双引号的参数:如果将字符串作为一个函数的一个参数,则在输入该字符串作为参数时,必须为该字符串加上双引号。例如函数presskey("keyname"),如果我们希望设置该按键为字符串enter,则我们在使用该函数的时候,要为字符串enter加上一个双引号,使用实例为:presskey("enter");如果我们用一个变量keyname来代替字符串enter,即keyname=“enter”,则我们在使用该函数时,变量不能再加双引号,应该设成presskey (keyname),否则authorware会错将该变量名作为字符串对待。
    (2) 任选项参数:在authorware的系统函数中,有许多函数带有几个参数,而在实际的使用过程中,函数的有些参数不一定每一个都必须使用,而是根据实际任务的情况选用不同的参数。例如:jumpfile("filename"[, "variable1, variable2, ...", ["folder"]])函数是一个具有任选项参数的函数。使用该函数有两种语法规则:
    jumpfile("filename")
    jumpfile("filename"[, "variable1, variable2, ...", ["folder"]])
    如果authorware的程序仅仅是从一个应用模块跳转到另一个应用模块(如examp1.a4p)。则可以使用第一种语法,该函数设置为jumpfile(“examp1”)。如果在examp1.a4p文件中有两个变量与variable1和variable2同名,现在要将另外两个值(如username和userid)传递给这两个参数,则可以使用第二种语法方式。该函数设置为:jumpfile("examp1", " username,userid")。
    2. 函数的返回值
    在authorware所提供的系统函数中,有些有返回值,而有些函数是没有任何返回值。有返回值的函数占大多数。
    例如:beep( )函数只是实现一个响铃的功能,所以没有任何返回值。
    getline("string", n [, m, delim])函数的返回值是一个字符串。

函数的使用位置和使用方法

    在【运算】设计按钮对话框中插入函数:

图6-34 在运算对话框中选择插入函数的位置

    在流程线上的【运算】设计按钮对话框中我们可以插入函数,具体的步骤如下:
    (1) 在【运算】设计按钮对话框中现在要插入函数的位置,如图6-34所示。用鼠标单击对话框中要插入函数的位置,光标在该位置闪烁,表示处在等待插入的状态。
    (2) 使用authorware中的【window】菜单中的【functions】命令选项(快捷键为ctrl+shift+f),弹出authorware的【functions】函数对话框。

图6-35 插入函数后的【运算】设计按钮对话框

    (3) 在函数类型列表中选择要插入函数所属的函数类型,如果不知道函数的类型,则在函数类型列表中选择【all】选项。这里,我们选择【all】选项。
    (4) 在函数名列表中用鼠标单击要插入的函数,使其高亮处在被选中状态。此时,在描述区域显示框中显示该系统函数的语法规则和使用方法的简单描述。在这里我们选择“circel”函数。
    (5) 单击【paste】命令按钮,将所选择的函数插入到【运算】设计按钮对话框中,插入后如图6-35所示。
    (6) 将插入后的函数中的参数用读者所使用的变量代替。
    (7) 如果读者需要插入另外的函数,则不需要关闭【functions】函数对话框,读者只需要重新在【运算】设计按钮对话框中选择新的插入位置,重复步骤(3)至(6)的操作即可。
    (8) 关闭【运算】设计按钮对话框,结束函数的插入。

注意:
    关闭【运算】设计按钮对话框后,authorware有可能会弹出新建变量对话框,这是因为读者在设定函数的参数时,使用了新的变量,读者需要在新建变量对话框中设置这一新的变量。
    注意:函数的使用位置和方法基本上同变量的使用位置和方法,重要的是读者要特别留意函数中各参数的使用,还要注意函数返回值的意义和在程序设计中的应用。

使用自定义函数

    由于特殊任务的需要,在authorware所提供的系统函数不能满足需求的情况下,用户需要引入一些自己定义的函数来实现特定的任务,这些函数我们称为authorware引入的自定义函数。
    创建自定义函数有专门的介绍,在这里,我们先学习如何使用自定义函数。
    在使用自定义函数之前,必须要加载这个自定义函数。之所以要加载自定义函数,目的是使authorware能知道存放该函数的地点,从而能够直接从磁盘上读取该函数。当一个自定义函数加载后,就可以象使用authorware所提供的系统函数一样来使用自定义函数。因此,使用自定义函数有两步;
    (1) 加载自定义函数。
    (2) 将自定义函数插入到需要使用的地方。
    下面请读者来学习这两个使用自定义函数的步骤:
    加载自定义函数:
    在authorware中,可以以很多方式来加载所需要的自定义函数。综合起来有下面三种方式。而事实上,三种方式最终都要使用【load functions】对话框,不同之处是打开【load functions】对话框的方式不同,所以事实上有两种:
    (1) 用【functions】对话框来加载自定义函数。
    ①使用authorware中的【window】菜单中的【functions】命令选项(快捷键为ctrl+shift+f),弹出如图6-36所示的authorware的【function】函数对话框。

    ② 在【category:】函数类型下拉列表中选择【untitled】选项。
    ③ 用鼠标单击图4-36所示的【load】命令按钮,则屏幕上会弹出图6-37所示的对话框,在此来选择自定义函数所在的自定义函数文件。

图6-37 定位自定义函数对话框

    ④ 选择需要加载的自定义函数所在的文件,单击【打开】命令按钮,authorware会弹出如图6-38所示的引入文件中所包含的自定义函数的列表。

图6-38 自定义函数列表

    ⑤ 在图6-38所示的对话框中,在左边自定义函数列表区域中选择要加载的函数名,则该函数的使用方法便在该对话框的【name:】显示框中出现。单击对话框中的【load】命令按钮,加载所选择的自定义函数。

提示:
    在windows系统中,自定义函数文件扩展名为dll,它是一个动态连接库中的文件。
    ⑥ 则读者可以观察到在【functions】函数对话框的函数名列表中出现图6-39所示的自定义函数,该函数名的出现,表示我们已经将该自定义函数加载到authorware中。

图6-39 加载自定义函数后的【functions】函数对话框

    ⑦ 将自定义函数插入到需要的位置的方法同系统函数的插入方法相同,读者可以自行实践。
    (2) 在【运算】设计按钮对话框、对话框的正文输入框或正文显示对象中直接加载自定义函数。步骤如下:
    ① 在合适的位置直接输入自定义函数名及其参数。
    ② 关闭【运算】设计按钮对话框、对话框或用于创建正文显示对象的设计按钮,此时,弹出图6-37所示的【load function】定位自定义函数对话框。
    ③ 其它的设置方法参见(1)中的操作步骤(4)~(7)。
    使用自定义函数:
    当加载了一个自定义函数后,在authorware中该自定义函数的使用就完全和系统函数相同了。

提示:
如果读者在作品中使用了自定义函数,则在最后发行该应用程序作品的时候,必须要包括存储该自定义函数的文件。关于作品的最终打包与发行我们会在后续的实例中详细介绍。

创建自定义函数

    由于特殊任务的需要,authorware所提供的系统函数不能满足需求的情况下,用户需要引入一些自己定义的函数来实现特定的任务,这些函数我们可以称为authorware引入的自定义函数。
    对于所引入的自定义函数有以下两种:
    具有返回值的函数。
    没有返回值,只执行某种操作的函数,我们可以称之为命令。
    在该部分内容中我们学习下述要点:
    什么时候使用自定义函数;authorware应用程序的开发过程中,使用外部的自定义函数是最后的手段。
    如何创建自定义函数:自定义函数文件可以使用多种编程语言或编译器来建立。
    当引入的自定义函数不遵循authorware的约定时的处理:    当authorware认为动态连接库(dll)并没有遵循authorware的约定时,将在设置的过程中加入更多的步骤。

    1. 什么时候使用自定义函数
    使用authorware的好处是用户不必是一个经过专门训练的编程人员,就可以创建高级的应用程序。在实际的使用过程中,读者会偶尔遇到authorware所不能解决的问题或不支持的功能,在不考虑对执行效果的影响和时间的需求上,我们可以求助于引入外部代码-自定义函数来实现这些。
    笔者提醒初学者,在编程过程中,要真正地抵制authorware自定义函数便利性的诱惑。新的authorware编程者由于下述的两个原因而习惯于使用外部代码-自定义函数。
    (1) 传统的编程背景的影响:具有传统编程经验的新的authorware编程者有一种依赖于他们已经知道的东西的趋势,笔者也一样。在authorware的编程过程中,一碰到复杂的控制、制作一个动画等比较复杂的操作时,总是趋向于用已经知道的工具来寻求帮助,而不去仔细的研究authorware是否能实现这些功能。
    (2) 忽略了authorware编程的实质:有很多编程人员只注重autorware的编程规则,而不去开发和领会authorware的编程实质,对于编程规则只是表面的使用,而不能对authorware的编程规则融会贯通,并在其规则的基础上进行进一步的创新,实现新的功能。
    不注重autorware编程的实质,一旦碰到较复杂的问题,就迅速地求助于外部的文件代码-自定义函数来实现特定的功能。

提示:
    读者在今后程序的设计过程中,要充分利用authorware的编程规则,并在其基础上进行创新,尽量少地使用外部代码。尽量少地引入自定义函数。
    2. 如何创建自定义函数
    在该部分内容中我们将介绍创建authorware自定义函数的一些基础知识。在这里,首先我们对在windows环境下创建自定义函数的一些基本规则向读者简单地介绍一下:

内容一:dll和ucd:
    对于windows系统来说,自定义函数是以动态连接库(dll)文件格式存储的,因此,存储自定义函数的文件和应用程序模块是分开的,所以自定义函数文件是外部文件。在打包和最终发行作品时,必须包含使用了其函数的自定义函数文件。
    尽管authorware有强大的功能,但其并不支持dll文件的编写,如果要创建dll文件,则要借助于其它种类的编程语言来进行windows下的编程。这已超出了本书的范围,我们就不再这里详细介绍了。具体dll文件的创建参见其它编程语言的书籍(c、c++语言等)。
    虽然我们在这里不详细介绍dll文件的创建,但是,我们要在这里向读者介绍创建dll文件时要注意的事项:在创建一个自定义函数的dll文件时,读者必须在该文件中包含加载和使用一个自定义变量时所需要的特定信息:
    函数存放的位置
    函数名
    函数的参数个数和参数类型
    函数的返回值
    当authorware加载一个自定义函数时,是用一个被称为调用转换的标准格式来显示这些信息的。因此,在创建一个自定义函数时,必须包含上述信息,以便于authorware准确地调用函数。
    在我们使用自定义函数时,通常会遇到下面两种情况:
    (1) dll符合authorware的调用转换标准格式:authorware加载自定义函数所需的信息已经直接插入到dll中,所以当authorware选择该dll文件后,该自定义函数就已经被直接加载到authorware中。
    (2) dll不符合authorware的调用转换标准格式:因为dll不符合authorware的调用转换标准格式,所以必须由用户在加载该自定义函数时手工给出自定义函数的信息,否则,当调用该自定义函数时,authorware会提示用户输入相关信息。提示对话框如图6-40所示。
    对于对windows编程不熟悉的用户来说,使用dll是比较困难的。为了方便用户的使用,authorware提供了一种对dll文件的透明方式加载(ucd)。当加载一个ucd文件时,读者会发现一个dll文件中可以使用的函数列表,用户只需象粘贴一个系统函数一样,将一个想使用的自定义函数粘贴到要插入的位置。

内容二:自定义函数的创建规则:
    (1) 函数名的格式:dll文件和调用它的程序模块是相互独立的文件,因此,在程序模块调用dll文件时,必须指定准确的搜索路径。在authorware中,识别一个自定义函数有三种方式。下面我们以自定义函数hotclick()(数字标识为30)为例来说明这三种识别方式:
    ① 自定义函数原先的函数名:hotclick:当使用这种形式时,autorware将寻找名为hotclick的函数,并用这个名称进行加载。
    ② 存储函数名的变量:hclick= hotclick:当使用该形式时,authorware寻找名为hotclick的函数,然后将它命名为hclick。

注意:
    当一个自定义函数名与系统函数或已定义的自定义函数名相同时,这种形式是避免函数名冲突的有效方法。
    ③ 被称为该函数原型的数字标识:[email protected]当使用该形式时,authorware就直接通过自定义函数的数字标识来选择自定义函数。因此在使用hotclick自定义函数时可以用hclick来代替。

注意:
    使用该方式,可以使authorware迅速地调用要使用的自定义函数,大大地提高程序执行的速度。

图6-40 为自定义变量重新命名

提示:
    加载自定义函数后,读者可以在【functions】函数对话框中的函数名列表中看到自定义函数名,读者可以使用该对话框中的【rename】命令按钮来弹出图6-40中所示的【rename function】对话框来为自定义变量重新命名。
    (2) 函数参数列表的格式:用户可以使用参数列表的形式来输入函数的参数。如果自定义函数的参数不止一个时,参数之间要用逗号隔开。在用列表形式来输入函数参数时,参数的数量和参数的类型必须和原型函数中所定义的内容相一致。

    表6-1所示的是authorware中所有有效的参数类型。

表6-1  authorware中有效的参数类型

参数类型

含义

等效于windows编程中的参数类型

char

有符号byte

char

byte

无符号byte

unsigned char、byte

short

有符号整数

int、shoot、boot

word

无符号整数

unsigned  word  handle

long

有符号整数

long long

dword

无符号长整数

dword unsigned long

float

浮点数

float

double

双精度型浮点数

double

point

远程指针

far   lppoint

string

以零结束的字符串远程指针

 

void

空函数

void void

 

表6-2  参数类型之间的转换规则

要求的参数类型

整型

实型

字符串

char byte short word

取最低的字节

转换为整型后,再取最低字节

转换为整型后,再取最低字节

long  dword

不变

转换为有符号常整型

转换为有符号常整型

float

转换为浮点型值

按浮点型值判断

转换为浮点型值

double

转换为双精度浮点型值

不变

转换成双精度浮点型值

pointer

不变

截断成为符号长整型

转换成指向字符串的远程指针

string

转换为指向数值格式化字符串的远程指针

转换成指向数值格式化字符串的远程指针

转换成指向字符串的远程指针


    如果用户输入的参数类型与自定义函数中要求的参数不一致,则authorware会自动将输入的参数类型按照表6-2中的转换方式来进行转换。

    (3) 函数的返回格式:如表6-3所示为自定义函数的返回类型列表:

表6-3  自定义函数有效返回值类型

参数类型

含义

等效于windows编程中的参数类型

char

有符号byte

char

byte

无符号byte

unsigned char,byte

short

有符号整数

int,shoot、boot

word

无符号整数

unsigned  word  handle

long

有符号整数

long long

dword

无符号长整数

dword unsigned long

float

浮点数

float

double

双精度型浮点数

double

point

远程指针

far   lppoint

string

指向以零结束的字符串

 

void

无返回值

void void

    (4) 加载不符合authorware调用转换格式的自定义函数时的设置:当读者在【functions】对话框中使用【load】命令按钮来加载自定义函数时,如果dll文件的格式不符合authorware调用转换格式的话,则authorware会自动弹出如图6-41所示的对话框来要求用户来输入所加载函数的相关信息。包括如下内容:
    函数名
    参数名
    参数列表
    函数返回值
    函数相关描述等信息。
    在该对话框中,函数的描述是可选的输入区域,其它的输入区域是必须填写的。否则自定义函数无法加载。
    在【function name】正文输入框中输入函数名;
    在【arguments:】正文输入框中输入参数的列表;
    在【return:】正文输入框中输入返回值的类型;
    在【description】正文输入区域中输入对函数的相关描述,该选项可选。
    设置好该对话框后,单击【load】命令按钮加载自定义函数。

图6-41 输入自定义函数相关信息对话框

 

 系统函数实例介绍

    在authorware中,系统函数是非常重要的,利用authorware提供的系统函数,读者可以实现某些特定的功能,并可以将各种函数相组合来实现新的功能。在该部分内容中,我们将简单地学习部分系统函数的语法规则和使用方法。
    在该部分内容中,共学习如下内容:
    实现程序跳转的系统函数;
    笔者在程序设计过程中最常用的一些系统函数及其应用实例。
    在利用authorware进行交互式多媒体程序设计过程中,各程序模块之间的跳转和调用是非常频繁的,authorware作为一个交互式多媒体设计的平台,为编程人员提供了大量改变程序流程的函数来实现程序的跳转和模块之间的调用。下面首先让我们来学习改变程序流程的系统函数。

步骤1 改变程序流程的系统函数:
    (1) goto:
    作用:将程序跳转到某设计按钮中,执行该设计按钮中的内容。
    语法格式:goto([email protected]"icontitle")
    (2) jumpfile :
    作用:将程序从程序的一个模块文件跳转到另一个模块文件中去执行。
    语法格式:jumpfile("filename", ["variable1, variable2, ?,"folder"])
    (3) jumpfilereturn :
    作用:将程序从一个模块文件跳转到另一个模块文件中,执行完后一个文件后返回到原文件处。
    语法格式:jumpfilereturn("filename", ["variable1, variable2, ?,"folder"])
    (4) jumpout:
    作用:退出authorware环境,执行program参数设置的程序。
    语法格式:jumpout("program", ["document"] [,"creator"]))
    (5) jumpoutreturn :
    作用:执行program参数设置的程序,执行完该程序后,回到authorware环境中。语法格式:jumpoutreturn("program", ["document"] [,"creator"])
    (6) jumpprintreturn :
    作用:启动参数program指定的程序,并打印document 参数中指定的文件,在文件打印完毕后,直接返回authorware环境。
    语法格式:jumpprintreturn(["program"], "document" [, "creator"])
    (7) quit
    作用:结束当前运行的authorware程序。
    语法格式:quit([option])
    (8) quitrestart :
    作用:退出子程序,从主程序的起始位置恢复运行主程序。
    语法格式:quitrestart([option])
    (9) restart:
    作用:将程序跳转到文件的起始位置,重新执行程序。
    语法格式:restart()

步骤2 常用系统函数及其应用实例;
    (1) displayicon
    displayicon函数用来显示一个设计按钮内容,该函数同流程线上的设计按钮一样显示一个设计按钮中的内容。语法格式为:
            displayicon([email protected]"icontitle")
    如果读者正在用一个计算的结果来确定显示的对象时,该函数是非常有用的。在图6-42所示的【运算】设计按钮对话框中我们来实现这种控制。

图6-42 使用displayicon函数显示流程线上已经存在的设计按钮

注意:
    在我们的程序设计过程中,我们应该尽量使用displayicon函数来显示流程线上已经存在的设计按钮,不要重复地使用设计按钮来显示相同的内容。
    (2) eraseicon:
    同displayicon的性质和使用方法相同,唯一的不同是该函数是用来擦除设计按钮的。
    语法格式为eraseicon([email protected]"icontitle")

    实例如图6-43所示。

图6-43 使用eraseicon函数擦除一个显示在展示窗口中的设计按钮

    (3) find:
    该函数的功能是在某一特定字符串内寻找符合某种模式的字符。如果在字符串中查找到该模式字符后,函数返回一个在特定字符串中查找到的第一个与所设定模式相匹配的字符的位置。语法格式为:number := find("pattern", "string")
    实例1:
        appleposition := find("apple","banana, orange, apple")
    appleposition的返回值是17,因为与apple相匹配的字符串中的第一个字符的位置是字符串中的第17个字符(包括字符之间的空格)。
    实例2:
        lyric := "the rain in spain falls mainly on the plain"
        start := find("?ain",lyric)
    因为“?ain”同“rain”相匹配,所以start的值是5。

提示:
    对于find函数的返回值,当没有寻找到与设定模式相匹配的字符时,该函数的返回值为0。
    (4) getline:
    读者可以将字符串作为一个小型数据库来使用。利用getline函数,读者可以从字符串中连续获取信息。
    语法格式:resultstring := getline("string", n [, m, delim])
    下面请读者以实例来学习该函数的使用方法:
    文本文件phone.txt中的内容如下所示:
        john<tab>smith<tab>555-1234<return>jane<tab>doe<tab>5555678<return>
        sam<tab>spade<tab>555-9012<return>
    为了取得该文件中的某一人的电话号码,我们需要三个操作:
    ①读取文件的内容。
    ②读取行的内容。
    ③读取行中某一区域的内容,该内容就是所需要的电话号码。
    下面让我们来逐步实现上述操作:
    filecontents := readextfile("phone.txt")
    读取文件的内容,存储在变量filecontents中;
    fileline := getline(filecontents, 2)
    读取文件内容的第二行,存储在变量fileline中。
    phone := getline(fileline, 3, 3, tab)
    读取第二行内容中的第3个区域的全部内容。以tab键来分隔区域。
    变量fileline 的值是jane<tab>doe<tab>555-5678。
    存储电话号码的变量phone 的值是555-5678。
    (5) if  then 条件判断语句
    条件判断并执行。该函数可以根据不同的条件,来判断执行不同的内容。通过使用该函数,可以为用户的应用程序提供一种对变化的信息的观察和判断能力,从而实现灵活的程序的交互性。
    该函数的语法格式有如下多种:
    ①if    条件1  
        then   任务1
        end if
    ②if 条件1  
        then
        任务1  
        任务2 …..
        end if

    ③if 条件1
        then 任务1 else 任务2
    ④if 条件
        then    任务1…
        else
        任务n…
        end if
    ⑤if 条件1 then
        任务1…
        else if 条件2 then
        任务n…
        else
        任务m…
        end if
    下面让我们来看一个实例:
    if(明天旅游) then
     (要准备食品)
     (要准备现金)
    else
     (在家学习)
    end if
    源程序如图6-44所示:

图6-44 if-then 语句用于对条件做出决定

    (6) insertline:
    我们用getline()来从字符串获取信息,用insertline来设置信息,insertline函数将一行插入到字符串中指定的位置。
    语法格式为:result := insertline("string", n, "newstring", [delim])
    实例为:
    我们有两个字符串,即字符串string1和string2。
    string1:= "monday"^return^"wednesday"^return
    string2:= "tuesday"
    使用insertline函数将string2中的字符串添加到string1字符串中的第二行:
    string3:= insertline(string1, 2, string2)
    在【运算】设计对话框中的设置如图6-45所示:
    字符串string3的值为:"monday ^return^ tuesday ^return^ wednesday"
    (7) quit():
    在交互式多媒体作品中,我们关闭了用户的菜单栏,使用了图形界面。但是,当我们这样做的时候,也取消了用户使用authorware自带的文件菜单来退出的能力。
    为了让用户能够顺利的退出authorware程序,而不需要重新启动计算机。我们在程序流程线上的【运算】设计按钮中使用了quit函数。
    语法格式为:quit([option])
    在使用quit()函数时,不同quit()函数的参数可以达到不同的退出效果:
    下面,请读者学习该函数各参数的含义:
    0:退出程序模块,显示程序管理器(windows 3.1)和桌面(windows 95或nt)。如果该程序模块是由其它程序所调用的,则authorware返回调用它的程序中,继续执行。
    1:退出程序模块,显示windows 3.1程序管理器和windows 95桌面。
    2:重新启动计算机(windows 95 或nt)或返回dos(windows 3.1)。
    3:关闭计算机(windows 95 或nt)或退出authorware程序,显示windows 3.1程序管理器。

提示:
    
该参数是一个可选项,我们可以使用quit( ),不要任何参数,此时,authorware默认的参数是0。

注意:
    请读者注意,因为authorware遇到quit( )函数时,就立即退出应用程序,在quit( )函数后的源程序将被忽略。
    (8) repeat while循环控制函数:
    repeat while函数类似于if-then函数,该函数可以使authorware在读者所设定的条件下运行某些功能。
    repeat while(天下雨)
        (带雨伞)
    end repeat
    在此实例中,循环将继续重复,直到天不下雨。
    (9) writeextfile:
    使用该函数来写外部文件。该函数的语法格式为:
    writeextfile("filename", "string")

提示:
    读者可以使用authorware变量filelocation和recordslocation来辅助设置或定位要读写的文件。

注意:
    如果读者以一个已经存在的文件名写文件,那么该已经存在的文件将被覆盖。
    (10) random():
    该函数用于生成一个随机数。语法格式为:

图6-46设置声音播放的随机次数

        random(min, max, units)
    其作用是生成一个介于min和max间的随机数和两个随机数的小数点后的位数。
    例如:当min ,max 和units分别为1,10和0.1时,产生的随机数将类似于:1.2和5.8的数。
    下面的例子中,我们将对声音的播放进行控制,播放的次数随机地从最多3次,最少1次,该控制可以在设置声音的对话框中设置,如图6-46所示在【fixed number of times】选项的正文输入框中输入随机函数randow(1,3,1)来生成对声音播放次数的控制。


 运算符和表达式


运算符

    运算符是在authorware中执行某项操作的一个标识符。例如:乘法运算符“*”是将该符号两端的数值做乘法运算;连接运算符“^”是将该符号两端的字符串相连接成为一个新的字符串。例如user^name的运算结果就是username。
    运算符的类型及其应用实例:
    在autorware中,共有五种运算符:赋值运算符、关系运算符、算术运算符、逻辑运算符和连接运算符。下面我们将以实例来学习这五种运算符的含义和使用方法。
    (1) 赋值运算符“:=”:
        该运算符的含义是将运算符右边的值赋给运算符左边的变量。
        下面请读者以运算符的一些常见用法来学习该类运算符的使用:

 

userid:=964674

将数值964674赋给自定义变量userid。

hometown:=”beijing”

将字符串beijing赋给自定义变量hometown。

[email protected]”circle”:=true

将逻辑变量true赋给系统变量movable,产生的结果是【circle】显示设计按钮中的对象被设置为可移动,最终用户可以用鼠标在展示窗口中移动这些对象。

field:=field+1

将自定义变量field的当前值加1,然后将新的值赋给变量field。

 

注意:
    当一个字符串的值赋给一个变量时,必须为字符串加上双引号,否则,authorware会将该字符串当作变量名来处理。

技巧:
    在实际的程序设计中,当我们输入赋值运算符的时候,我们可以只输入“=”即可,authorware会自动为读者在程序中加上冒号“:”。
    (2) 关系运算符:
    ① 关系运算符的常见类型和含义如表6-4所示。

表6-4  关系运算及其含义

运算符

含义

=

表示运算符两端的值相等

<>

表示运算符两端的值不相等

<

表示运算符左边的值小于右边的值

>

表示运算符左边的值大于右边的值

<=

表示运算符左边的值小于等于右边的值

>=

表示运算符左边的值大于等于右边的值

    ② 关系运算符的常见用法:

注意:
    对于一个只有关系运算符的表达式,当该表达式成立时,则该表达式的值为逻辑值;值有两种情况:true 或 fasle。

 

userid=964674

如果自定义变量userid的值等于964674,则该表达式返回一个值true;否则返回false

userid>900000

将自定义变量userid的值同900000相比较,如果userid的值大于90000,则该表达式返回值true,否则返回false。

videodone=true

将逻辑变量videodone的值与true相比较,如果videodone的值为true,则该表达式返回逻辑值true,否则返回逻辑值false。


注意:
    其它关系运算符的使用方法参考上述实例。请读者注意:关系运算符的返回值是逻辑值,true 或 false。
    (3) 逻辑运算符
    ① 逻辑运算符的一些常见类型和含义如表6-5所示。

表6-5  逻辑运算符及其含义

运算符

含义

~

逻辑非

&

逻辑与

|

逻辑或

    ② 逻辑运算符的常见用法:

 

switch:=~switch

该表达式的含义是改变变量switch的状态,如
果switch的值原来为true,经过运算后其值为false。反之亦然。

switch:=status1&status2

如果变量status1和status2的值都为true时,
switch的值为true。其它情况下switch的值为false。

switch:=status1|status2

如果变量status1和status2的值有一个为true
时,则switch的值为true。只有变量status1和status2的值都为false的情况下,switch的值才为false。


    (4) 算术运算符:
    ① 算术运算符的基本类型如表6-6所示。

表6-6  算术运算符及其含义

运算符

含义

将运算符左右两边的值相加

将运算符左右两边的值相减

*

将运算符左右两边的值相乘

/

将运算符左边的值除以右边的值

**

将运算符右边的值作为左边的值的指数来进行运算

    ② 算术运算符的常见用法:
    算术运算符的使用方法与我们通常使用的加、减、乘、除、乘方等算术运算完全相同。例如我们要计算变量a的值乘以b的值,然后再减去变量c的值,将结果再除以变量d的值。则可以写为result:=(a*b-c)/d。此时,变量result存储的就是最后的结果。
    (5) 连接运算符:“^”:
    连接运算符“^”的作用就是将两个字符串连接成为一个新的字符串。
    下述实例让我们来理解该运算符的含义:
    变量content1:=”hello “; 变量content2:=”how are you?”
    content:=content1^”读者朋友”^content2
    经过连接运算符的连接,content变量的内容为“hello读者朋友how are you?”。

表达式

    表达式是由常量、变量、函数和运算符所组成的一个实现特殊计算或操作的语句。表达式可以应用到【运算】设计按钮对话框中,也可以在各属性对话框或者插入到显示设计按钮中的正文对象中显示其值。
    请读者注意,在使用表达式的时候要注意以下事项:
    (1) 数字的使用:如果要在表达式中使用一个负数,则读者可以使用“-”运算符。
    对于比较大的数字,我们只能使用数字符号,不能有千位或万位分隔符。
    在使用数字时,不能包含货币符号(如$、¥等)和科学符号。
    (2) 字符串的使用:在表达式中使用字符串,必须使用双引号,以将字符串区别于变量名、函数和运算符。
    如果读者要在字符串中使用双引号,必须在双引号前加上反斜杠(\)。如下述实例:
        “she said:\”she like to travel in beijing\””
    如果要在一个字符串中使用反斜杠时,必须在反斜杠前加上一个反斜杠。如下述实例:
        “d:\\windows\\athorware\\xtras\\”
    (3) 表达式注释的使用:在一个表达式的末尾,读者可以加上一个简短的注释以说明该表达式的具体含义和使用的目的。
    要在表达式末尾加注释,只需使用两个连字符“――”加在注释的前面。实例如下:
        result:=content1^content2――将两个字符串连接起来

图6-47 在正文对象中插入表达式的值

注意:
    读者如果想在屏幕上显示表达式的值,则必须在【显示】设计按钮或【交互作用】设计按钮中的正文文本对象中插入表达式,插入的表达式必须用花括号来括起来,否则autorware会将表达式当作正文对象来显示。具体设置如图6-47所示,只有在运行程序时,表达式的值才会显示到展示窗口中。

运算符优先等级

    在对表达式求值的时候,当一个表达式有多个运算符时,authorware并非按照运算符在表达式中的顺序从左至右顺序执行。authorware是按照运算符的优先等级来决定运算顺序的。
    下面让我们来学习运算符的优先级别。第一级的运算符具有最高的优先权,依次类推。如果在表达式中出现同一级别的运算符,则authorware按照从左至右的方式来顺序执行。
    第一级:()
    第二级:~
    第三级:**
    第四级:*
    第五级:+ -
    第六级:^
    第七级:=  <  >  <>  >=  <=
    第八级:&  |
    第九级::=

提示:
    
第一级为级别最高,第九级为级别最低。authorware在执行表达式时,先执行级别高的运算符,然后执行级别低的运算符。当相同级别的运算符出现时,authorware按照从左至右的顺序来执行表达式中的运算。


 【运算】设计按钮

    读者在前面的学习中会发现,authorware中的【运算】设计按钮是authorware源程序主要发生的地方。然而,authorware的源程序还可以出现在其它设计按钮的属性对话框中。
    该部分请读者详细学习【运算】设计按钮在authorware程序设计中的运用。

    在【运算】设计按钮对话框中,可以包含常量、变量、函数、表达式等各种形式的内容。
    【运算】设计按钮同【判定】设计按钮相同,本身不包含显示对象的功能。事实上,【运算】设计按钮只是一个容纳常量、变量、函数和表达式等各种形式内容的容器。如图6-48所示。

图6-49【运算】设计按钮对话框

    建立【运算】设计按钮的步骤如下:
    (1) 拖曳一个【运算】设计按钮到程序的流程线上。
    (2) 双击该【运算】设计按钮打开对话框,如图6-49所示。
    (3) 在该对话框中输入要输入的autorware源程序。
    (4) 单击图6-49最右上方的windows关闭窗口按钮,或者双击图中最左上方的【运算】设计按钮符号,弹出图6-50所示的提示框,authorware询问用户是否要关闭该【运算】设计按钮对话框,单击【yes】命令按钮,确认要关闭。关闭该对话框。

图6-50确认关闭的提示框

注意:
    当用户关闭【运算】设计按钮对话框后,authorware会自动检测用户输入的源程序中的变量、函数和语法等,是否有新的变量、新的自定义函数、参数的使用;程序语法的准确性等等内容,authorware会根据用户输入源程序的相关问题弹出与之相对应的对话框和提示内容。用户可以根据authorware的提示来改正源程序中的问题和未定义的变量、函数等。事实上,authorware的这种功能,类似于其它编程语言的编译命令。
    如果用户输入的源程序中有问题,【运算】设计按钮对话框是不能关闭的,只有【运算】设计按钮对话框中输入的内容完全正确,该对话框才可以关闭。

注意:
    在程序的设计过程中,用户可以同时打开多个【运算】设计按钮对话框。

技巧:
    不保存任何修改关闭【运算】设计按钮对话框的快捷方法是按下“esc”键。
    保存修改关闭【运算】设计按钮对话框的快捷方法是按下键盘右边的数字键区里的回车键(windows)。

提示:
    在程序的设计过程中,我们输入到【运算】设计按钮对话框中的信息只有在该对话框关闭后才能产生效果,在程序的设计过程中,请读者在运行程序模块前确保关闭了【运算】设计按钮对话框。让该对话框开着只能导致读者的修改被忽略。

提示:
    【运算】设计按钮对话框的大小是可以改变的,位置是可以在屏幕上移动的。读者可以象任何windows窗口一样,重新定义窗口的大小及位置。拖动窗口的任何一条边框,可以重新定义窗口的大小;简单地通过拖动标题条来拖动窗口,重新定义窗口的位置。这一功能在我们需要同时打开很多窗口的时候是非常有益的。

提示:
    读者可以象在展示窗口一样在【运算】设计按钮对话框中改变文本的字体和字体大小。
    【运算】设计按钮对话框中的字体的字体大小是全局变量。所选的字体和字体大小适合于每一个【运算】设计按钮对话框的所有内容。事实上,选择字体和字体大小只是为了使用的方便。字体和字体大小对变量、函数和表达式没有任何影响。

使用【运算】设计按钮为设计按钮加装饰

    authorware源程序既可以放置在流程线上的【运算】设计按钮内,也可以直接附加在任何设计按钮(【运算】设计按钮除外)上。当源程序附加在设计按钮上的时候,autorware便产生一个装饰,如图6-51所示。

图6-51 附加在设计按钮上形成装饰

    为设计按钮添加装饰的步骤如下:
    (1) 在程序流程线上选择要加装饰的设计按钮,使其处在高亮。
    (2) 使用authorware中【modify】菜单中【icon】子菜单的【calculation】命令(快捷键为ctrl+=),弹出【运算】设计按钮对话框。
    (3) 在对话框中输入authorware的源程序。
    (4) 输入完毕后,关闭【运算】设计按钮对话框窗口。
    authorware的源程序是放在单独的【运算】设计按钮中还是作为一个装饰,这些并不重要。它们的作用基本上是相同的。
    使用【运算】设计按钮的好处是读者可以为该按钮定义一个合适的标题,并为其创建关键词。当程序的开发人员要修改该设计按钮内的源程序时比较方便查找。
    使用装饰的好处是可以使用更少的设计按钮。

注意:
    如果一个设计按钮有一个附加于它的装饰,则autorware在执行该模块时会在设计按钮之前先执行装饰中的内容。

技巧:
    对于【判定】设计按钮和【交互作用】设计按钮,如果希望每一次程序模块执行该设计按钮时都要执行相同的程序内容,则读者可以将这些相同的程序内容作为一个装饰附加到这两种设计按钮上。


在【运算】设计按钮对话框中使用说明

    【运算】设计按钮除了用来输入authorware的源程序外,还有为程序模块相关内容做说明的功能。

图6-52 【运算】设计按钮对话框作为程序的说明

    如图6-52所示,我们使用【运算】设计按钮对话框窗口作为程序模块的说明。在该窗口内我们可以输入任何有关该模块的信息。一般情况下,我们将该设计按钮放置在流程线上作为程序模块的第一个设计按钮。
    为在【运算】设计按钮对话框中输入信息,我们使用了authorware所提供的【运算】设计按钮对话框中的注释功能。
    该对话框中的任何内容前面如果加上两个连词符“――”,则该行连词符的所有内容便为注释内容。authorware在检测【运算】设计按钮输入内容的时候不再检测该部分内容,只将它们作为注释来考虑,不再作为源程序的执行内容。

 练习

    (1) 希望读者对该实例中的例子进行实践和体会。在这些实例中,我们以简单的实例为基础,学习了authorware的函数、变量和表达式,并学习了【运算】设计按钮的使用。这些内容是autorware实现交互作用多媒体创作的基础。作为较高级的程序设计人员,必须对authorware的变量、函数有较深入的学习和熟练地掌握它们的应用。
    (2) 希望读者熟悉附录中的authorware所提供的系统变量、系统函数。只有对这些变量和函数的用法和功能比较熟悉,才有可能编制出较灵活的多媒体作品。
    (3) 尽可能多地对authorware所提供的变量和函数进行实践和操作。