*显示图片
loading方式加载图片
<mx:Image source="assets/dairy_milk.jpg" scaleContent="true"/>
把图片compile进swf
<mx:Image source="@Embed('assets/dairy_milk.jpg')" scaleContent="true"/>
TextField.restrict = "此处为可输入的内容";
field.restrict = "^此处为禁止输入的内容";
restrict属性支持一些类似正则表达式的样式:
field.restrict = "a-zA-z"; //只允许大小字母
field.restrict = "a-zA-z "; //只允许字母和空格
field.restrict = "0-9"; //只允许数字
field.restrict = "^abcdefg"; //除了小写字母abcdefg不允许外,其它都允许
field.restrict = "^a-z"; //所有小写字母都不允许,但是,其它内容都允许,包括大写字母
field.restrict = "0-9^5"; //只允许数字,但5例外
让restrict字符包含具有特殊意义的字母(例如-和^):
field.restrict = "0-9\\-"; //允许数字和破折号
field.restrict = "0-9\\^"; //允许数字和^
field.restrict = "0-9\\\\"; //允许数字和反斜杠
你也可以使用Unicode转义序列,指定允许的内容.例如:
field.restrict = "^\u001A";
注意:ActionScript有区分大小写的,如果restrict属性设为abc,允许字母的大写形式(A,B和C)输入时会变成小写对待形式(a,b和c),反之亦然.restrict属性只影响用户可以输入的内容,脚本可将任何文本放入文本字段中.
【设定输入框的最大长度】
TextField.maxChars:int
【向TextField追加内容】
TextField.appendText(text:String):void
与通过对 text 属性使用加法赋值来连接两个字符串(例如 field.text += moreText)相比,此方法的效率更高.
【显示HTML格式的文字】
TextField.htmlText = "<b>Html text</b>";
支持的HTML标签集有: <b>,<i>,<u>,<font>(有face,size以及color属性),<p>,<br>,<a>,<li>,<img>以及<textformat>(有leftmargin,rightmargin,blockindent,indent,leading以及tabstops属性,相应于TextFormat类的同名属性)
【缩减空白】
TextField.condenseWhite = true;
删除具有HTML文本的文本字段中的额外空白(空格,换行符等),如同多数HTML浏览器所做的那样.
注意: 在设置 htmlText 属性之前设置 condenseWhite 属性
【自动大小调整和对齐】
TextField.autoSize = TextFieldAutoSize.LEFT;
可选之值:
flash.text.TextFieldAutoSize.CENTER
flash.text.TextFieldAutoSize.LEFT
flash.text.TextFieldAutoSize.NONE
flash.text.TextFieldAutoSize.RIGHT
【指示文本字段是否自动换行】
TextField.wordWrap = true; //自动换行
【用程序手段滚动文字】
水平方向以像素为单位,而垂直方向以行做单位:
scrollV: 指出文字框可见区域的最顶行,可读写;
bottomScrollV: 指出文字框内最底端可见行,只读;
maxScrollV: scrollV的最大值,只读;
numLines: 定义多行文本字段中的文本行数,只读;
TextField.scrollV = field.maxScrollV; //滚动到最后一页
【响应滚动事件】
field.addEventListener(Event.SCROLL, onTextScroll);
【样式化文字的方法】
1. 使用HTML标签进行样式化;
2. 使用TextFormat对象;
3. 使用CSS.
例如: HTML是用<font>标签,TextFormat对象是设定font属性,而CSS是使用font-family属性的.
受支持的层叠样式表(CSS)属性和值,及其相应的ActionScript属性名称(小括号内):
color(color),display(display),font-family(fontFamily),font-size(fontSize),font-style(fontStyle),font-weight(fontWeight),kerning(kerning),leading(leading),letter-spacing(letterSpacing),margin-left(marginLeft),margin-right(marginRight),text-align(textAlign),text-decoration(textDecoration),text-indent(textIndent)
受支持的HTML实体: <(小于号: <), >(大于号: >), &(和: &), "(双引号: "), '(撇号,单引号: ')
其中样式对象的两种写法:
写法一:
var sampleStyle:Object = new Object();
sampleStyle.color = "#FFFFFF";
sampleStyle.textAlign = "center";
css.setStyle(".sample", sampleStyle);
写法二:
var sampleStyle:Object = {color: "#FFFFFF", textAlign: "center"};
css.setStyle(".sample", sampleStyle);
【对用户输入的文字进行样式化】
使用defaultTextFormat属性,样式会施加至用户键入输入框的文字身上:
var formatter:TextFormat = new TextFormat();
formatter.color = 0x0000FF; //把文字变成蓝色
field.defaultTextFormat = formatter;
【对现有文字的一部分进行样式化】
TextFormat.setTextFormat(format:TextFormat, beginIndex:int = -1, endIndex:int = -1):void
【设定文字框的字体】
例子:
HTML: field.htmlText = "<font face='Arial'>Formatted text</font>";
TextFormat: formatter.font = "Arial";
CSS: P{ font-family: Arial; }
也可以使用以逗号隔开的字体清单: formatter.font = "Arial, Verdana, Helvetica";
注意:
字体和字体群组不同.字体群组有三种: _sans,_serif以及_typewriter.
_sans群组一般就是指Arial或Helvetica这种字体;
_serif群组一般就是指Times或Times New Roman这种字体;
_typewriter群组一般就是指Courier或Courier New这种字体.
【嵌入字体】
使用[Embed]后设标签.[Embed]后设标签应该出现在ActionScript文件中,处于类宣告之外.你可以内嵌TrueType字体或系统字体.内嵌TrueType字体时的语法:
[Embed(source="pathToTtfFile", fontName="FontName", mimeType="application/x-font-truetype")]
pathToTtfFile: ttf文件的路径,TrueType字体的路径可以是相对的,也可以是绝对的;
FontName: 字体名称;
内嵌系统字体的语法:
[Embed(systemFont="Times New Roman", fontName="Times New Roman", mimeType="application/x-font-truetype")]
fontName: 以相同名称作为实际系统字体名称.
注意: 在使用嵌入字体时,要把TextField的embedFonts属性设为true,这样TextField只能用内嵌字体了.如果你试着替embedFonts设为true的TextField使用设备字体,什么都不会显示.如果embedFonts设为true,就无法指定以逗号相隔的字体清单.
【建立可以旋转的文字】
使用内嵌字体.当你旋转文字框时,设备字体就会消失.
【显示Unicode文字】
1. 从外部来源载入Unicode文字;
2. 假如你的编辑器支持Unicode(如 Flex Builder),则可以直接在ActionScript程序中使用该字符;
3. 使用Unicode转义字符,ActionScript里所有Unicode转义字符都以\u开头,后面再跟四位十六进制数字.
注意: 如果你想取得Unicode字符,在Windows下使用: 开始>所有程序>附件>系统工具>字符映射表.
【把Flash Player的焦点带给文字框】
stage.focus = field;
把焦点移除:
stage.focus = null;
注意: 当.swf文件首次载入至网页浏览器时,并没有焦点.因此,以程序的方式把焦点指定给Flash应用程序的一个元素前,必须先把焦点移至Flash Player.
【以ActionScript选取文字】
使用TextField.setSelection(beginIndex:int, endIndex:int):void
为了可以正常选取文字,文字框必须具有焦点:
stage.focus = field; //把焦点设给文字框
field.text = "This is example text"; //设定文字
field.setSelection(0, 4); //把"This"这个单词以高亮显示
使用只读的selectionBeginIndex和selectionEndIndex属性访问所选取的字符范围的索引.
【在文字内设定安插点(游标位置)并访问游标位置的索引值】
可以使用TextField.setSelection()把起始和结尾的索引参数都设成相同值,在文字内设定游标位置(假设具有焦点):
field.setSelection(0, 0); //在第一个字符前摆放安插点
trace(field.caretIndex); //输出游标位置的索引值
【当文本字段受到选取或取消选取时给予响应】
获得焦点时: FocusEvent.FOCUS_IN
失去焦点时: FocusEvent.FOCUS_OUT
通过键盘(Tab键)把焦点移除时: FocusEvent.KEY_FOCUS_CHANGE
通过鼠标把焦点移除时: FocusEvent.MOUSE_FOCUS_CHANGE
FocusEvent类有一个relatedObject属性.就FOCUS_IN事件而言,relatedObject属性是刚才拥有焦点的对象的引用地址;对于FOCUS_OUT,KEY_FOCUS_CHANGE以及MOUSE_FOCUS_CHANGE事件,relatedObject属性是刚接收到焦点的对象的引用地址.
FOCUS_IN和FOCUS_OUT事件都是在焦点改变后发生的,所以两者都是不可取消的事件.对于KEY_FOCUS_CHANGE和MOUSE_FOCUS_CHANGE事件,可以使用FocusEvent.preventDefault()方法取消默认行为:
field.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, onKeyFocus);
private function onKeyFocus(event:FocusEvent):void {
if(field.text == "") {
event.preventDefault(); //当field没有任何文字前,不允许使用Tab键把焦点移除
}
//event.relatedObject就是刚才拥有焦点的对象的引用地址,即下一个获得焦点的对象的引用地址
}
【响应用户的输入行为】
field.addEventListener(TextEvent.TEXT_INPUT, onTextInput);
private function onTextInput(event:TextEvent):void {
if(event.text == "a" && field.length == 0) {
event.preventDefault(); //TEXT_INPUT是可以取消的事件.TextEvent有一个text属性,内含用户所输入的的字符.此例子确保用户输入的第一个字母不是"a"
}
}
【把超链接加入文字】
打开网页:
例子1:
var css:StyleSheet = new StyleSheet();
css.parseCSS("a{color:#0000FF;} a:hover{text-decoration:underline;}");
field.styleSheet = css;
field.htmlText = "<a href='http://www.riahome.cn' target='_blank'>Link text</a>";
例子2:
field.text = "Link text";
var formatter:TextFormat = new TextFormat();
formatter.url = "http://www.riahome.cn";
formatter.target = "_blank";
field.setTextFormat(formatter);
打开Email:
field.text = "Link text";
var formatter:TextFormat = new TextFormat();
formatter.url = "mailto:
[email protected]";
field.setTextFormat(formatter);
使用event协议,打开ActionScript方法:
field.htmlText = "<a href='event:http://www.riahome.cn'>www.RIAHome.cn</a>";
field.addEventListener(TextEvent.LINK, onClickHyperlink);
private function onClickHyperlink(event:TextEvent):void {
trace(event.text); //输出: http://www.riahome.cn
}
【精确获取某字符的索引值】
在 x 和 y 参数指定的位置返回从零开始的字符索引值
TextField.getCharIndexAtPoint(x:Number, y:Number):int
例子:
field.getCharIndexAtPoint(mouseX, mouseY); //返回鼠标位置上的该字符的索引值
【精确获取某字符的边框区域】
TextField.getCharBoundaries(charIndex:int):Rectangle
通过读取Rectangle的x,y,width以及height等属性来确定该字符的边框区域范围.
【精确获取某行的索引值】
在 x 和 y 参数指定的位置返回从零开始的行索引值
TextField.getLineIndexAtPoint(x:Number, y:Number):int
field.getLineIndexAtPoint(mouseX, mouseY); //返回鼠标位置上的该行的索引值
【获取指定索引值处的字符所在行的行索引值】
TextField.getLineIndexOfChar(charIndex:int):int
【获取指定行的字符数】
TextField.getLineLength(lineIndex:int):int
【获取指定索引值处的行所包含的字符】
TextField.getLineText(lineIndex:int):String
【获取指定行索引所在行的第一个字符的索引值】
TextField.getLineOffset(lineIndex:int):int
【获取指定文本行的度量信息】
TextField.getLineMetrics(lineIndex:int):TextLineMetrics
TextLineMetrics类包含文本字段中某行文本的文本位置和度量值的相关信息,帮助文档里有深入的图解.
【获取指定索引处的字符所在段落内的第一个字符索引值】
如果给定一个字符索引,则返回同一段落中第一个字符的索引
TextField.getFirstCharInParagraph(charIndex:int):int
【获取指定索引处的字符所在段落内的字符数】
TextField.getParagraphLength(charIndex:int):int
【替换所选文字】
TextField.replaceSelectedText(value:String):void
可以使用此方法插入和删除文本而不破坏其余文本的字符和段落格式.
【替换指定范围的文本】
TextField.replaceText(beginIndex:int, endIndex:int, newText:String):void
注意: 如果对文本字段应用了样式表,则该方法不起作用
【Timer计时器的使用】
var timer:Timer = new Timer(delay:Number, repeatCount:int = 0);
timer.addEventListener(TimerEvent.TIMER, onTimer);
timer.start();
private function onTimer(event:TimerEvent):void {
//code
}
【以指定方向和速度移动元件】
speed: 目标速度
radians: speed与x轴的夹角,弧度
vx = Math.cos(radians) * speed;
vy = Math.sin(radians) * speed;
【缓动动画算法】
targetX,targetY: 目标坐标;
easingSpeed: 每次移动分数,范围0到1;
var vx:Number = (targetX - sprite.x) * easingSpeed;
var vy:Number = (targetY - sprite.y) * easingSpeed;
sprite.x += vx;
sprite.y += vy;
注意: 在非常逼近目标点时,往往找出通往目标点的距离,如果其值少于特定值,就应该停止该缓动.
【模拟弹簧往复运动算法】
五个变量: targetX(目标点的x坐标),sprite.X(物体的x坐标),vx(水平速度),ax(水平加速度),k(弹簧强度)
已知: targetX(目标点的x坐标),k(弹簧强度)
var ax:Number = (targetX - sprite.x) * k;
vx += ax;
sprite.x += vx;
注意: 这里只是水平方向的情形,也可以推广到垂直方向以及水平垂直一起来的情形
【模拟单摆运动】
四个变量: sprite.x(物体的x坐标),centerX(中心位置的x坐标),angle(弧度),radius(摆动的振幅,也就是摆动的范围)
sprite.x = centerX + Math.sin(angle) * radius;
angle += 0.05;
【模拟阻尼运动】
六个变量: targetX(目标点的x坐标),sprite.X(物体的x坐标),vx(水平速度),ax(水平加速度),k(弹簧强度),damp(阻尼系数)
已知: targetX(目标点的x坐标),k(弹簧强度)
var ax:Number = (targetX - sprite.x) * k;
vx += ax;
sprite.x += vx;
vx *= damp; //无阻力情况下的弹簧往复运动只缺少此句
注意: 这里只是水平方向的情形,也可以推广到垂直方向以及水平垂直一起来的情形.
这种原理可以推广到其它属性,如scaleX:
scaleVel += (targetScale - sprite.scaleX) * k;
sprite.scaleX += scaleVel;
scaleVel *= damp;
【计算两点间的角度】
Math.atan2(y:Number, x:Number):Number
y: 两点间的垂直距离
x: 两点间的水平距离
返回一个以弧度为单位的角度,返回值介于正PI和负PI之间.
【让物体指着鼠标(跟随眼睛)】
var dx:Number = mouseX - sprite.x;
var dy:Number = mouseY - sprite.y;
var radians:Number = Math.atan2(dy, dx);
sprite.rotation = radians * 180 / Math.PI;
【联结字符串时需要注意的地方】
var result:String = 2 + 6 + "a";
trace(result); //输出: 8a
var result:String = "a" + 2 + 6;
trace(result); //输出: a26
var result:String = "a" + (2 + 6);
trace(result); //输出: a8
【查找匹配的字符串】
使用String.indexOf(val:String, startIndex:Number = 0):int
返回指定子字符串的第一个匹配项的索引,没有匹配就返回-1
查找所有匹配的字符串:
var index:int = -1;
while((index = myString.indexOf("val", index + 1)) != -1) {
trace("结果:" + index);
}
使用String.lastIndexOf(val:String, startIndex:Number = 0x7FFFFFFF):int
返回指定子字符串的最后一个匹配项的位置,没有匹配就返回-1
var index:int = myString.length;
while((index = myString.lastIndexOf("val", index - 1)) != -1) {
trace("结果:" + index);
}
注意: indexOf()和lastIndexOf()方法都是区分大小写的.想把大小写都查找出来的话,可以结合String.toLowerCase()和String.toUpperCase()方法先把字符串一起转为小写或大写再进行查找.
【提取子字符串】
String.substr(startIndex:Number = 0, len:Number = 0x7fffffff):String
String.substring(startIndex:Number = 0, endIndex:Number = 0x7fffffff):String
String.slice(startIndex:Number = 0, endIndex:Number = 0x7fffffff):String
substr()第一个参数可以是负值,表示索引值是从字符串尾端算过来,-1是最后一个字符;
substring()和slice()差别在于substring()只接受正索引值,而把负值作为0处理.另外,如果endIndex小于startIndex,substring()方法在执行前,会自动将其调换过来,总是使用两个参数中较小的值作为起始索引.
slice()方法可接受startIndex和endIndex为负值,而把负值表示为从字符串的尾端算回来,如果endIndex小于startIndex,slice()方法会返回空字符串.
【以指定模式拆分字符串】
String.split(delimiter:*, limit:Number = 0x7fffffff):Array
【替换指定的字符串】
使用String.replace(pattern:*, repl:Object):String
可以这样来替换所有指定的字符串: myString.split("a").join("b");
【按单词或单个字母逆转字符串】
1. 把字符串切割使用String.split()方法成一个数组:对单词而言,以空格作为分界符,对字母而言,以空字符("")作为分界符;
2. 使用Array.reverse()方法对数组进行逆转;
3. 使用Array.join()方法重新组合为字符串:对单词而言,以空格(" ")作为联结符,对字母而言,以空字符("")作为联结符;
FLEX问题总汇
论坛一直有些问题有人重复的发帖,今天有空就做了点总结,希望和大家分享一下.
希望能够帮助一些新人对flex的一些基本理解.
1:flex是否可以嵌入html?
可以,需要用到iframe,该iframe并非它定义好,而需要自己定义.
2:flex可否访问系统里的资源,比如C盘D盘文件?
不可以,AIR可以.
3:flex可否对文件进行操作?
不可以,它没IO的操作,需要调用java或其他语言对文件进行读写等.
4:为什么读取数据是Object object?
读取的数据类型为Object,建议转换成string.如果不行就debug查看object里是否还有很多层次,如果有再依次取出.
5:如何访问父级对象?
parentApplication.
6:如何去掉滚动条?
横条:horiz
竖条: verticalScrollPolicy="off"
7:module数据通信?
附件: ModuleCommunicationSample.rar (2008-6-20 12:50:14, 1078.32 K)
该附件被下载次数 197
8:flex默认编码是什么格式?
utf-8
9:为什么我后台jsp传回flex端为乱码?
request.getParameter("name").getBytes("ISO8859-1"), "utf-8"); 或 request.charaterset("UTF-8").
10:dataGrid如何多选?
附件: dataGrid.rar (2008-6-20 12:50:14, 1065.23 K)
该附件被下载次数 149
11:如何改变每根柱子的颜色?
<mx:series>
<mx:ColumnSeries ...
<mx:fill>
<mx:RadialGradient>
<mx:entries>
<mx:GradientEntry
color="#EF7651" />
<mx:GradientEntry
color="#994C34" ratio="1"/>
</mx:entries>
</mx:RadialGradient>
</mx:fill>
<!-一个fill为1根->
12:如何改变图片缩放大小?
可以使用Resize.
例:<mx:Resize id="particular2" widthBy="2" widthFrom="323" widthTo="-691" target="{canvas2}"/>
13:日期使用.
Date.getUTCMonth()//返回月
Date.getFullYear()//按照本地时间返回 4 位数字的年份数
Date.getDate()//按照本地时间返回某天是当月的第几天
Date.getDay() 按照本地时间返回某天是周几
关于显示格式可以使用format方法.
14:swf与swf之间可否交互?
可以,使用LocalConnection.
15:PopUpManager居中问题.
PopUpManager.centerPopUp(PopUpManager.createPopUp(DisplayObject(Application.application),TitleWindow,true);).
16:flex访问,解决安全限制,破沙河.
crossdomain.xml:
<?xml version="1.0" encoding="utf-8"?>
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>
存放在服务器和项目一起根目录下.*代表全部可以访问.
命名为crossdomain,flex默认读取.
17:flex可否接收键盘?
可以.首先XX.setFocus(),设置焦点在某容器/控件之上,
mc.addEventListener(KeyboardEvent.KEY_DOWN,keyIsDown);//添加响应事件
private function keyIsDown(evt:KeyboardEvent):void
{
//evt.keyCode键盘对应码
}
18:tree如何默认展开?
myTree.setIsOpen(myTree.getNodeDisplayedAt(0), true);//展开某个
var index = 0;
var node = TreFolder.getNodeDisplayedAt(index);
while(node != undefined){
TreFolder.setIsOpen(node,true);
index ++;
node = TreFolder.getNodeDisplayedAt(index);
}//true为全部展开false为全部手起
19:如何修改Alert样式?
字体为例:
<mx:Style>
Alert
{
fontSize:12;
}
</mx:Style>
20:如何改变鼠标的指针?
[Embed(source="hand.jpg")]
private var handCursorSymbol:Class;//定义图片
CursorManager.setCursor(handCursorSymbol);//进行设置
21.如何使用全屏模式?
stage.displayState = StageDisplayState.NORMAL;//还原
stage.displayState = StageDisplayState.FULL_SCREEN; //全屏
22.如何制作自定义反键?
var myContextMenu:ContextMenu = new ContextMenu();
myContextMenu.hideBuiltInItems();
var item1:ContextMenuItem = new ContextMenuItem("item");
myContextMenu.customItems.push(item1);//加入右键
item1.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemSelectHandler1);//为item1添加点击响应
23:如何制作和使用swc?
new->Flex Library project.
在属性里选择Flex Library Build Path勾选你要编译的类//编译后bin里即是swc.
使用:找到要使用该swc的工程,属性,Flex Build Path,点击add swc即可.
http://www.riachina.com/showtopic-11341.aspx
24:如何使用ShareObject?
ShareObject就像cookies一样...
会生成一个文件来保存你所需要交互的数据...
提供方法:clear() //删除本地共享对象
flush() //立即把共享对象数据写入本地文件
getLocal()// 创建或连接本地共享对象;
25.Flex常用的数据交互.httpservice和webservice.(remote可查看Flex + LCDS + Java 入门教程)
1.使用httpservice
<mx:HTTPService id="myhttp" url="you httpservice url" result="doResult(event)" >
<mx:request xmlns="">
<username>
{xxx} //此处为你要传递给后台的参数,也可以不用request.(可选),还有其他写法,此为其1.
</username>
</mx:request>
</HTTPService>
private function doResult(evt:ResultEvent):void
{
//此处为myhttp send后,由后台传回的数据
}
2:使用webservice
ws一般都以wsdl存在....net里可以直接执行asmx查看和测试方法 java也提供了一个xml 工具达到同样效果.确定ws成功那么就可以开始编写flex来通讯了.
<mx:WebService id="FlexSite" wsdl="http://localhost/FlexSite/Server2Flex.asmx?wsdl" showBusyCursor="true" useProxy="false">
<mx:operation name="HelloWorld" result="onWs(event)"> <!--这里对应WEBSERVICE的方法名,在我的WS里有HelloWorld暴露方法-->
<mx:request> <!--接收方法参数-->
<mx:UserName>//参数名
{name}//参数值
</mx:UserName>
</mx:request>
</mx:operation>
</mx:WebService>
private function onWs(event:ResultEvent):void
{
//得到ws的返回....
}
FlexSite.HelloWorld.send();//调用HelloWorld方法,利用onWs接收返回值
26. 经常有些人问哪种速度块些,简单做了测试列举如下
httpservice,webservice,json,remote(.net)数据服务时间比较。
名称 1 2 3 4 5 平均(s)
JSON 1672 828 765 797 807 0.9738
httpservice 2610 2547 2485 2375 2500 2.5034
webservice 2657 2328 2797 2511 2375 2.5336
remote 437 360 344 454 411 0.4012
10000条数据测试结果
27:实现类似HTML里的<A>标签的超链接功能.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:view="view.*" creati>
<mx:String id="test">
<![CDATA[<a href="event:"><u>click</u></a> label]]>
</mx:String>
<mx:Script>
<![CDATA[
import mx.controls.Label;
import mx.controls.Alert;
private function initApp():void
{
var lbl:Label = new Label();
lbl.htmlText = test;
lbl.selectable = true;
lbl.addEventListener(TextEvent.LINK, label_link);
this.addChild(lbl);
}
private function label_link(evt:TextEvent):void {
Alert.show("click .");
//这里处理你要进行的跳转
}
]]>
</mx:Script>
</mx:Application>