二、技术介绍
3extfield文本域对象
在介绍textfield对象之前,首先我们须明白,在flash中,有三种文本:
1) 静态文本(static text)
内容和样式都在创作是决定,在flash mx中,可以有竖直的静态文本,在flash属性检查器中设置(关于静态文本的详细阐述,请参见作者的另一篇文章“flash text”)。
2) 动态文本(dynamic text)
是textfield对象的一个实例,可以在flash属性检查器中为其设置唯一的实例名,然后就可以使用该实例名来使用相应的方法与属性以改变动态文本的内容与样式。
本文所介绍的使用xmlsocket以web方式对生产系统进行及时监控的应用案例中,就是使用动态文本以不同的颜色来显示服务端发送过来的不同信息:
function myonxml(doc) {
var e = doc.firstchild;
selection.setfocus(“_root.txt”);
selection.setselection(0,0);
if (e != null && e.nodename == “message”) {
if(e.attributes.type == “error”){
mytextformat.color = “0xff0000”;
txt.setnewtextformat(mytextformat);
txt.replacesel(“error — ” + e.attributes.text + ” — ”
+ e.attributes.time + newline);
}else if (e.attributes.type == “normal”){
mytextformat.color = “0x0000ff”;
txt.setnewtextformat(mytextformat);
txt.replacesel(“normal– ” + e.attributes.text + ” — ”
+ e.attributes.time + newline);
}
}
}
以上语句是xmlsocket对象的onxml事件处理函数的部分,函数中第一条语句得到xml文档的第一个节点,假设服务端发送来的数据为
接着的一个嵌套if语句,判断变量 e 所代表的节点的类型,如果是”error”类型,就通过mytextformat(textformat文本样式对象的一个实例),把该条信息显示成红色;如果是”error”类型,就通过mytextformat,把该条信息显示成蓝色;在实际场合下,可以根据需要,定义任意条信息类型。
其中的变量 txt 就表示一个动态文本对象,每次收到数据时,就调用textfield对象的 replacesel() 方法把相应的数据插入到文本框的最顶行。为什么是最顶行呢?这就是 selection.setselection(0,0) 语句的作用,它把光标位置定位到第一行的第一个位置。其中,newline是flash中的常量,表示换行。
3) 输入域文本(input text)
和动态文本一样,它也是textfield对象的一个实例,可以在flash属性检查器中为其设置唯一的实例名,然后就可以使用该实例名来使用相应的方法与属性以改变动态文本的内容与样式,与动态文本的是,它允许用户输入,并且具有剪切、复制、粘贴、全选等编辑功能。
本文所介绍的应用案例中,就是使用输入框文本来让用户输入建立socket 所要连接的主机与端口:
function btnconnect_onclick() {
if(txtport.text < 1024 || txtport.text > 65536){
txtport.text = “”;
selection.setfocus(“_root.txtport”);
txtport.backgroundcolor = “0xff0000”;
}else{
if(txthost.text == “default host”){
socket.connect(null, txtport.text);
}else{
socket.connect(txthost.text, txtport.text);
}
}
}
以上语句是btnconnect按钮(应用程序开发组件pushbutton的一个实例)的单击事件处理函数,其中函数名设为btnconnect_onclick,只是为了便于理解,只要在属性检查器中设置btnconnect的click handler(单击事件处理器)到相应的函数。txthost和txtport 分别让用户输入连接主机与端口的输入域(textfield)对象。
当用户单击btnconnect按钮时,首先判断用户输入的端口数是否在1024与65565之间,如果不在,把端口输入框txtport的内容请空,背景变成红色,并用以下语句得到输入焦点 selection.setfocus(“_root.txtport”) ,让用户重新输入。由于txtport端口输入框的内容必须是数字,所以可以设定用户只能输入数字,同时,当用户再次输入时,把端口输入框的背景变成原来的颜色:
txtport.restrict = “0-9”;
txtport.onchanged = txtport_onchanged;
在生成输入框文本时,默认txthost的内容是”default host” ,如果用户在连接前没有改变,则连接web服务器所在的ip地址,如果用户输入了主机,得保证所连接的主机与web服务器在同一ip地址或同一子域。