王德銘
摘要:在注冊(cè)或登錄時(shí),一般需要用戶填寫多條信息,但用戶習(xí)慣所有信息一次性填寫完成后集中提交。要實(shí)現(xiàn)這一交互,直接用Authorware是不能實(shí)現(xiàn)的,要想實(shí)現(xiàn)這一操作必須用到變量、函數(shù)等相關(guān)知識(shí),需要解決一些難點(diǎn)問題。
關(guān)鍵詞: Authorware;多信息;一次性提交;函數(shù);變量
中圖分類號(hào):TP37 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)10-0086-02
筆者在網(wǎng)上經(jīng)常碰到,尤其是在需要注冊(cè)或登錄時(shí),往往有好多信息需要用戶填寫,而且人們填寫時(shí)的習(xí)慣,多是在填完了所有的項(xiàng)目后在集中提交。
同樣,在很多的自主學(xué)習(xí)或測(cè)試課件中,也有這種多信息需要輸入的情況,因?yàn)槌绦蛐枰涗浕蚋檶W(xué)習(xí)過程。這種交互式的記錄信息在Authorware中必須用到“文本輸入響應(yīng)”。這初看起來好象很簡單,可是用過Authorware的同志都知道,在Authorware中,一個(gè)文本輸入交互同時(shí)只能實(shí)現(xiàn)一次輸入,而且在寫入文本后要按壓回車鍵才能響應(yīng)。所以,想利用Authorware實(shí)現(xiàn)多信息輸入窗口時(shí),必須是有一個(gè)輸入項(xiàng)就要建一個(gè)文本輸入交互。正因?yàn)槿绱耍绻胱龅皆谟脩粢淮涡蕴顚懲晁械男畔⒑?,一次性集中提交,并且在沒有提交前,要能讓用戶重新修改信息等等要求時(shí),就需要解決許多的難題。
在講解前,筆者首先把“多信息輸入窗口一次性提交”的具體目標(biāo)羅列如下,以清楚我們需要解決那些問題。為講解清楚,方便理解,這里我們用“兩個(gè)需要輸入信息”的情況分析本課題。再多的輸入要求,其制作思路是相通的。讀者可以嘗試練習(xí)三個(gè)以上的情況。
1)兩個(gè)需要輸入的信息是:“學(xué)習(xí)者姓名”(字符串)和“學(xué)習(xí)序號(hào)”(數(shù)字)。
2)兩個(gè)信息必須全部需要填寫,不準(zhǔn)有空項(xiàng);如果有空項(xiàng),無法提交。
3)輸入的過程中,不規(guī)定填寫的先后次序,并保證在沒有提交前可以隨便修改。輸入過的內(nèi)容要保留在文本框中并顯示出來。
4)用戶在確認(rèn)無誤時(shí)單擊回車鍵后,就可以提交。
5)提交上來的信息要能被程序保留起來,以便需要時(shí)可調(diào)用。
結(jié)果樣式如圖1所示。
下面,我結(jié)合制作過程講解具體實(shí)現(xiàn)方法。
1)首先創(chuàng)建一個(gè)文檔,保存并命名如“登錄”。接著拖入一個(gè)計(jì)算圖標(biāo)用來定義演示窗口的大小。具體參數(shù)讀者自己選擇。
2)加入一個(gè)顯示圖標(biāo),用以標(biāo)志登錄畫面中的輸入欄位置,及要求輸入內(nèi)容的提示文字。參看圖1樣式,也可以用PS做個(gè)圖片,再把圖片導(dǎo)入到顯示圖標(biāo)里。
3)建立第一個(gè)“文本輸入” 交互(命名為“輸入xm”),在其下的群組圖標(biāo)命名為“*”(沒有引號(hào),這是通配符,表明輸入任意內(nèi)容都可響應(yīng))。再在其群組圖標(biāo)上加一裝飾(也可在群組圖標(biāo)里放一計(jì)算圖標(biāo)),雙擊打開,輸入pintxm = EntryText@"輸入xm" 。
其中EntryText 為系統(tǒng)變量,它記錄的是用戶輸入的內(nèi)容(字符串);pintxm 為自自定義變量,用來保存用戶當(dāng)下剛輸入的內(nèi)容,并可讓程序在其后需要時(shí)調(diào)用。(由于窗口中要輸入的文本內(nèi)容有兩項(xiàng),為了準(zhǔn)確記錄兩個(gè)輸入的不同內(nèi)容,所以要用@"輸入xm"來字義EntryText記錄的對(duì)象)。結(jié)果如圖2所示。
4)因?yàn)檫@里有兩個(gè)需要輸入的對(duì)象,顯然必須建立兩個(gè)“文本輸入響應(yīng)”。復(fù)制剛才的文本輸入交互,粘貼在流程線的下方,調(diào)整好輸入文本框的位置。在“裝飾”的計(jì)算中輸入pintsh:=NumEntry@"輸入sh"。NumEntry也是系統(tǒng)變量(當(dāng)然,也可用EntryText變量。由于這里是用來記錄“序號(hào)”的,序號(hào)量是數(shù)字量,所以用NumEntry 更為合理)。Pintsh 為自定義變量。
同時(shí),為確保原變量pintxm 與pintsh開始輸入前為“空”,所以在交互前加入了“初始化變量”的計(jì)算圖標(biāo)。輸入的內(nèi)容如圖中所示。最后的程序結(jié)果如圖3所示。
5)在Authorware中一個(gè)文本輸入交互同時(shí)只能實(shí)現(xiàn)一次輸入,所以現(xiàn)在的程序不能實(shí)現(xiàn)題意中的效果(只有所有輸入欄全部輸入內(nèi)容,且在沒有確認(rèn)“提交”前還可以隨時(shí)修改輸入的內(nèi)容)。為此必須再建立一個(gè)“控制交互”,以實(shí)現(xiàn)所要達(dá)到的控制效果。
“控制交互”為兩個(gè)“熱區(qū)交互”方式,并命名如“xm”和“sh”。其“熱區(qū)的范圍”分別對(duì)應(yīng)兩個(gè)文本框的區(qū)域。建立兩個(gè)熱區(qū)的目的:當(dāng)用戶在對(duì)應(yīng)的熱區(qū)域內(nèi)單擊時(shí),就可以輸入對(duì)應(yīng)的內(nèi)容。
在熱區(qū)域?qū)傩詫?duì)話框中,設(shè)交互“范圍”為“永久”(確保用戶可再次回來修改),“擦除”選項(xiàng)設(shè)為“不擦除”。但是,僅如此設(shè)置還不能達(dá)到當(dāng)用戶單擊要重輸入的文本框時(shí),并不能保證已輸過的內(nèi)容顯示(反選顯示模式)。為此,在文本輸入交互前添加一計(jì)算圖標(biāo)“顯示上次輸入內(nèi)容”。在xm支路的計(jì)算圖標(biāo)中輸入PresetEntry:=pintxm(sh支路中輸入PresetEntry:=pintsh)。PresetEntry 為系統(tǒng)變量,當(dāng)用戶給該變量賦予了字符串后,則Authorware在執(zhí)行下一個(gè)響應(yīng)圖標(biāo)前顯示該變量的內(nèi)容。結(jié)果如圖4所示。
程序到這里,可以實(shí)現(xiàn)“單擊對(duì)應(yīng)區(qū)域”輸入內(nèi)容了,而且還可以回頭再單擊以實(shí)現(xiàn)重復(fù)修改,或輸入新內(nèi)容。同時(shí)原來的內(nèi)容以反顯的方式存在,不會(huì)擦掉。
下面要做一個(gè)按鈕交互,以實(shí)現(xiàn):當(dāng)用戶輸入了所有需要輸入的窗口內(nèi)容后(否則按鈕為失效狀態(tài)),才能單擊“提交”按鈕,提交信息。
6)在“交互控制”交互的右邊拖入一個(gè)群組圖標(biāo),并設(shè)為按鈕交互。在按鈕交互的屬性窗口中設(shè)置“激活條件”欄內(nèi)輸入“tjan=1”,tjan為自定義變量,用其變量的值決定“提交”按鈕激活的條件.。其目的是為了達(dá)到:在滿足了提交條件(應(yīng)該輸入的信息內(nèi)容都有“值”,不為空)的情況下,按鈕有效,否則不讓提交。
為此,在交互圖標(biāo)上加一“裝飾”,用一條件語句來作判斷(語句內(nèi)容參看圖5中)。語句中用了一個(gè)“或”判斷:兩個(gè)“文本輸入”的值只要有一個(gè)為空,則自定義變量tjan=0(按鈕不激活),否則tjan=1(提交按鈕激活)可以提交。
其后,在“初始化變量”中再添加一條給自定義變量tjan賦初始值為0的賦值語句:tjan=0,即開始讓按鈕失效。最后的程序如圖5所示。
至此,程序基本完成了。但你運(yùn)行后會(huì)發(fā)現(xiàn)一個(gè)缺陷:每次輸入一項(xiàng)信息后,必須單擊回車一下,否則提交按鈕不能被激活,這不滿足一次性提交的要求(全部內(nèi)容輸入全后,單擊一次回車鍵即可提交)。
造成這個(gè)情況的原因,是因?yàn)樵贏uthorware中,文本輸入響應(yīng)在輸入內(nèi)容后必須單擊回車,程序才能判斷你輸入的內(nèi)容是否合法(即是否應(yīng)該被響應(yīng))。在程序中我們可以看到(如圖6所示,以xm支路為例),如果輸入內(nèi)容不按回車鍵,則支路不響應(yīng),從而變量pintxm得不到新的值(始終等于程序開始所賦的初值“空”)。這樣IF條件總不能滿足,tjan總為0。
另外,正如前述,人們?cè)诘卿洉r(shí)的習(xí)慣,總愛在所有要輸入的內(nèi)容在窗口內(nèi)輸入完成后,最后一次性提交。怎樣才能做到這一點(diǎn)呢?這里首先要明白一點(diǎn):在輸入響應(yīng)的文本框中只要你輸入了內(nèi)容,即便不單擊回車確認(rèn),而系統(tǒng)變量EntryText(NumEntry)已經(jīng)有值了(記錄下來了用戶在交互中輸入的字符串),只是我們還沒有把這個(gè)值賦予給自定義變量pintxm和pintsh而已因此。現(xiàn)在要解決的問題是:在任一輸入窗口內(nèi)按壓回車鍵后都能給pintxm和pintsh賦值。
首先可能想到的是:在每個(gè)輸入交互下的 “裝飾”計(jì)算圖標(biāo)中,不光為本交互的記錄變量賦值,
而是為所有的記錄輸入內(nèi)容的變量賦值,從而達(dá)到一次性賦值的目的。結(jié)果如圖7所示。這樣是能實(shí)現(xiàn)了,然而這個(gè)例子中只有兩個(gè)輸入項(xiàng),這樣程序并不顯得復(fù)雜??墒牵绻休^多的輸入,那么依此法我們就要做較多的重復(fù)性工作,并且程序也顯復(fù)雜了。
既然需要在每個(gè)支路下都添加了相同的賦值語句,那么就可以把它放在一個(gè)公共的支路上同時(shí)賦值。所以,可以把所有的賦值語句:pintsh:=NumEntry@"輸入sh"和pintxm:=EntryText@"輸入xm"在原支路中刪掉,復(fù)制到“交互控制”的交互圖標(biāo)的“裝飾”里。完成后的程序如圖8所示。最終的運(yùn)行效果如圖9所示。完成了我們要實(shí)現(xiàn)的目標(biāo)任務(wù)。