积累日常生活的点滴,开发过程的心得。

关于Flex的界面布局控制

Flex在界面控制方面跟Delphi的风格差别比较大。下面是跟Delphi不同的几个地方

1.容器内的组件自动布局控制,在Delphi里面一个容器中包含多个子控件时,我们只要简单的设定某个控件visible为False,容器就能自动重新对可见的子控件进行布局,但是Flex则有些不同,它的默认设置是即使子控件不可见,布局时仍然被计算在内,这时我们就要设置子控件的includeinLayout属性为False才行。

从XML映射为Flex 对象的一点问题

使用下面Flex函数可以很方便的将XML映射为对象,

为MXML控件添加自定义事件

首先在控件中添加事件Tag

    <mx:Metadata>
    [Event(name="change", type="flash.events.Event")]
    </mx:Metadata>

 

然后,当相应事件发生时,发布对应的事件

dispatchEvent(new Event("change", true));

Tomcat debug超时问题

因为这回开发用的机器比较慢,用tomcat调试程序时,会超出45秒的启动时间,所以需要修改超时时间,在eclipse中执行window/Preferences/Server 将Server Timeout delay 从Normal改成Unlimited就可以了

关于Flex的皮肤定制

一种定制Flex的皮肤的方式是用Adobe的图像绘制工具来实现

参考下面这篇文章http://www.adobe.com/devnet/flex/articles/flex_skins.html

还有一种就是通过编程来实现。

使用Java及XML Schema对XML进行校验

Flex对于XML处理非常方便,是我用过的最好的,它可以很容易的将XML映射为对象代理,并以对象属性的方式访问XML的节点。比如说对于下面的XML

<A>

    <B/>

</A>

我们可以将其映射为对象后,通过Object.A.B来直接获取XML节点信息,好处就是不需要编写冗长的DOM或者SAX解析访问代码了。但是有一个比较大的问题是这种访问不是强类型的,也就是说代码中可以写 Object.A的调用,但是实际上如果定义的XML信息如果编写错误,没有定义对应的A节点的话,要到运行时才能发现,这就逼得我们要写大量try catch来防止这种错误,结果就是虽然解决了一个棘手问题,但又产生了一个新问题。

幸好,XML的设计者们已经想到了这个问题,W3C的XML Schema可以用来验证访问的XML是否符合预定义的标准。但是Action Script本身对于XML Schema没有提供支持,不过Flex本身可以访问任意语言编写的服务器,所以我们可以用Java来实现XML的校验,Dr Herong Yang的这个例子可以很方便的实现XML的校验。

 

Flex的数据绑定(DataBinding)

Delphi中提供了ActionList来实现界面的组件状态联动控制。但是Flex没有提供类似的组件,那么如何实现界面组件状态的联动呢。研究了一下,发现Flex的数据绑定功能非常强悍,可以实现类似的功能。下面就是Flex的数据绑定的相关文档

http://blogs.adobe.com/flexdoc/pdf/databinding.pdf

 

比如,要想实现一个目标控件某个属性由另外两个控件的属性组合控制的时候,可以使用函数绑定写成下面的方式

 

< A enabled="{function1(B.B1 , C.C1)}" />

 

private function  function1(B1:Object, C1:Object):Boolean{

    return B1>1 && C1<1;

}

如何为Flex控件应用参数不兼容的皮肤

我最近要做一个Flex按钮,使用图标是类似于日期选择控件的前后箭头,DateChooser对于箭头的绘制是通过mx.skins.halo.DateChooserMonthArrowSkin皮肤类来实现的,但是按钮的皮肤类名同DateChooser的皮肤名不同,比如Button的皮肤名分别是upSkin,overSkin等,而DateChooser的箭头按钮皮肤名是nextMonthUpSkin,nextMonthOverSkin等,为了重用mx.skins.halo.DateChooserMonthArrowSkin,我们需要重新定义按钮的皮肤名,指定好皮肤名后,再使用setStyle方法来实现皮肤类名的绑定。代码如下

InfraRecorder

一个开源的DVD记录器

直线拟合(转贴)

  • function  FitLine(x,y: array of double;len: integervar k,b,c: double):boolean;

同步内容