首先,對時刻在我身邊的網(wǎng)絡(luò)朋友們和經(jīng)常來信鼓勵我的網(wǎng)友們表示感謝。我會堅持下去,并寫出尊重Flash MX的名字的系列文章。
Flash MX在Macromedia的MX戰(zhàn)略方向的重視使得其開放式的結(jié)構(gòu)可以應(yīng)用于更多的網(wǎng)絡(luò)內(nèi)容和開發(fā)應(yīng)用,今天,我們針對新提升的網(wǎng)絡(luò)數(shù)據(jù)和文本相關(guān)操作進行解析。
TextField對象
新的TextField對象是從Object對象繼承而來,使得在Flash中動態(tài)建立文本的童話變成現(xiàn)實,而這一些你只要從MovieClip.createTextField開始(這條語句想必使用頻率非常的高,所以我把格式寫出來): MovieClip.createTextField(Instance名稱,深度,初始x軸位置,初始y軸位置,初始寬度,初始高度);
通過MovieClip的createTextField方法,你將可以動態(tài)的在程序運行期間建立文本區(qū)并可設(shè)置其屬性和方法:
createTextField("txt",++dpt,80,100,100,200);
txt.wordwrap=true;
var i=30;
while (i--) txt.text+="rice...";
通過這行代碼,我們在程序運行期動態(tài)建立一個Instance名稱為txt的文本區(qū)并置于第1層深度,規(guī)定其初始位置在(80,100),高200寬100;這個“筐”做好以后,我們可以往里面放東西,但是我們在放之前,我們需要規(guī)定它的另一個屬性wordwrap,這個屬性的作用相當(dāng)于規(guī)定了你的筐有沒有封邊,如果初始值為false,那么這個“筐”是失敗的,只可以當(dāng)作“席子”;隨意我們規(guī)定了這個“筐”封邊,并塞入30“斤”大米。試運行下結(jié)果。(如圖1,阿,看起來到真像大米筐……)
(圖1)
成功的*步邁開了之后,讓我們對上面丑陋的大米筐裝修一下。
createEmptyMovieClip("mc",++dpt);
with (mc) {
createTextField("txt",++dpt,80,100,100,100);
txt.putRice=function(rice){
if(rice){
txt.text+=".";
arguments.callee(--rice)}return;
};
txt.border=1;
txt.multiline=1;
txt.background=1;
txt.wordWrap=1;
txt.putRice(254);
txt.putRice(36);
}
由于TextField是MovieClip的方法,所以我們出于學(xué)習(xí)而產(chǎn)生一個空的MovieClip來裝這個文本區(qū);程序運行后動態(tài)產(chǎn)生一個文本區(qū),并有一個邊框和白色的背景,*用自定義方法putRice裝載“大米”,由于Flash MX的遞歸調(diào)用最多只可以支持256層(0-255),所以我們還不能一下子裝載300斤,只能分兩次裝(254+36),*形成的結(jié)果如下:(圖2)
(圖2,看起來好整齊的大米,其實多余的部分已經(jīng)漏到地低下去了……)
嗯……這就結(jié)束了?我這個人Bad Mind,總想搞搞惡作劇,我讓我做的textField米筐進行物理性破壞測試,讓其高度(或?qū)挘┬∮谧煮w的最小高度后……發(fā)現(xiàn)Bug一個,textField失去了原有的位置和高、寬屬性被擠到了屏幕的邊緣,最搞笑的就是這個測試結(jié)果……讓我們加入如下代碼并觀察(圖3) createTextField("txt",++dpt,80,100,100,3);
trace(txt._x);
trace(txt._y);
trace(txt._width);
trace(txt._height);
trace(txt.textwidth);
trace(txt.textheight);
txt.wordwrap=1;
var i=30;
while (i--) txt.text+="rice...";
(圖3,倒……y可是100耶,寬也是100耶,沒辦法,把我的筐撐壞了……米撒了一地)
TextFiled的簡單應(yīng)用
剛做了個米筐例子,看起來文本區(qū)操作還有些用途,可是僅僅這樣可不夠……Flash MX中新的文本區(qū)還是有很大的用途的。
例如我們做一個在線用戶輸入姓名和密碼的簡單應(yīng)用,輸入如下代碼:
createTextField("txtUser",++dpt,80,100,100,20);
createTextField("txtPass",++dpt,80,150,100,20);
txtUser.type=txtPass.type="input";
txtUser.border=txtUser.background=1;
txtUser.bordercolor=txtPass.bordercolor=0x776655;
txtPass.border=txtPass.background=1;
txtUser.autosize=txtPass.autosize="center";
txtUser.text=txtPass.text+=" ";
txtPass.password = 1;
txtUser.tabIndex=1;
txtPass.tabIndex=2;
txtUser.tabEnabled=txtPass.tabEnabled=1;
txtUser.tabChildren=txtPass;
啊……看起來亂七八糟,但是卻十分好理解,F(xiàn)lash MX中允許用戶自定義TextField的很多屬性,而對其操作更是考慮周到;我們首先定義兩個類型為輸入文本的TextField txtUser和txtPass,定了一基本的背景邊框等樣式屬性后,我們用autosize屬性讓文本自動縮放,這樣在用戶輸入的的時候十分的動感的,而第2個文本txtPass需要用戶的內(nèi)容為隱藏,所以把它的password屬性設(shè)為true;接著給這兩個文本初始化字符,讓他們看起來不那么狹窄;*用用到的是tabIndex,它是一個存儲當(dāng)前需要table鍵換焦點文本的數(shù)組,通過正整數(shù)來區(qū)分每個要切換的文本,而你如果你要是用到這個功能,文本區(qū)的tabEnabled必須是true,否則無效,而tabChildren屬性是新加入的屬性,我們可以設(shè)置/獲取其內(nèi)部的子文本對象。測試,你可以看到一個用戶輸入界面,這一切的制作過程是不需要你動任何鼠標(biāo)操作的。(如圖4)
(圖4,哈……我的密碼長度恐怖吧)
但是,這個tabIndex和selection有直接的沖突。當(dāng)你設(shè)置了tabEnabled和tabIndex后,如果要使用selection.setFocus(txtUser);這樣的看上去什么錯誤都沒有的代碼,將會產(chǎn)生一個內(nèi)部優(yōu)先級錯誤,將無法有效使用tab鍵來切換文本。
寫到這里,通過很多例子我們再次證明了在Flash MX中可以完全脫離鼠標(biāo)并能完成很多同樣甚至更酷的效果,而此時,F(xiàn)lash MX的陽光射線才不過是上午10點半,更多的功能還等待我們?nèi)ヌ剿鳌?/P>
源文件: