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”就會在文本框中顯示該輸入法的句柄值。
|
新聞熱點
疑難解答