我們天的努力現(xiàn)在成了熱身訓(xùn)練,從今天此時(shí)起,我們才真正用到傳說中的FlashMX,而今后的日子里,我想它會越來越精彩。拿到了Flash MX的正式版以后(47377KB),其實(shí)最主要的感覺就是Action面板的快捷鍵換掉了,當(dāng)我習(xí)慣性按下F2的時(shí)候,結(jié)果出現(xiàn)了Output面板,當(dāng)然我們可以從Window菜單找回Action面板的位置(F9,好像不太方便)。
關(guān)于Flash MX的文本區(qū)的應(yīng)用昨天我們已經(jīng)開始了*次的親密接觸,今天我們來深入了解一些文本區(qū)的屬性和方法,并通過TextFormat對象來裝修文本的樣式。
在昨天的大米試驗(yàn)中,雖然經(jīng)測試還是有一些矛盾存在,不過這個(gè)方向是對的,我們繼續(xù)給它添磚加瓦:
// make box
Movieclip.prototype.makeBox = function(x, y, l) {
this.lineto(x, y+l);
this.lineto(x+l, y+l);
this.lineto(x+l, y);
this.lineto(x, y);
}; // prepare scroll template
createEmptyMovieClip("scrollUp",2);
with (scrollUp) {
lineStyle(1,0x999999,50);
moveTo(550,200);
beginFill(0x345678,20);
makeBox(550,200,30);
endfill();
} // make scroll
duplicateMovieClip(scrollUp, "scrolldown", 3);
scrollUp._y-=60;
// handler method
scrollUp.onPress=function(){txt.scroll--};
scrollDown.onPress=function(){txt.scroll++};
// prepare text
createTextField("txt",1,300,10,100,200);
with (txt) {
type="input";
textcolor=0x333333;
variable="tempcache";
border=wordwrap=1;
restrict="^demons";
} // custom method
txt.onSetFocus=function(){
trace("Ready for loading rice");
txt.text=""
};
txt.onkillFocus=function(){
trace("Gocha...");
txt.putRice(200,"::::~")
};
txt.putRice = function (count,food) {
if (count) {
txt.text +=food;
arguments.callee(--count,food);
}
return;
}; // start
txt.putRice(200,".");
txt.putRice(200,".");
txt.putRice(200,".");
阿,有沒搞錯(cuò)?這么長?暈阿。也許有的人會這樣說……但是這確實(shí)是不可分解的一個(gè)整體,我們只能慢慢坐下來分析,其實(shí)我用到的一些部分代碼基本都是這些天我們所接觸的,尤其是MakeBox和我改進(jìn)后的putRice裝米器(經(jīng)改進(jìn)現(xiàn)在已經(jīng)可以裝載任何糧食)。
這個(gè)例子直接的說明了很多對象的用法,例如在Flash MX中可以用ActionScript動態(tài)新建的Button對象,是我們給予onPress后的副作用(當(dāng)移動上去會出現(xiàn)手,既是已經(jīng)變成了Button對象);而其實(shí)基本上很多在Flash MX的對象都會有部分或全部MovieClip對象的proto繼承。TextField也是其中之一,如果在TextField不為Input的時(shí)候,我們也可以設(shè)置_alpha、_rotation等MovieClip屬性,這就很好的沿用了Movieclip的特性。
對于textField中的restrict和variable屬性,這些其實(shí)都不算是新的屬性,在以前的版本,我們都可以通過面板來對他們進(jìn)行控制,而此次我們只是簡化了對其操作的方法,restrict是十分好用的,其基本功能是限制字符串的輸入,不過也有別的用途,例如我們上面的例子restrict=”^english” 設(shè)定了只可以輸入字符,但遇到用戶輸入english其中之一的時(shí)候就會把它們大寫,既是uppercase;控制輸入范圍是用“-”連接兩個(gè)范圍界限字符,但如果你要輸入^或者這樣的字符的時(shí)候,你需要做的只是加入在他們的前面(^ 和\);變量variable則同樣是以前的變量屬性,指定了一個(gè)變量和該text內(nèi)容相關(guān)聯(lián)。
textField的事件主要有4種:onsetfocus/onkillfocus、onchanged、onscroller。前兩種處理焦點(diǎn)的激活和丟失事件,onchanged響應(yīng)文本內(nèi)容的變化事件,onscroller則響應(yīng)滾動條拉動的事件。
*程序正常運(yùn)行,當(dāng)你開始的時(shí)候,看到一個(gè)倉庫里面有很多米(真的很多,600斤),但卻不知道其數(shù)量多少,你不得不拉動你的滾動閘來看看這個(gè)倉庫里面到底有多少米,而米實(shí)在是不好區(qū)分?jǐn)?shù)量了,這時(shí),你一氣之下買掉了所有的大米,換成了平等價(jià)值的玉米,這時(shí)再次拉動閘門,玉米的排放位置清晰可見。(如圖1)
(圖1,完全手動寫出來的感覺還是不夠感性……)
textField經(jīng)常會和Selection對象連用,經(jīng)常用用到的組合將是這樣: onmouseup=function(){trace(Selection.getBeginIndex());trace(Selection.getEndIndex());txt.
replaceSel(" ")}
getBeginIndex獲取鼠標(biāo)開始選擇的文本的開始端,getEndIndex則獲取鼠標(biāo)放開那一剎那的末端,這時(shí),如果用textField的replaceSel修改文本為空,即為刪除文本。
TextFormat
TextFormat對象可以直接的形容成為TextField的CSS,通過對象的形勢存放文本區(qū)所使用的樣式。
我們通過一個(gè)例子來說明常用的屬性:
tf=new TextFormat();
with (tf) {
align="right" //排列方向;
indent=20 //段縮進(jìn);
italic=bold=1 //斜體加粗;
size=20 //大小;
font="arial" //字體;
leading=2 //行間距;
underline=1 //下線;
leftmargin=4 //左間距;
rightmargin=7 //右間距;
tabstops=10 //table縮進(jìn);
}
tf.color=0x234567 //顏色;
txt.html=true;
txt.htmltext="DnVsystem";
txt.selectable=0;
txt.setNewTextFormat(tf);
(圖2)
通常在使用textformat的時(shí)候我們可能會使用動態(tài)文本,而動態(tài)文本經(jīng)常會有一些html的元素讀入,這時(shí),我們需要使得html屬性不為假,并從htmltext給定內(nèi)容;在textformat中以上基本都會經(jīng)常使用,而對于文本區(qū)的selectable屬性則是針對防止copy做出的對策之一;過程和html一樣,當(dāng)樣式定完后,通過setNewTextFormat給予/應(yīng)用extField對象新的樣式。(如圖2)
原文件:
注:
雖然說Flash MX的屬性有很多,甚至讓人眼花繚亂,難以記住的感覺,但是每個(gè)屬性都和其英文有直接相關(guān)的含義,所以如果看完這些還不明白,你大可翻閱金山詞霸。