首先,对时刻在我身边的网络朋友们和经常来信鼓励我的网友们表示感谢。我会坚持下去,并写出尊重Flash MX的名字的系列文章。
Flash MX在Macromedia的MX战略方向的重视使得其开放式的结构可以应用于更多的网络内容和开发应用,今天,我们针对新提升的网络数据和文本相关操作进行解析。
TextField对象
新的TextField对象是从Object对象继承而来,使得在Flash中动态建立文本的童话变成现实,而这一些你只要从MovieClip.createTextField开始(这条语句想必使用频率非常的高,所以我把格式写出来): MovieClip.createTextField(Instance名称,深度,初始x轴位置,初始y轴位置,初始宽度,初始高度);
通过MovieClip的createTextField方法,你将可以动态的在程序运行期间建立文本区并可设置其属性和方法:
createTextField("txt",++dpt,80,100,100,200);
txt.wordwrap=true;
var i=30;
while (i--) txt.text+="rice...";
通过这行代码,我们在程序运行期动态建立一个Instance名称为txt的文本区并置于第1层深度,规定其初始位置在(80,100),高200宽100;这个“筐”做好以后,我们可以往里面放东西,但是我们在放之前,我们需要规定它的另一个属性wordwrap,这个属性的作用相当于规定了你的筐有没有封边,如果初始值为false,那么这个“筐”是失败的,只可以当作“席子”;随意我们规定了这个“筐”封边,并塞入30“斤”大米。试运行下结果。(如图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的方法,所以我们出于学习而产生一个空的MovieClip来装这个文本区;程序运行后动态产生一个文本区,并有一个边框和白色的背景,*用自定义方法putRice装载“大米”,由于Flash MX的递归调用最多只可以支持256层(0-255),所以我们还不能一下子装载300斤,只能分两次装(254+36),*形成的结果如下:(图2)
(图2,看起来好整齐的大米,其实多余的部分已经漏到地低下去了……)
嗯……这就结束了?我这个人Bad Mind,总想搞搞恶作剧,我让我做的textField米筐进行物理性破坏测试,让其高度(或宽)小于字体的最小高度后……发现Bug一个,textField失去了原有的位置和高、宽属性被挤到了屏幕的边缘,最搞笑的就是这个测试结果……让我们加入如下代码并观察(图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的简单应用
刚做了个米筐例子,看起来文本区操作还有些用途,可是仅仅这样可不够……Flash MX中新的文本区还是有很大的用途的。
例如我们做一个在线用户输入姓名和密码的简单应用,输入如下代码:
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;
啊……看起来乱七八糟,但是却十分好理解,Flash MX中允许用户自定义TextField的很多属性,而对其操作更是考虑周到;我们首先定义两个类型为输入文本的TextField txtUser和txtPass,定了一基本的背景边框等样式属性后,我们用autosize属性让文本自动缩放,这样在用户输入的的时候十分的动感的,而第2个文本txtPass需要用户的内容为隐藏,所以把它的password属性设为true;接着给这两个文本初始化字符,让他们看起来不那么狭窄;*用用到的是tabIndex,它是一个存储当前需要table键换焦点文本的数组,通过正整数来区分每个要切换的文本,而你如果你要是用到这个功能,文本区的tabEnabled必须是true,否则无效,而tabChildren属性是新加入的属性,我们可以设置/获取其内部的子文本对象。测试,你可以看到一个用户输入界面,这一切的制作过程是不需要你动任何鼠标操作的。(如图4)
(图4,哈……我的密码长度恐怖吧)
但是,这个tabIndex和selection有直接的冲突。当你设置了tabEnabled和tabIndex后,如果要使用selection.setFocus(txtUser);这样的看上去什么错误都没有的代码,将会产生一个内部优先级错误,将无法有效使用tab键来切换文本。
写到这里,通过很多例子我们再次证明了在Flash MX中可以完全脱离鼠标并能完成很多同样甚至更酷的效果,而此时,Flash MX的阳光射线才不过是上午10点半,更多的功能还等待我们去探索……
源文件: