2008年3月6日

[Flash开发笔记] ComboBox,List组件的二个函数
[Flash开发笔记] AS中保留多少位小数的函数

[Flash开发笔记] 如何让Flash的swf文件在客户端不缓存
[Flash开发笔记] List控件--删除指定label或data的项

[Flash开发笔记] Flash 执行exe文件
posted @ 2008-07-02 18:09 三千 阅读(519) | 评论 (0)编辑

    老是有网友找我要,所以干脆放出来,这是TTGame整理的版本,其实网上一搜到处都有。排版和没有图片不理想,但也凑合能看。
    陈冰那个版本我从来没见过,因为是付费的,不知道现在还是否有出售,不过我已经用不上了,FMS搞熟了就那些东西,剩下的就靠经验积累了。

    fms_api_cn.rar(3.61MB)>>
posted @ 2008-04-24 10:16 三千 阅读(449) | 评论 (0)编辑

以下二个函数,适合ComboBox,List件。

CheckCmbItemExists:检测某项是否已存在。有时候,需要动态向List或ComboBox组件中添加项,但是在添加前,要事先检查是否已经存在了,避免重复添加。

SelectCmbItem:选中某项。有时候需要使用程序将List或ComboBox组件中某项选中。


    //检测某项是否已存在。
    function
 CheckCmbItemExists(_cmb, _data) {
        
var l = _cmb.length;
        
for (var j = 0; j<l; j++) {
            
if (_cmb.getItemAt(j).data == _data) {
                
return true;
            }
        }
        
return false;
    }
    
//选中某项。
    function SelectCmbItem(_cmb, _data) {
        
var l = _cmb.length;
        
var index = 0;
        
for (var j = 0; j<l; j++) {
            
if (_cmb.getItemAt(j).data == _data) {
                index 
= j;
                
break;
            }
        }
        _cmb.selectedIndex 
= index;
    }

posted @ 2008-04-21 11:41 三千 阅读(177) | 评论 (0)编辑
    有时候需要返回小数点后若干位的一个浮点数。如2.16832,保留二位小数变成:2.17,这样的函数在AS 2.0中是没有的,需要自己写:

function getPoint(num, l) {
    
return (Math.round(num*Math.pow(10, l))/Math.pow(10, l));
}


    用法
    num:要处理的浮点数;
    l:要保留的小数位个数;
    如:getPoint(2.16832,2),输出为:2.17
    注意
    在使用这个函数时,要注意溢出,因为num*Math.pow(10, l)及有可能超出了AS中浮点数所能表示的范围,从而导致你不想要的结果,另外,当输入数num比较大的时候,虽然还在浮点数表示范围内,但是小数点返回就可能不准确了,如:getPoint(12345678.123456789123, 10) ,输出结果:12345678.1234568,而不是12345678.1234567891。

   
posted @ 2008-03-13 20:25 三千 阅读(146) | 评论 (0)编辑

很早以前写过一篇文章(用C#截取指定长度的中英文混合字符串),但是对性能没有测试,有人说我写的这个方法性能有问题,后来想,可能真会有BT之需求要求传入一个几万K甚至几M体积的字符串进来,那将会影响正则Match的速度,比如文章系统中就极有可能用到,今天有点时间,就改进了一下,代码如下:

    public static string getStr(string s,int l,string endStr)
    
{
        
string temp = s.Substring(0, (s.Length < l)?s.Length:l);
        
        
if (Regex.Replace(temp,"[\u4e00-\u9fa5]","zz",RegexOptions.IgnoreCase).Length<=l)
        
{
            
return temp;
        }

        
for (int i=temp.Length;i>=0;i--)
        
{
            temp 
= temp.Substring(0,i);
            
if (Regex.Replace(temp,"[\u4e00-\u9fa5]","zz",RegexOptions.IgnoreCase).Length<=l-endStr.Length)
            
{
                
return temp + endStr;
            }
    
        }

        
return endStr;
    }


此修改版的方法多加了个参数"string endStr",是指当字符串"string s"超过指定长度"int l"时,对结尾的处理,比如要不要加上省略号"..."或加上其它字符。
另外,添加了省略号之后,省略号长度也是算在结果的长度之内了。

    用法如:

    getStr("中国1中国中国中1111中国", 23,"") 
    //output:中国1中国中国中1111中国

    getStr("中国1中国中国中1111中国", 23,"...") 
    //output:中国1中国中国中1111...

    getStr("中国1中国中国中1111中国中国", 23,"")    
    //output:中国1中国中国中1111中国

    getStr("中国1中国中国中1111中国中国", 23,"...")
    //output:中国1中国中国中1111...

----------------------------------------------------------------------

    补充:"kpz"回复说上边的方法会截取失真,而我又无法做到穷尽测试,所以换了另一种写法,为了考虑性能结果把逻辑搞的有点"晕",反复测试了多次,代码如下:

public static string getStr2(string s, int l,string endStr) 
    

        
string temp = s.Substring(0, (s.Length < l+1)?s.Length:l+1);    
        
byte[] encodedBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(temp);
        
        
string outputStr = ""
        
int count = 0;     
        
        
for (int i = 0; i < temp.Length; i++
        

            
if ((int)encodedBytes[i] == 63)
                count 
+= 2
            
else
                count 
+= 1

            
if (count <= l-endStr.Length)
                outputStr 
+= temp.Substring(i,1); 
            
else if (count>l)    
                
break;            
        }
 
        
        
if (count<=l)
        
{
            outputStr
=temp;
            endStr
="";
        }

        
        outputStr 
+= endStr;    
        
        
return outputStr; 
    }

用法和参数含义均同前,注意省略号也占位置,算了长度。

posted @ 2008-03-06 10:06 三千 阅读(336) | 评论 (7)编辑