Authorware基础教程:authorware7里面地U32和ODBC运用介绍(2)

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

4.1.8  用winapi.u32屏蔽功能键和
隐藏任务栏

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消息,这样就可以在运行程序之前,关闭所有正在运行的程序,从而释放出更多的资源给你的多媒体作品。

4.1.9  用budeky.u32屏蔽功能键

设计程序时,因为某些特殊需要,有时可能需要屏蔽系统的某些功能键,比如【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  屏蔽功能键消息框

4.1.10  如何设置你的演示窗口的位置总在
最前,即不被其他窗口覆盖

在有些时候,我们用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设定都将被忽略。

4.1.11  用altools.u32函数动态改变屏幕
分辨率,让课件实现全屏播放

一个外挂函数——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()--退出

运行程序,这时我们可以看到,在运行初期已经改变了屏幕分辨率,而且是全屏播放。当退出时,又改回到原来的分辨率。


4.1.12  用midiloop.u32函数播放midi
声音文件

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()——退出程序。

④存盘完成。

4.1.13  用tmscontrols.u32制作子菜单和
右键快捷菜单

tmscontrols.u32函数的主要功能有以下几种:

l        制作下拉列表;
l        制作弹出式菜单;
l        调用文件选择对话框;
l        字体下拉列表;
l        调用带预览功能的图形文件打开对话框;
l        调用文件保存对话框。

制作步骤介绍如下。

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”就会在文本框中显示该输入法的句柄值。