1)新建一个文件,文件名为sample.a7p。
2)放置一计算图标于流程线上。
3)按【ctrl+shift+f】快捷键,打开“函数”窗口。
4)选择sample.a7p,单击【加载】钮,打开winapi.us2文件,并引入其中的systemparameters info()、findwindow()和setwindowpos()三个函数。
5)双击计算图标,在里面输入如下程序语句:
systemparametersinfo(97,1,1,1)——屏蔽键盘所有功能键。
wnd:=findwindow(″shell_traywnd″,″″)——捕捉任务栏窗口。
setwindowpos(wnd,0,0,0,0,0,128)——隐藏任务栏窗口。
6)在程序的退出处放置一计算图标,双击计算图标,在里面写上:
l systemparametersinfo(97,0,1,1)——恢复键盘所有功能键。
l wnd:=findwindow(″shell_traywnd″,″″)——捕捉任务栏窗口。
l setwindowpos(wnd,0,0,0,0,0,64)——显示任务栏窗口。
我们还可以在运行程序前,通过windows api函数捕捉所有的窗口,获得窗口的句柄,然后再向它们依次发送mw_quit消息,这样就可以在运行程序之前,关闭所有正在运行的程序,从而释放出更多的资源给你的多媒体作品。
设计程序时,因为某些特殊需要,有时可能需要屏蔽系统的某些功能键,比如【alt+tab】、【alt+f4】、【ctrl+q】等。本例中就使用budeky.u32中的函数来屏蔽某些功能键,所使用的函数有:
1)disablequit()
格式:result:=disablequit(windowhandle)
屏蔽用于退出的某些快捷键,比如:【alt+f4】、【ctrl+q】和【ctrl+.】。
2)disableswitching()
格式:disableswitching()
屏蔽某些功能键及组合,比如【alt+tab】、【alt+esc】、【ctrl+esc】、【ctrl+alt+delete】和窗口键。
3)restorequit
格式:restorequit()
解除restorequit()函数屏蔽的功能键。
4)restoreswitching()
格式:restoreswitching()
解除restoreswitching()函数屏蔽的功能键。
具体步骤如下。
1)新建一个文件,保存为“屏蔽功能键.a7p”,文件流程如图4-7所示。
图4-7 屏蔽功能键流程图
在“初始化”图标中输入以下内容。
resizewindow(300, 200) --设置窗口大小
setwindowtext( windowhandle, "屏蔽功能键")
设置演示窗口标题栏的名称为“屏蔽功能键”
2)打开交互图标,输入图4-8所示的内容,调整好按钮的相对位置。
图4-8 交互图标中的显示对象
3)在“屏蔽功能键”按钮交互分支下的计算图标中输入以下内容:
disableswitching()
hint:="/"alt+tab/"、/"alt+esc/"、/"ctrl+esc/"、
/"ctrl+alt+delete/"和/"窗口键/"已被屏蔽"
systemmessagebox(windowhandle,hint , "屏蔽功能
键", 48) -- 1=ok
屏蔽功能键,然后显示提示信息。
技巧:因字符串需要加双引号,而在提示信息中由于也有双引号,所以必须在内部每个双引号前加转意字符“/”。第一个和最后一个双引号当然是不能加的。
4)在“屏蔽退出键”按钮交互分支下的计算图标中输入以下内容:
disablequit( windowhandle )
hint:="/"alt+f4/"、/"ctrl+q/"和/" ctrl+./" 已被屏蔽"
systemmessagebox(windowhandle, hint, , "屏蔽退出
键",48) -- 1=ok
屏蔽退出键,然后显示提示信息。
5)在“解除屏蔽”按钮交互分支下的计算图标中输入以下内容:
--解除各键的屏蔽!
restorequit()
restoreswitching()
hint:="各键已经解除屏蔽!"
systemmessagebox(windowhandle,hint , "解除屏蔽",
48) -- 1=ok
解除各键的屏蔽,然后显示提示信息。
6)在“退出” 按钮交互分支下的计算图标中输入以下内容:
--退出程序前解除屏蔽
restoreswitching()
restorequit()
quit()
防止用户未单击“解除屏蔽”按钮解除对各键的屏蔽,在退出程序前执行解除屏蔽函数保证程序退出后各键均解除屏蔽。
7)运行程序,标题栏发生了变化。单击“屏蔽功能键”按钮出现如图4-9所示的信息。
图4-9 屏蔽功能键消息框
在有些时候,我们用authorware做的程序希望演示窗口的位置总在最前,即不要被其他窗口覆盖。比如我们在程序中调用了word,在进行word编辑的同时authorware的主程序的小窗口仍然在前。我们就要用到winapi.us2中的setwindowpos()函数。
setwindowpos:这个函数能为窗口指定一个新位置和状态。它也可改变窗口在内部窗口列表中的位置。
函数格式:setwindowpos( hwnd hwnd, hwnd hwndinsertafter , int x, int y, int cx, int cy, uint uflags)
其中的参数意义如下。
hwnd:欲设置的窗口的句柄。
hwndinsertafter:窗口句柄。在窗口列表中,欲设置的窗口hwnd会置于这个窗口句柄的后面。这个参数也可能取下面的值:
1——将窗口置于窗口列表底部。
0——将窗口置于z序列的顶部;z序列代表在分级结构中,窗口针对一个给定级别的窗口显示的顺序。
-1——将窗口置于列表顶部,并位于任何最顶部窗口的前面(将一个窗口置顶,不会被任何窗口遮挡)。
-2——将窗口置于列表顶部,并位于任何最顶部窗口的后面。
x:窗口新的x坐标。
y:窗口新的y坐标。
cx:新的窗口宽度。
cy:新的窗口高度。
wflags取值如下:
1——保持当前大小(cx和cy会被忽略)。
2——保持当前位置(x和y设定将被忽略)。
4——保持窗口在列表的当前位置(hwndinsert after将被忽略)。
8——窗口不自动重画。
10——不激活窗口。
32——围绕窗口画一个框(强迫一条wm_ncc alcsize消息进入窗口,即使窗口的大小没有改变)。
64——显示窗口。
128——隐藏窗口。
例如:setwindowpos(windowhandle,-1, 0, 0, 0, 0, 3),取3时cx、cy、x和y设定都将被忽略。
一个外挂函数——altools.u32,这里面有改变分辨率和隐藏任务栏的函数。通过程序来改变分辨率和隐藏任务栏而实施全屏演示。不过还要在程序退出的时候改回原来的分辨率。下面我们就来看一看具体实现的办法。
一、加载函数
打开authorware,保存文件为“改变屏幕分辨率.a7p”。按【ctrl+shift+f】快捷键打开函数框,在“分类”里面选择“改变屏幕分辨率.a7p”,单击【加载】按钮,选择altools.u32,加载里面的“alchangeres”函数,用同样方法,再加载“alhidetaskbar”、“alshowtaskbar”两个函数。先说明一下这三个函数的作用:
1)alchangeres:改变屏幕分辨率的函数,基本格式为“alchangeres(width,height,bitpp)”。
2)alhidetaskbar:隐藏任务栏。
3)alshowtaskbar:显示任务栏。
二、编写程序
1)拖动一个计算图标到流程线上,命名为“初始化”,打开并输入以下语句:
userscreenwidth=screenwidth--保存用户监视器的
宽度
userscreenheight=screenheight--保存用户监视器的
高度
userscreendepth=screendepth--保存用户监视器的颜
色深度
alhidetaskbar()--隐藏任务栏
alchangeres(640,480,32)--改变屏幕分辨率
resizewindow(640,480)--调整窗口大小
2)将整个课件作为一个整体放在计算图标“初始化”下。现在我们用一个等待图标来代替。
3)再拖动一个计算图标到流程线上,命名为“退出”,打开并后输入以下语句:
alshowtaskbar()--显示任务栏
alchangeres(userscreenwidth,userscreenheight,user
screendepth)--恢复使用者原来的分辨率
quit()--退出
运行程序,这时我们可以看到,在运行初期已经改变了屏幕分辨率,而且是全屏播放。当退出时,又改回到原来的分辨率。
authorware 7.0支持的声音文件格式仍然有一些限制,只有mp3、aiff、pcm、wave、vox、swa扩展后缀名的文件才可直接导入到authorware程序中,但还是不支持midi文件的直接使用。我们知道midi文件使用的是数字乐器,换句话说,midi文件并没有真正地记录了音频信息,而是像乐谱一样记录了各种乐器的和声和音高节奏,具体的演奏任务由声卡所带的数字乐器完成。midi音乐有着体积信息小的特点,而且不会与wav声音通道冲突,因此,在进行多媒体开发时经常用来做背景音乐,但authorware并不直接提供对midi声音文件格式的支持,怎么办呢?别急,authorware提供了外部函数的接口可以解决这个问题:利用第三方的ucd外部函数,我们可以实现对midi声音文件的支持。下面我们就一起来制作两个关于midi背景音乐循环播放的范例吧!
1)循环播放midi背景音乐
在这里我们要实现的目的是让midi背景音乐循环的播放,具体思路是通过导入authorware的外部函数midiloop.u32相关的两个扩展函数,实现对midi背景音乐的循环播放。
在介绍范例前,我们简单介绍一下midiloop.u32的相关扩展函数:
result:=loopmidi(file)
这个函数的功能是对程序指定的midi音乐进行循环播放,直到用户中止为止。其中,参数file就是用户自行指定的外部midi文件,当然,这里指定的midi声音文件并没有导入程序内部,只是存在一种相当于链接的关系。
result:=stopmidi()
这个函数的功能是停止当前正在播放的midi音乐,参数为void型。
2)程序的流程图如图4-10所示。
图4-10 播放midi音乐流程图
3)操作步骤介绍如下。
①新建一个文件,并调入外部函数midiloop.u32的相关扩展函数,loopmidit和stopmidi。
② 加入一个计算机,设置运行窗口的大小,计算图标的内容为:
resizewindow(320,240) ——resizewindow是一个系统函数,设置窗口的大小
stop:=0——stop为自定义变量,用来控制midi。
loopmidi(filelocation^"midi.mid")——程序开始播放midi背景音乐。
③设置对midi音乐的开关控制以及程序的退出。分别建立三个button按钮响应交互,返回类型设置如图4-16所示。
在“暂停”按钮响应交互计算图标里输入代码:
stop:=1
stopmidi()
在“播放”按钮响应交互计算图标里输入代码:
if stop=1 then
loopmidi(filelocation^"midi.mid")
stop:=0
end if
在“退出”按钮响应交互计算图标里输入代码:
stopmidi()——停止midi背景音乐播放。
quit()——退出程序。
④存盘完成。
tmscontrols.u32函数的主要功能有以下几种:
制作步骤介绍如下。
1)下拉菜单和右键快捷菜单的效果图如图4-11和图4-12所示。
图4-11 下拉菜单效果图
图4-12 右键快捷菜单效果图
2)程序的流程图如图4-13所示,其中交互图标中包括条件响应和按钮响应。
图4-13 子菜单和右键快捷菜单流程图
3)引入tmscontrols.u32中的tmssdditem()、tmscreatepopuplist()、tmsdisplaycontrol()三个函数。
4)用鼠标右键快捷菜单的制作,属性设置条件响应为“rightmousedown=true”,即表示当鼠标右键按下时响应。
5)在“rightmousedown=true”交互下的计算图标的内容为:
popuphandle:=tmscreatepopuplist(windowhandle)
——取得windows句柄。
result:=tmsadditem(popuphandle,1,0,"新建")
result:=tmsadditem(popuphandle,1,1,"二级子菜单1")
result:=tmsadditem(popuphandle,1,2,"二级子菜单2")
result:=tmsadditem(popuphandle,1,3,"二级子菜单3")
result:=tmsadditem(popuphandle,1,4,"二级子菜单4")
result:=tmsadditem(popuphandle,2,0,"打开")
result:=tmsadditem(popuphandle,3,0,"保存")
result:=tmsadditem(popuphandle,4,0,"-")
result:=tmsadditem(popuphandle,5,0,"打印")
result:=tmsadditem(popuphandle,5,1,"二级子菜单1")
result:=tmsadditem(popuphandle,5,2,"二级子菜单2")
result:=tmsadditem(popuphandle,5,3,"二级子菜单3")
result:=tmsadditem(popuphandle,5,4,"二级子菜单4")
result:=tmsadditem(popuphandle,6,0,"退出")
以上是设置子菜单的顺序、级数、菜单项的名称。
result:=tmsdisplaycontrol(popuphandle,cursorx,curs
ory,110,100,1)
菜单出现在坐标为(cursorx,cursory)处,既出现在当前光标位置,菜单的尺寸为宽110、高100。
if (result="退出") then quit()
表示当用户选择“退出”菜单后程序将执行“quit(0)”语句。
这里是实现菜单响应的关键。
5)在“主菜单”交互下的计算图标的内容为:
popuphandle:=tmscreatepopuplist(windowhandle)——取得windows句柄
result:=tmsadditem(popuphandle,1,0,"新建")
result:=tmsadditem(popuphandle,1,1,"二级子菜单1")
result:=tmsadditem(popuphandle,1,2,"二级子菜单2")
result:=tmsadditem(popuphandle,1,3,"二级子菜单3")
result:=tmsadditem(popuphandle,1,4,"二级子菜单4")
result:=tmsadditem(popuphandle,2,0,"打开")
result:=tmsadditem(popuphandle,3,0,"保存")
result:=tmsadditem(popuphandle,4,0,"-")
result:=tmsadditem(popuphandle,5,0,"打印")
result:=tmsadditem(popuphandle,5,1,"二级子菜单1")
result:=tmsadditem(popuphandle,5,2,"二级子菜单2")
result:=tmsadditem(popuphandle,5,3,"二级子菜单3")
result:=tmsadditem(popuphandle,5,4,"二级子菜单4")
result:=tmsadditem(popuphandle,6,0,"退出")
以上是设置子菜单的顺序、级数、菜单项的名称。
result:=tmsdisplaycontrol(popuphandle,21,90,110,100,1)
菜单出现在坐标为(21,90)处,菜单的尺寸为宽度110、高度100。
if (result="退出") then quit()
表示当用户选择“退出”菜单后程序将执行“quit(0)”语句。
其语句与“rightmousedown=true”交互下的计算图标的内容相似。
4.1.14 如何在文本响应时自动调用
中文输入法
在authorware中要调用中文输入法,我们必须首先调用winapi.u32中的activatekeyboardlayout ( hkl hkl, uint flags)函数。
1)新建一个文件,取名为“调用输入法.a7p”。
2)在流程线上放一交互图标,取名为“调出输入法”。选中它按【ctrl+=】快捷键在其交互图标上挂一个计算图标,在其中输入“activatekeyboard layout (-536606716, 0)”。作用是调出“智能abc”输入法。
3)在交互图标的右侧放一个群组图标,选择响应类型为“文本响应”,流程图如图4-20所示。
图4-14 调用中文输入法流程图
4)保存并运行程序,可以看到在文本输入响应时,程序会自动调用“智能abc”输入法。
5)activatekeyboardlayout(-536606716, 0)中的-536606716是“智能abc”输入法的句柄值。统计如表4-1所示。
表4-1 句柄值统计
名 称 | 句 柄 值 |
王码拼音输入法5.0版 | -534640636 |
王码拼音输入法5.0版 | -534640636 |
王码五笔输入法4.5版 | -534575100 |
微软拼音输入法2.0版 | -535951356 |
全拼输入法4.0版 | -536803324 |
郑码输入法4.0版 | -536672252 |
智能abc标准输入法5.0版 | -536606716 |
五笔型输入法98版 | -534771708 |
五笔型输入法86版 | -535820284 |
王码五笔画输入法5.0版 | -534706172 |
english(american) | 67699721 |
如你所用的输入法不在其中,可用vb做一个小程序,程序中只放两个控件,一个是按钮,一个是文本框,其他属性都不修改,在代码窗口输入如下内容。
option explicit '声明api读取当前输入法的句柄函数。
private declare function getkeyboardlayout lib
"user32" (byval dwlayout as long) as long
private sub command1_click()
dim hcurkbdlayout as long
hcurkbdlayout = getkeyboardlayout(0)
text1.text = hcurkbdlayout
end sub
运行程序,单击文本框,选中你所需要的输入法,按下“command1”就会在文本框中显示该输入法的句柄值。
新闻热点
疑难解答