ucd(user code dll)是用户自定义函数的缩写。包括authorware自带的ucd函数和用户用vb、vc、delphi编写的ucd函数。
ucd函数又称为外部函数,在使用之前必须先引入到当前文件中,当外部函数被正确引入后,我们就可以像使用系统函数一样使用它了。ucd函数的后缀一般为u32(32位)或ucd(16位,在windows 3.x中使用)。在authorware 7.0中已经不再带有16位的ucd了。
用户自定义函数引入的步骤,以装载“cover.u32”为例:
1)用authorware新建一个文件,并命名为"cover.a7p".
2)选择【窗口】→【面板】→【函数】菜单项或单击工具栏上的【函数】按钮,打开函数对话框。
3)在函数对话框的“种类”下拉列表中选择当前的文件“cover.a7p”,单击“加载”按钮
4)弹出“加载函数”对话框。在对话框中选择要加载的外部函数,这里选“cover.u32”单击【打开】按钮。
5)弹出对话框,在“名称”项下面显示的是“cover.u32”所包含的两个函数“cover()”和“uncover()”,按住【ctrl】快捷键,再分别单击着两个函数就可以选中它们。单击【加载】按钮装载这两个被选中的函数。
6)如果出现如图4-1所示,说明函数已经加载成功,如选中“cover”函数,则在下面的“描述”框中显示的是函数的名称和具体的使用方法。
图4-1 加载“cover”函数
7)将外部函数引入到计算图标或指定的区域,只要打开计算图标,双击图4-1中的函数名即可,效果如图4-2所示。
图4-2 “cover”函数的应用
如果你的多媒体演示系统的显示区域大小设置为640×480像素,而显示器的分辨率被设置成800×600像素,那么它在运行的时候显示区域比屏幕的区域要小。屏幕上的其他部分在你的程序运行时会继续显示在屏幕上。这样,会使用户分心,那么有没有一个办法使程序在运行时隐藏其余部分而不干扰用户的视线呢?
方法是运用u32函数cover和uncover,我们来举一个例子。
1)拖入一个显示图标,在显示图标中导入一个背景图片。
2)拖入一个交互图标,在交互图标右边拖入三个计算图标,分别起名为“隐藏桌面”、“显示桌面”和“退出演示”。在交互图标中安排好三个按钮的相对位置。
3)载入(上一节中已经介绍过)u32函数包cover.u32中的函数:cover()和uncover()。
4)打开“隐藏桌面”计算图标在其中输入:cover()。
5)打开“显示桌面”计算图标在其中输入:uncover()。
6)打开“退出演示”计算图标在其中输入:
uncover()
quit()
来结束演示。程序结束前一定要取消覆盖屏幕,即运行uncover(),不然会影响到其他程序的运行。
7)该程序一定要打包以后才能看出运行效果。最好在打包前不要运行此程序。
一、windows api简介
windows api是应用程序编程接口(application programing interface)的缩写,它是一系列复杂的函数、消息的集合,为高级语言提供了大量可扩充的功能强劲的函数。
二、windows api函数的载入
aw中可以利用动态链接库(dll)文件,直接使用windows api函数库的功能。一个dll文件就是一个函数库,包含若干个函数。调用dll文件时,必须明确函数的调用协议,包括函数的名称、参数的数目、参数的类型、返回值的类型。
1)windows函数库主要的几个文件。
l gdi32.dll:屏幕显示及打印功能的函数集
l user32.dll:鼠标、键盘、通信端口、声音、时钟功能的函数集
l kernel32.dll:文件及内存管理(核心部分)功能的函数集
l mpr.dll:windows 32网络接口库
l advapi32.dll:windows 32、advapi32核心部件
2)dll文件的载入过程。
与调用外部函数相似,dll函数集在使用之前必须事先载入和声明,其载入的过程要比调用ucd函数更加复杂。以装载“window/system/shell32.dll”文件为例,具体的载入过程介绍如下。
单击工具栏上的【函数】按钮,打开“函数”面板,在“种类”下拉列表中选择当前的文件“关于.a7p”。单击【加载】按钮,出现“加载函数”对话框,选择“c:/window /system/shell32.dll”文件,单击【打开】按钮,出现如图4-3所示的函数设置对话框,具体的选项如下。
function name:输入要调用的函数的名称,这里是“shellabouta”.
arguments:指明 要用到的参数类型,这里是“long,string,string,long”。
return:函数返回值的类型,这里是“long”。
description:函数的语法。
图4-3 载入dll函数设置对话框
单击图4-3中的【load】按钮装载函数,如果装载成功,则在对话框中显示“successfully loaded "shellabouta()"”。
装载完毕后,单击图4-3中的【done】按钮,被成功装载的函数就会出现在函数框中。
要调用window标准的“关于”窗口主要利用shell32.dll文件中的“shellabouta()”函数实现。
1)“shellabouta()”函数的使用格式。
shellabouta(hwnd,szapp,szotherstuff,hicon)
hwnd:设置窗口的句柄。
szapp:设置窗口的标题。
szotherstuff:在版权说明和使用权之间的空白处增加额外的说明。
hiocn:一般取0。
2)新建一个文件,名为“关于.a7p”,装载函数“shellabouta()”,其过程与上面是一样的,这里不再介绍。
3)装载函数成功后,在流程线上放一计算图标,在其中输入如下内容:
szapp="authorware7.0使用及技巧精解"
szotherstuff="欢迎您使用authorware7.0
使用及技巧精解!"
shellabouta(windowhandle,szapp,szotherstuff,0)
其中szapp,szotherstuff是两个自定义变量
4)保存并运行程序。
在用authorware制作多媒体作品时,我们希望展示窗口和普通窗口一样可以最小化、关闭、拖动。要实现这一目的,最简单的方法是在设置文件属性时,保留标题栏,但这样会影响作品的美观。如何制作自己的标题栏,使之和整个作品搭配协调,并且可以实现标题栏的功能呢?
使用windows api函数而不通过单击窗口的控制图标来控制authorware的运行窗口,它可以使你的authorware程序在没有标题栏的情况下自由控制窗口的显示状态,这对于编制精美的多媒体程序是很有帮助的。
你可以找一个你认为满意的窗口把它截取下来,用photoshop修改成你满意的样子,保存为作品的背景。再制作最小化和关闭的按钮图形以备用。
1)新建文件
在authorware中新建一个文件。单击【修改】→【文件】→【属性】菜单,在弹出的“文件属性”对话框中选择“回放”标签,将“大小”项设定为“根据变量”,取消“标题栏”和“菜单栏”的复选框前的对勾。
2)窗口设置
拖一个显示图标到流程线上,命名为“背景”。将制作好的背景图片导入,再拖一个计算图标到流程线上,命名为“窗口大小”,双击,在其中输入程序:
resizewindow(400, 280)
movewindow(100, 100)
第一句的作用是将窗口大小设置成合适大小(以背景图片的大小为准)。第二句的作用是将窗口移动到屏幕的合适位置。
3)最小化、最大化及关闭功能
在流程线上放置一个交互图标,命名为“窗口控制”。在其右侧放置三个计算图标,响应类型都设为“按钮响应”,分别命名为“最小化”、“最大化”、“关闭”。在它们的分支属性对话框“响应范围”项中复选“永久”,“分支”项选择“返回”。如你认为需要,可编辑这三个响应的按钮样式,用制作好的图片代替默认的样式并调整其位置。
在“最小化”图标中输入程序:
showwindowasync(windowhandle, 6)
在“最大化”图标中输入程序:
showwindowasync(windowhandle, 3)
这里调用windows api函数showwindowasync实现将窗口最小化、最大化。保存时,系统会弹出对话框,提示选择此函数的来源,选择winapi.u32。
authorware 6以前的版本是加载api函数showwindow,现在如还加载它则会出现于aw内部函数showwindow同名而无法加载的情况,从而无法完成“使窗口最小化”等任务。现在加载api函数showwindowasync,该函数可以替代showwindow原有的功能。
格式为:showwindowasync( hwnd hwnd, int ncmdshow)
其中:hwnd hwnd 设置窗口的句柄,一般为windowhandle
ncmdshow:定义如何显示启动程序的常数值,即程序启动后的窗口形式,取值如下。
0——隐藏窗口,活动状态给令一个窗口。
1或9——用原来的大小和位置显示一个窗口,同时令其进入活动状态。
2——最小化窗口,并将其激活。
3——最大化窗口,并将其激活。
4——用最近的大小和位置显示一个窗口,同时不改变活动窗口。
5——用当前的大小和位置显示一个窗口,同时令其进入活动状态。
6——最小化窗口,活动状态给令一个窗口。
7——最小化一个窗口,同时不改变活动窗口。
8——用当前的大小和位置显示一个窗口,不改变活动窗口。
在“退出”图标中输入程序:
quit()
作用是退出本程序。
4)窗口移动功能
在这里我们要实现当用户拖动自定义标题栏时,窗口随之移动的功能。
在交互图标“窗口控制”右侧放置一个“组群”图标,响应类型为“热区响应”,命名为“移动窗口”,在分支属性对话框中“响应范围”项复选“永久”,“分支”项选择“返回”。设定其响应范围包围背景的上部分,这就是我们的标题栏范围。
双击“移动窗口”图标,在其中放置一个“交互”图标,命名为“move window”。在此交互图标右侧放置一个“计算”图标和一个群组图标,响应类型都为“条件响应”,响应条件分别为mousedown和~mousedown。设置mousedown图标分支的属性,“自动”为“为真”,“分支”为“重试”。设置~ mousedown图标分支的属性,“自动”为“为真”,“分支”为“退出交互”。
在mousedown计算图标中输入程序:
releasecapture()
sendmessage( windowhandle, 161, 2, 0)
这里同样是调用windows api函数实现窗口可拖动的功能。当系统提示选择这两个函数的来源时,选择winapi.u32。
~mousedown群组图标内为空。
整个程序就完成了,最后的流程如图4-4所示。
我们看一下最后的效果。单击“最小化”按钮可将窗口最小化到任务栏,在任务栏上单击可恢复;单击“关闭”按钮可退出本程序;拖动自定义的标题栏可移动窗口的位置,达到了预期的效果。
图4-4 窗口属性流程图
这个程序中你可以再设一个按钮,命名为“还原”,在其计算图标中输入:
showwindowasync(windowhandle, 1)
设一个与最大化正好相反的激活条件和非激活时隐藏按钮,最大化按钮也要同样设置。并把“最大化”和“还原”按钮重叠放置。
在authorware制作消息框可以利用其提供的winapi.u32中的messagebox函数,其格式为:messagebox (hwnd hwnd, lpcstr lptext, lpcstr lpcaption, uint utype)。用它可以做出标准的windows消息框。
一、方法一
首先,新建一个要求用户注册的authorware 7文件,然后加载winapi.u32中的messagebox函数。
然后,在流程线上放置一个名为“消息”的计算图标,在其中输入如下内容:hh:=messagebox (windowhandle, "密码错误,请输入正确的注册码!", "提醒",72)。hh是一个自定义变量,用于判断用户按了哪个按钮,以便执行下一个流程。至于它的返回值,将在下边一并列出。
接着,在“消息”计算图标下再放置一个“判断”计算图标,在其中输入以下内容:
if hh=2 then
quit()
else
goto(iconid@"跳转到注册码输入")
end if
内容仅作为参考,大家可以根据实际情况自行确定输入内容。
好了,现在运行程序看一下,感觉如何?如果适当修改messagebox函数的“uint utype”参数值,还可以得到五种效果。具体效果如何,请诸位自己尝试,在此就不一一展示了。
1)uint utype参数值可分为五大类,分别介绍如下。
第一类可取值为:0、1、2、3、4、5、8、10
第二类可取值为:16、17、18、19、20、21、24、26(在第一类取值加16)
第三类可取值为:32、33、34、35、36、37、40、42(在第一类取值加32)
第四类可取值为:48、49、50、51、52、53、56、58(在第一类取值加48)
第五类可取值为:64、65、66、67、68、69、72、74(在第一类取值加64)
2)各按钮的返回值介绍如下。
1 确定 5 忽略
2 取消 6 是
3 终止 7 否
4 重试
其中,“中断”按钮没有返回值。
二、方法二
首先,我们来看一下打开如何一个计算图标。
在计算图标的快捷工具栏右侧有个“!”的按钮,作用是“插入提示框”,单击该按钮,会弹出如图4-5所示的设置框。
图4-5 消息框的设置对话框
设置完后,单击“test”按钮看看效果如何?然后确定。在计算图标中的当前位置就插入了一条语句,还有各个按钮的返回值。
如:
systemmessagebox(windowhandle, "你真的想退出
吗?", "退出", 52) -- 6=yes, 7=no
运行结果如图4-6所示(其中标题栏中的“退出”可在计算图标中修改)。
图4-6 消息框
systemmessagebox是系统函数不需要在winapl.u32中加载。
格式为:
result = systemmessagebox(windowhandle, "text",
"caption" [,type or #buttons, #icon, default,
#modality])
参数设置与messagebox类似。
新闻热点
疑难解答