1)新建一個(gè)文件,文件名為sample.a7p。
2)放置一計(jì)算圖標(biāo)于流程線上。
3)按【ctrl+shift+f】快捷鍵,打開“函數(shù)”窗口。
4)選擇sample.a7p,單擊【加載】鈕,打開winapi.us2文件,并引入其中的systemparameters info()、findwindow()和setwindowpos()三個(gè)函數(shù)。
5)雙擊計(jì)算圖標(biāo),在里面輸入如下程序語句:
systemparametersinfo(97,1,1,1)——屏蔽鍵盤所有功能鍵。
wnd:=findwindow(″shell_traywnd″,″″)——捕捉任務(wù)欄窗口。
setwindowpos(wnd,0,0,0,0,0,128)——隱藏任務(wù)欄窗口。
6)在程序的退出處放置一計(jì)算圖標(biāo),雙擊計(jì)算圖標(biāo),在里面寫上:
l systemparametersinfo(97,0,1,1)——恢復(fù)鍵盤所有功能鍵。
l wnd:=findwindow(″shell_traywnd″,″″)——捕捉任務(wù)欄窗口。
l setwindowpos(wnd,0,0,0,0,0,64)——顯示任務(wù)欄窗口。
我們還可以在運(yùn)行程序前,通過windows api函數(shù)捕捉所有的窗口,獲得窗口的句柄,然后再向它們依次發(fā)送mw_quit消息,這樣就可以在運(yùn)行程序之前,關(guān)閉所有正在運(yùn)行的程序,從而釋放出更多的資源給你的多媒體作品。
設(shè)計(jì)程序時(shí),因?yàn)槟承┨厥庑枰袝r(shí)可能需要屏蔽系統(tǒng)的某些功能鍵,比如【alt+tab】、【alt+f4】、【ctrl+q】等。本例中就使用budeky.u32中的函數(shù)來屏蔽某些功能鍵,所使用的函數(shù)有:
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()函數(shù)屏蔽的功能鍵。
4)restoreswitching()
格式:restoreswitching()
解除restoreswitching()函數(shù)屏蔽的功能鍵。
具體步驟如下。
1)新建一個(gè)文件,保存為“屏蔽功能鍵.a7p”,文件流程如圖4-7所示。
圖4-7 屏蔽功能鍵流程圖
在“初始化”圖標(biāo)中輸入以下內(nèi)容。
resizewindow(300, 200) --設(shè)置窗口大小
setwindowtext( windowhandle, "屏蔽功能鍵")
設(shè)置演示窗口標(biāo)題欄的名稱為“屏蔽功能鍵”
2)打開交互圖標(biāo),輸入圖4-8所示的內(nèi)容,調(diào)整好按鈕的相對(duì)位置。
圖4-8 交互圖標(biāo)中的顯示對(duì)象
3)在“屏蔽功能鍵”按鈕交互分支下的計(jì)算圖標(biāo)中輸入以下內(nèi)容:
disableswitching()
hint:="/"alt+tab/"、/"alt+esc/"、/"ctrl+esc/"、
/"ctrl+alt+delete/"和/"窗口鍵/"已被屏蔽"
systemmessagebox(windowhandle,hint , "屏蔽功能
鍵", 48) -- 1=ok
屏蔽功能鍵,然后顯示提示信息。
技巧:因字符串需要加雙引號(hào),而在提示信息中由于也有雙引號(hào),所以必須在內(nèi)部每個(gè)雙引號(hào)前加轉(zhuǎn)意字符“/”。第一個(gè)和最后一個(gè)雙引號(hào)當(dāng)然是不能加的。
4)在“屏蔽退出鍵”按鈕交互分支下的計(jì)算圖標(biāo)中輸入以下內(nèi)容:
disablequit( windowhandle )
hint:="/"alt+f4/"、/"ctrl+q/"和/" ctrl+./" 已被屏蔽"
systemmessagebox(windowhandle, hint, , "屏蔽退出
鍵",48) -- 1=ok
屏蔽退出鍵,然后顯示提示信息。
5)在“解除屏蔽”按鈕交互分支下的計(jì)算圖標(biāo)中輸入以下內(nèi)容:
--解除各鍵的屏蔽!
restorequit()
restoreswitching()
hint:="各鍵已經(jīng)解除屏蔽!"
systemmessagebox(windowhandle,hint , "解除屏蔽",
48) -- 1=ok
解除各鍵的屏蔽,然后顯示提示信息。
6)在“退出” 按鈕交互分支下的計(jì)算圖標(biāo)中輸入以下內(nèi)容:
--退出程序前解除屏蔽
restoreswitching()
restorequit()
quit()
防止用戶未單擊“解除屏蔽”按鈕解除對(duì)各鍵的屏蔽,在退出程序前執(zhí)行解除屏蔽函數(shù)保證程序退出后各鍵均解除屏蔽。
7)運(yùn)行程序,標(biāo)題欄發(fā)生了變化。單擊“屏蔽功能鍵”按鈕出現(xiàn)如圖4-9所示的信息。
圖4-9 屏蔽功能鍵消息框
在有些時(shí)候,我們用authorware做的程序希望演示窗口的位置總在最前,即不要被其他窗口覆蓋。比如我們在程序中調(diào)用了word,在進(jìn)行word編輯的同時(shí)authorware的主程序的小窗口仍然在前。我們就要用到winapi.us2中的setwindowpos()函數(shù)。
setwindowpos:這個(gè)函數(shù)能為窗口指定一個(gè)新位置和狀態(tài)。它也可改變窗口在內(nèi)部窗口列表中的位置。
函數(shù)格式:setwindowpos( hwnd hwnd, hwnd hwndinsertafter , int x, int y, int cx, int cy, uint uflags)
其中的參數(shù)意義如下。
hwnd:欲設(shè)置的窗口的句柄。
hwndinsertafter:窗口句柄。在窗口列表中,欲設(shè)置的窗口hwnd會(huì)置于這個(gè)窗口句柄的后面。這個(gè)參數(shù)也可能取下面的值:
1——將窗口置于窗口列表底部。
0——將窗口置于z序列的頂部;z序列代表在分級(jí)結(jié)構(gòu)中,窗口針對(duì)一個(gè)給定級(jí)別的窗口顯示的順序。
-1——將窗口置于列表頂部,并位于任何最頂部窗口的前面(將一個(gè)窗口置頂,不會(huì)被任何窗口遮擋)。
-2——將窗口置于列表頂部,并位于任何最頂部窗口的后面。
x:窗口新的x坐標(biāo)。
y:窗口新的y坐標(biāo)。
cx:新的窗口寬度。
cy:新的窗口高度。
wflags取值如下:
1——保持當(dāng)前大小(cx和cy會(huì)被忽略)。
2——保持當(dāng)前位置(x和y設(shè)定將被忽略)。
4——保持窗口在列表的當(dāng)前位置(hwndinsert after將被忽略)。
8——窗口不自動(dòng)重畫。
10——不激活窗口。
32——圍繞窗口畫一個(gè)框(強(qiáng)迫一條wm_ncc alcsize消息進(jìn)入窗口,即使窗口的大小沒有改變)。
64——顯示窗口。
128——隱藏窗口。
例如:setwindowpos(windowhandle,-1, 0, 0, 0, 0, 3),取3時(shí)cx、cy、x和y設(shè)定都將被忽略。
一個(gè)外掛函數(shù)——altools.u32,這里面有改變分辨率和隱藏任務(wù)欄的函數(shù)。通過程序來改變分辨率和隱藏任務(wù)欄而實(shí)施全屏演示。不過還要在程序退出的時(shí)候改回原來的分辨率。下面我們就來看一看具體實(shí)現(xiàn)的辦法。
一、加載函數(shù)
打開authorware,保存文件為“改變屏幕分辨率.a7p”。按【ctrl+shift+f】快捷鍵打開函數(shù)框,在“分類”里面選擇“改變屏幕分辨率.a7p”,單擊【加載】按鈕,選擇altools.u32,加載里面的“alchangeres”函數(shù),用同樣方法,再加載“alhidetaskbar”、“alshowtaskbar”兩個(gè)函數(shù)。先說明一下這三個(gè)函數(shù)的作用:
1)alchangeres:改變屏幕分辨率的函數(shù),基本格式為“alchangeres(width,height,bitpp)”。
2)alhidetaskbar:隱藏任務(wù)欄。
3)alshowtaskbar:顯示任務(wù)欄。
二、編寫程序
1)拖動(dòng)一個(gè)計(jì)算圖標(biāo)到流程線上,命名為“初始化”,打開并輸入以下語句:
userscreenwidth=screenwidth--保存用戶監(jiān)視器的
寬度
userscreenheight=screenheight--保存用戶監(jiān)視器的
高度
userscreendepth=screendepth--保存用戶監(jiān)視器的顏
色深度
alhidetaskbar()--隱藏任務(wù)欄
alchangeres(640,480,32)--改變屏幕分辨率
resizewindow(640,480)--調(diào)整窗口大小
2)將整個(gè)課件作為一個(gè)整體放在計(jì)算圖標(biāo)“初始化”下。現(xiàn)在我們用一個(gè)等待圖標(biāo)來代替。
3)再拖動(dòng)一個(gè)計(jì)算圖標(biāo)到流程線上,命名為“退出”,打開并后輸入以下語句:
alshowtaskbar()--顯示任務(wù)欄
alchangeres(userscreenwidth,userscreenheight,user
screendepth)--恢復(fù)使用者原來的分辨率
quit()--退出
運(yùn)行程序,這時(shí)我們可以看到,在運(yùn)行初期已經(jīng)改變了屏幕分辨率,而且是全屏播放。當(dāng)退出時(shí),又改回到原來的分辨率。
authorware 7.0支持的聲音文件格式仍然有一些限制,只有mp3、aiff、pcm、wave、vox、swa擴(kuò)展后綴名的文件才可直接導(dǎo)入到authorware程序中,但還是不支持midi文件的直接使用。我們知道m(xù)idi文件使用的是數(shù)字樂器,換句話說,midi文件并沒有真正地記錄了音頻信息,而是像樂譜一樣記錄了各種樂器的和聲和音高節(jié)奏,具體的演奏任務(wù)由聲卡所帶的數(shù)字樂器完成。midi音樂有著體積信息小的特點(diǎn),而且不會(huì)與wav聲音通道沖突,因此,在進(jìn)行多媒體開發(fā)時(shí)經(jīng)常用來做背景音樂,但authorware并不直接提供對(duì)midi聲音文件格式的支持,怎么辦呢?別急,authorware提供了外部函數(shù)的接口可以解決這個(gè)問題:利用第三方的ucd外部函數(shù),我們可以實(shí)現(xiàn)對(duì)midi聲音文件的支持。下面我們就一起來制作兩個(gè)關(guān)于midi背景音樂循環(huán)播放的范例吧!
1)循環(huán)播放midi背景音樂
在這里我們要實(shí)現(xiàn)的目的是讓midi背景音樂循環(huán)的播放,具體思路是通過導(dǎo)入authorware的外部函數(shù)midiloop.u32相關(guān)的兩個(gè)擴(kuò)展函數(shù),實(shí)現(xiàn)對(duì)midi背景音樂的循環(huán)播放。
在介紹范例前,我們簡單介紹一下midiloop.u32的相關(guān)擴(kuò)展函數(shù):
result:=loopmidi(file)
這個(gè)函數(shù)的功能是對(duì)程序指定的midi音樂進(jìn)行循環(huán)播放,直到用戶中止為止。其中,參數(shù)file就是用戶自行指定的外部midi文件,當(dāng)然,這里指定的midi聲音文件并沒有導(dǎo)入程序內(nèi)部,只是存在一種相當(dāng)于鏈接的關(guān)系。
result:=stopmidi()
這個(gè)函數(shù)的功能是停止當(dāng)前正在播放的midi音樂,參數(shù)為void型。
2)程序的流程圖如圖4-10所示。
圖4-10 播放midi音樂流程圖
3)操作步驟介紹如下。
①新建一個(gè)文件,并調(diào)入外部函數(shù)midiloop.u32的相關(guān)擴(kuò)展函數(shù),loopmidit和stopmidi。
② 加入一個(gè)計(jì)算機(jī),設(shè)置運(yùn)行窗口的大小,計(jì)算圖標(biāo)的內(nèi)容為:
resizewindow(320,240) ——resizewindow是一個(gè)系統(tǒng)函數(shù),設(shè)置窗口的大小
stop:=0——stop為自定義變量,用來控制midi。
loopmidi(filelocation^"midi.mid")——程序開始播放midi背景音樂。
③設(shè)置對(duì)midi音樂的開關(guān)控制以及程序的退出。分別建立三個(gè)button按鈕響應(yīng)交互,返回類型設(shè)置如圖4-16所示。
在“暫停”按鈕響應(yīng)交互計(jì)算圖標(biāo)里輸入代碼:
stop:=1
stopmidi()
在“播放”按鈕響應(yīng)交互計(jì)算圖標(biāo)里輸入代碼:
if stop=1 then
loopmidi(filelocation^"midi.mid")
stop:=0
end if
在“退出”按鈕響應(yīng)交互計(jì)算圖標(biāo)里輸入代碼:
stopmidi()——停止midi背景音樂播放。
quit()——退出程序。
④存盤完成。
tmscontrols.u32函數(shù)的主要功能有以下幾種:
制作步驟介紹如下。
1)下拉菜單和右鍵快捷菜單的效果圖如圖4-11和圖4-12所示。
圖4-11 下拉菜單效果圖
圖4-12 右鍵快捷菜單效果圖
2)程序的流程圖如圖4-13所示,其中交互圖標(biāo)中包括條件響應(yīng)和按鈕響應(yīng)。
圖4-13 子菜單和右鍵快捷菜單流程圖
3)引入tmscontrols.u32中的tmssdditem()、tmscreatepopuplist()、tmsdisplaycontrol()三個(gè)函數(shù)。
4)用鼠標(biāo)右鍵快捷菜單的制作,屬性設(shè)置條件響應(yīng)為“rightmousedown=true”,即表示當(dāng)鼠標(biāo)右鍵按下時(shí)響應(yīng)。
5)在“rightmousedown=true”交互下的計(jì)算圖標(biāo)的內(nèi)容為:
popuphandle:=tmscreatepopuplist(windowhandle)
——取得windows句柄。
result:=tmsadditem(popuphandle,1,0,"新建")
result:=tmsadditem(popuphandle,1,1,"二級(jí)子菜單1")
result:=tmsadditem(popuphandle,1,2,"二級(jí)子菜單2")
result:=tmsadditem(popuphandle,1,3,"二級(jí)子菜單3")
result:=tmsadditem(popuphandle,1,4,"二級(jí)子菜單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,"二級(jí)子菜單1")
result:=tmsadditem(popuphandle,5,2,"二級(jí)子菜單2")
result:=tmsadditem(popuphandle,5,3,"二級(jí)子菜單3")
result:=tmsadditem(popuphandle,5,4,"二級(jí)子菜單4")
result:=tmsadditem(popuphandle,6,0,"退出")
以上是設(shè)置子菜單的順序、級(jí)數(shù)、菜單項(xiàng)的名稱。
result:=tmsdisplaycontrol(popuphandle,cursorx,curs
ory,110,100,1)
菜單出現(xiàn)在坐標(biāo)為(cursorx,cursory)處,既出現(xiàn)在當(dāng)前光標(biāo)位置,菜單的尺寸為寬110、高100。
if (result="退出") then quit()
表示當(dāng)用戶選擇“退出”菜單后程序?qū)?zhí)行“quit(0)”語句。
這里是實(shí)現(xiàn)菜單響應(yīng)的關(guān)鍵。
5)在“主菜單”交互下的計(jì)算圖標(biāo)的內(nèi)容為:
popuphandle:=tmscreatepopuplist(windowhandle)——取得windows句柄
result:=tmsadditem(popuphandle,1,0,"新建")
result:=tmsadditem(popuphandle,1,1,"二級(jí)子菜單1")
result:=tmsadditem(popuphandle,1,2,"二級(jí)子菜單2")
result:=tmsadditem(popuphandle,1,3,"二級(jí)子菜單3")
result:=tmsadditem(popuphandle,1,4,"二級(jí)子菜單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,"二級(jí)子菜單1")
result:=tmsadditem(popuphandle,5,2,"二級(jí)子菜單2")
result:=tmsadditem(popuphandle,5,3,"二級(jí)子菜單3")
result:=tmsadditem(popuphandle,5,4,"二級(jí)子菜單4")
result:=tmsadditem(popuphandle,6,0,"退出")
以上是設(shè)置子菜單的順序、級(jí)數(shù)、菜單項(xiàng)的名稱。
result:=tmsdisplaycontrol(popuphandle,21,90,110,100,1)
菜單出現(xiàn)在坐標(biāo)為(21,90)處,菜單的尺寸為寬度110、高度100。
if (result="退出") then quit()
表示當(dāng)用戶選擇“退出”菜單后程序?qū)?zhí)行“quit(0)”語句。
其語句與“rightmousedown=true”交互下的計(jì)算圖標(biāo)的內(nèi)容相似。
4.1.14 如何在文本響應(yīng)時(shí)自動(dòng)調(diào)用
中文輸入法
在authorware中要調(diào)用中文輸入法,我們必須首先調(diào)用winapi.u32中的activatekeyboardlayout ( hkl hkl, uint flags)函數(shù)。
1)新建一個(gè)文件,取名為“調(diào)用輸入法.a7p”。
2)在流程線上放一交互圖標(biāo),取名為“調(diào)出輸入法”。選中它按【ctrl+=】快捷鍵在其交互圖標(biāo)上掛一個(gè)計(jì)算圖標(biāo),在其中輸入“activatekeyboard layout (-536606716, 0)”。作用是調(diào)出“智能abc”輸入法。
3)在交互圖標(biāo)的右側(cè)放一個(gè)群組圖標(biāo),選擇響應(yīng)類型為“文本響應(yīng)”,流程圖如圖4-20所示。
圖4-14 調(diào)用中文輸入法流程圖
4)保存并運(yùn)行程序,可以看到在文本輸入響應(yīng)時(shí),程序會(huì)自動(dòng)調(diào)用“智能abc”輸入法。
5)activatekeyboardlayout(-536606716, 0)中的-536606716是“智能abc”輸入法的句柄值。統(tǒng)計(jì)如表4-1所示。
表4-1 句柄值統(tǒng)計(jì)
名 稱 | 句 柄 值 |
王碼拼音輸入法5.0版 | -534640636 |
王碼拼音輸入法5.0版 | -534640636 |
王碼五筆輸入法4.5版 | -534575100 |
微軟拼音輸入法2.0版 | -535951356 |
全拼輸入法4.0版 | -536803324 |
鄭碼輸入法4.0版 | -536672252 |
智能abc標(biāo)準(zhǔn)輸入法5.0版 | -536606716 |
五筆型輸入法98版 | -534771708 |
五筆型輸入法86版 | -535820284 |
王碼五筆畫輸入法5.0版 | -534706172 |
english(american) | 67699721 |
如你所用的輸入法不在其中,可用vb做一個(gè)小程序,程序中只放兩個(gè)控件,一個(gè)是按鈕,一個(gè)是文本框,其他屬性都不修改,在代碼窗口輸入如下內(nèi)容。
option explicit '聲明api讀取當(dāng)前輸入法的句柄函數(shù)。
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
運(yùn)行程序,單擊文本框,選中你所需要的輸入法,按下“command1”就會(huì)在文本框中顯示該輸入法的句柄值。
新聞熱點(diǎn)
疑難解答