博客公告(点击显示/隐藏)|  今日心情:神学
2010-07-30 21:09:43
小S吧今天你来了吗?更新速度:每周2-3篇以上!
在俺博客看到有用的东西,学习了之后,记得回访带点人气哦 ^_^ 嘿嘿!
欢迎跟俺交换友情链接啊。。留言,直接QQ等联系我都行啊
转载本博客文章请注明:来源小S吧——sunbright博客,链接地址:http://www.xiaos8.com
一位正在初学C++的同事,突然问我一个问题,说用打印函数,只用for循环,怎么输出一个菱形?
想起来这是以前学编程时,非常基础的一个问题
本来以为很简单,于是随便想了一下,发现还真没想象那么简单额
于是乎,努力仔细的想想,于是下面的答案就出来了
当然是Flash写的:
我这个用了3个for循环,不知道有没有用的for循环更少的方法?
(注意哦,只能用for循环和基本的运算)
var k:int, result:String = "", sum:int = 7;
var s:int = Math.abs(- sum / 2);
for(var i:int = 0; i < sum; i ++){
  var n:int = Math.abs(s - i);
  var t:int = sum - n * 2;
  for(k = 0; k < n; k ++){
    result += " ";
  }
  for(k = 0; k < t; k ++){
    result += "*";
  }
  result += "\n";
}
trace(result);

输出结果:
  *
 ***
 *****
*******
 *****
 ***
  *

鼠标的滚轮不灵活了,自己拆开看了一下
发现是橡皮圈和滚轮太松了,摩擦力不够,致使滚动滚轮时,滚动条没任何反应
于是乎就想办法增加橡皮圈和滚轮之间的摩擦力
刚开始用纸在橡皮圈和滚轮之间再固定一层增加摩擦力,弄好后效果倒是达到了,但是橡皮圈因此鼓了起来,致使滚动时,老是被卡住
突然想起个把月买过502胶,把橡皮圈和滚轮之间涂上一层502胶,少许时间后,效果达到了
于是在将鼠标组装起来,试了一下效果,嘿!还真不错!
又省了几十块钱换鼠标了,哇哈哈!
很少写Flex相关的东西,今天遇到了这个问题,想了很多办法,也查了百度,都没有得到比较正确的办法。
下面是解决的办法,但不知道有没有更简单的办法就是了,俺只是业余摆弄一下Flex做一些AIR小工具。

首先是一段DataGrid相关实例代码:

<mx:DataGrid id="dataComp" dataProvider="{resultList}" width="100%" height="100%" sortableColumns="false" selectable="false"
  resizableColumns="false" draggableColumns="false" resize="dataCompResizeHandle()">
  <mx:columns>
    <mx:DataGridColumn dataField="line" headerText="行数" textAlign="center" width="40"/>
    <mx:DataGridColumn dataField="text" headerText="匹配文本" paddingLeft="5" paddingRight="5"
      itemRenderer="mx.controls.Label"/>
    <mx:DataGridColumn dataField="path1" headerText="路径" paddingLeft="5" paddingRight="5"
      itemRenderer="mx.controls.Label"/>
    <mx:DataGridColumn dataField="times" headerText="次数" textAlign="center" width="40"/>
  </mx:columns>
</mx:DataGrid>

侦听resize事件,当得到resize之后做这样的操作:

//数据对象重设尺寸处理
private var widthList:Array = [40,0.7,0.3,40];
private function dataCompResizeHandle():void{
  dataComp.validateNow();
  var value:Number,display:DataGridColumn,i:int;
  var list:Array = dataComp.columns;
  var length:int = list.length;
  var dataWidth:int = 0;
  for(i = 0; i < length; i ++){
    display = list[i];
    dataWidth += display.width;
  }
  for(i = 0; i < length; i ++){
    display = list[i];
    value = widthList[i];
    if(value > 1){
      dataWidth -= value;
      display.width = int(value);
    }
  }
  for(i = 0; i < length; i ++){
    display = list[i];
    value = widthList[i];
    if(value <= 1) display.width = int(dataWidth * value);
  }
}

要点注释:
1、得到resize之后一定要dataComp.validateNow();,这样取出来的总列宽才是正确的!
2、第一个for循环在计算总列宽,直接取dataComp的宽度是不对的,它会包含滚动条的宽度,我也不知道有没有什么办法可以直接取到总列宽,因此我采用了for循环去累加列宽;
3、第二个for循环在设置widthList中是在设置需要固定列宽的子项,然后从总列宽中减去;
4、第三个for循环在设置widthList中是按百分比设置子项列宽。