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)
第一句的作用是將窗口大小設置成合適大?。ㄒ员尘皥D片的大小為準)。第二句的作用是將窗口移動到屏幕的合適位置。
3)最小化、最大化及關閉功能
在流程線上放置一個交互圖標,命名為“窗口控制”。在其右側放置三個計算圖標,響應類型都設為“按鈕響應”,分別命名為“最小化”、“最大化”、“關閉”。在它們的分支屬性對話框“響應范圍”項中復選“永久”,“分支”項選擇“返回”。如你認為需要,可編輯這三個響應的按鈕樣式,用制作好的圖片代替默認的樣式并調整其位置。
在“最小化”圖標中輸入程序:
showwindowasync(windowhandle, 6)
在“最大化”圖標中輸入程序:
showwindowasync(windowhandle, 3)
這里調用windows api函數showwindowasync實現將窗口最小化、最大化。保存時,系統會彈出對話框,提示選擇此函數的來源,選擇winapi.u32。
authorware 6以前的版本是加載api函數showwindow,現在如還加載它則會出現于aw內部函數showwindow同名而無法加載的情況,從而無法完成“使窗口最小化”等任務?,F在加載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類似。
新聞熱點
疑難解答