`
qiuyuanshan
  • 浏览: 120100 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

flex版类win任务管理器

    博客分类:
  • flex
阅读更多

最近干某活时,突然发现几年前做的一个监控模块,里头的一个小canvas:类win任务管理器,效果图:

 

 

 

下面是源码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" remove="destoryCanvas();" resize="resizeCanvas();" creationComplete="init();">
	<mx:Style>
		.common{
			font-size:11px;
			color:#00ff11;
			textAlign:center;
		}
	</mx:Style>
	<mx:Script>
		<![CDATA[
			import com.utils.Methods;
			import com.modal.MonitorLog;
			import mx.rpc.events.ResultEvent;
			import mx.controls.Label;
			import mx.collections.ArrayCollection;
			import mx.controls.Text;
			import mx.controls.Alert;
			
			
			private var nodeId:String=null;
			
			private var cpuArr:Array=new Array();
			private var memArr:Array=new Array();
			private var ioSentArr:Array=new Array();
			private var ioReceiveArr:Array=new Array();
			private var dv:Number=0;
			private var total:Number=0;
			
			private var ioReceiveColor:uint=0x00ff00;
			
			public function chgNode(nodeId:String):void{
				if(nodeId!=this.nodeId){
					this.nodeId=nodeId;
					cpuArr.length=0;
					memArr.length=0;
					ioSentArr.length=0;
					ioReceiveArr.length=0;
					dv=0;
					total=0;
					resizeCanvas();
				}
			}
			
			private function destoryCanvas():void{
				/* timer.stop();
				timer.removeEventListener(TimerEvent.TIMER,draw);
				timer=null; */
			}
			private function init():void{	
				/* timer.addEventListener(TimerEvent.TIMER,draw);
				timer.delay=1000;
				timer.start(); */
				draw();
			}
			public function draw():void{
				var log:MonitorLog=new MonitorLog();
				log.hasLog=1;
				log.cpuUseFn=0.99;
				log.ioReceive=0.50;
				log.ioSent=0.50;
				log.ramUseFn=0.10;
				log.totalSize=2048;
				log.useSize=800;
				handleLogResult(log);
				
				var ac:ArrayCollection=new ArrayCollection();
				for(var i=0;i<100;i++){
					log=new MonitorLog();
					log.hasLog=1;
					log.cpuUseFn=random(1);
					log.ioReceive=random(1);
					log.ioSent=random(1);
					log.ramUseFn=random(1);
					log.totalSize=2048;
					log.useSize=random(2048);
					ac.addItem(log);
				}
				handleLogListResult(ac);
				/* monitorLogAction.getMoniLog.addEventListener(ResultEvent.RESULT,handleLogResult);
		      	monitorLogAction.getMoniLog(this.nodeId); */
		 	}
		 	
		 	private function random(n:Number):Number{
		 		return Math.random()*n;
		 	}
		 	
		 	private function handleLogListResult(ac:ArrayCollection) : void{
		 		cpuArr.length=0;
				memArr.length=0;
				ioSentArr.length=0;
				ioReceiveArr.length=0;
				dv=0;
				total=0;
		 		
		 		//var ac:ArrayCollection=event.result as ArrayCollection;
		 		if(ac==null)
		 			return;
		 		var len:int=ac.length;
		 		if(len==0)
		 			return;
		 		var cpuV:int;
		 		var tmp1:Number=0;
		 		var tmp2:Number=0;
		 		var mem:Number;
		 		for(var i:int=0;i<len;i++){
		 			var log:MonitorLog=ac.getItemAt(i) as MonitorLog;
					if(log!=null){
						cpuV=log.cpuUseFn*100;
						tmp1=log.cpuUseFn;
						cpuArr.push(1-tmp1);
						
						mem=log.ramUseFn*100;
						tmp2=log.ramUseFn;
						memArr.push((1-tmp2));
						
						if(log.ioSent>this.maxIoSent){
							this.maxIoSent=log.ioSent;
						}
						if(log.ioReceive>this.maxIoSent){
							this.maxIoSent=log.ioReceive;
						}
						ioSentArr.push(log.ioSent);
						ioReceiveArr.push(log.ioReceive);
					}
		 			if(i==len-1){//last
		 				dv=log.useSize;
						total=log.totalSize;
						drawDisk(disk1,dv,total);
		 			}
		 		}
		 		drawCpu(cpu1,cpuV+" %",tmp1,cpu1L);
				drawCpu1(cpu2,0x00ff00,cpuArr);
				
				drawCpu(pen1,mem.toFixed(2)+" %",tmp2,pen1L);
				drawCpu1(pen2,0x00ffff,memArr);
				
				if(true){
					var tmpIoSent:Number=this.maxIoSent+10;
					var tmpIoArr:Array=new Array();
					var tmpReArr:Array=new Array();
					for(var i:int=0;i<ioSentArr.length;i++){
						tmpIoArr.push(ioSentArr[i]/tmpIoSent);
					}
					for(var i:int=0;i<ioReceiveArr.length;i++){
						tmpReArr.push(ioReceiveArr[i]/tmpIoSent);
					}
					drawCpu1(io1,0xffffff,tmpIoArr);
					drawCpu1(io1,ioReceiveColor,tmpReArr,false);
				}
		 	}
		 	private var maxIoSent:Number=0;
			private function handleLogResult(log:MonitorLog) : void{
				//var log:MonitorLog=event.result as MonitorLog;
				if(log!=null&&log.hasLog==1){
					var cpuV:int=log.cpuUseFn*100;
					var tmp1:Number=log.cpuUseFn;
					cpuArr.push(1-tmp1);
					
					drawCpu(cpu1,cpuV+" %",tmp1,cpu1L);
					drawCpu1(cpu2,0x00ff00,cpuArr);
					
					tmp1=log.ramUseFn;
					var mem:Number=log.ramUseFn*100;
					memArr.push((1-tmp1));
					
					drawCpu(pen1,mem.toFixed(2)+" %",tmp1,pen1L);
					drawCpu1(pen2,0x00ffff,memArr);
					
					//ioSent
					if(log.ioSent>this.maxIoSent){
						this.maxIoSent=log.ioSent;
					}
					if(log.ioReceive>this.maxIoSent){
						this.maxIoSent=log.ioReceive;
					}
					ioSentArr.push(log.ioSent);
					ioReceiveArr.push(log.ioReceive);
					if(true){
						var tmpIoSent:Number=this.maxIoSent+10;
						var tmpIoArr:Array=new Array();
						var tmpReArr:Array=new Array();
						for(var i:int=0;i<ioSentArr.length;i++){
							tmpIoArr.push(ioSentArr[i]/tmpIoSent);
						}
						for(var i:int=0;i<ioReceiveArr.length;i++){
							tmpReArr.push(ioReceiveArr[i]/tmpIoSent);
						}
						drawCpu1(io1,0xffffff,tmpIoArr);
						drawCpu1(io1,ioReceiveColor,tmpReArr,false);
					}
					dv=log.useSize;
					total=log.totalSize;
					drawDisk(disk1,dv,total);	
				}
			}
			
			//百分比
			private function drawCpu(per:Canvas,text:String,v:Number,label:Label):void{
				per.graphics.clear();
				/* per.removeAllChildren(); */
				var ge:Number=1;
				var h:Number=2;
				var w:Number=15;
				var lr:Number=15;
				var top:Number=3;
				var bottom:Number=20;
				var total:int=(per.height-top-bottom)/(h+ge);
				v=total-v*total;
				per.graphics.beginFill(0,1);
				per.graphics.drawRect(0,0,per.width,per.height);
				per.graphics.endFill();
				//未占的那部分
				per.graphics.beginFill(0x00ff11,0.5);
				for(var i:int=0;i<v;i++){
					per.graphics.drawRect(lr,top+(h+ge)*i,w,h);
					per.graphics.drawRect(lr+w+ge,top+(h+ge)*i,w,h);
				}
				per.graphics.endFill();
				//已占的那部分
				per.graphics.beginFill(0x00ff11,1);
				for(var i:int=v;i<total;i++){
					per.graphics.drawRect(lr,top+(h+ge)*i,w,h);
					per.graphics.drawRect(lr+w+ge,top+(h+ge)*i,w,h);
				}
				per.graphics.endFill();
				
				label.y=(h+ge)*total+top;
				label.text=text;
				label.width=per.width;
				/* var txt:Text=new Text();
				txt.x=0;
				txt.y=(h+ge)*total+top;
				txt.styleName="common";
				txt.width=per.width;
				txt.setStyle("textAlign","center");
				per.addChild(txt); */
			}
			
			//曲线
			private function drawCpu1(cpu:Canvas,color:uint,arr:Array,clear:Boolean=true):void{
				if(clear){
					cpu.graphics.clear();
					cpu.graphics.beginFill(0,1);
					cpu.graphics.drawRect(0,0,cpu.width,cpu.height);
					cpu.graphics.endFill();
					
					var grapWidth: Number = 10;
					cpu.graphics.lineStyle(1, 0x00bb66,0.5);
					//画横线
					var i : int = 0;
					var totalLength: Number = 0;
					while(totalLength <= cpu.height-grapWidth){
						cpu.graphics.moveTo(0, grapWidth * i);
						cpu.graphics.lineTo(cpu.width, grapWidth * i);
						totalLength = grapWidth * i;
						i ++;
					}
					totalLength = 0;
					i = 0;
					//画竖线
					while(totalLength <= cpu.width-grapWidth){
						cpu.graphics.moveTo(grapWidth * i, 0);
						cpu.graphics.lineTo(grapWidth * i, cpu.height);
						totalLength = grapWidth * i;
						i++;
					}
				}
				
				
				//画曲线
				cpu.graphics.lineStyle(1.2,color);//0x00ffff
				var ge:int=4;
				i=0;
				/* var value:int;
				var x1:int=0;
				var y1:int=cpu.height;
				var tmp:int=cpu.width/ge;
				while(i<tmp){
					value=(1-Math.random())*cpu.height;
					cpu.graphics.moveTo(x1,y1);
					x1=(i+1)*ge;
					y1=value;
					cpu.graphics.lineTo(x1,y1);
					i++;
				} */
				var value:int;
				var x1:int=0;
				var y1:int=0;
				var len:int=arr.length;
				var w:Number=cpu.width;
				var h:Number=cpu.height;
				var tmp:int=w/ge;
				x1=w-ge;
				y1=(new Number(arr[len-1]))*h;
				var j:int=0;
				for(j=1;j<len&&i<tmp;j++,i++){
					cpu.graphics.moveTo(x1,y1);
					x1=w-j*ge;
					y1=(new Number(arr[len-j-1]))*h;
					cpu.graphics.lineTo(x1,y1);
				}
				//清除掉没用的arr中的数据
				//清除掉过多的数据
				if(len>2000/ge&&j!=len-1){
					arr.splice(0,len-j);
				}
				
			}
			
			private function drawDisk(disk1:Canvas,d:Number,total:Number):void{
				var tmp:Number;
				if(total==0)
					tmp=0;
				else
					tmp=(disk1.width-8)*(d/total);
				disk1.graphics.clear();
				disk1.graphics.lineStyle(1,0x333333);
				disk1.graphics.beginFill(0xffffff,1);
				disk1.graphics.drawRect(4,4,disk1.width-4,12);
				disk1.graphics.endFill();
				disk1.graphics.beginFill(0x3300ff,1);
				disk1.graphics.drawRect(4,4,tmp,12);
				disk1.graphics.endFill();
				
				disk1L.text=d.toFixed(2)+"GB已用,共"+total+"GB";
			}
			
			private function resizeCanvas():void{
				cpu1.height=(this.height-45-4*8)/3-4*8;
				cpu2.width=this.width-(60+8*4)-8*3;
				if(cpu2.width<120){
					cpu2.width=120;
				}
				cpu2.height=(this.height-45-4*8)/3-4*8;
				pen1G.y=(this.height-45-4*8)/3+8;
				pen1.height=(this.height-45-4*8)/3-4*8;
				pen2G.y=(this.height-45-4*8)/3+8;
				pen2.width=this.width-(60+8*4)-8*3;
				if(pen2.width<120){
					pen2.width=120;
				}
				pen2.height=(this.height-45-4*8)/3-4*8;
				io1G.y=(this.height-45-4*8)/3*2+8;
				io1.width=this.width-8*4;
				if(io1.width<120+60+16+8){
					io1.width=120+60+16+8;
				}
				io1.height=(this.height-45-4*8)/3-4*8;
				disk1G.y=(this.height-45-4*8)+8;
				disk1.width=this.width-8*4;
				if(disk1.width<120+60+16+8){
					disk1.width=120+60+16+8;
				}
				
				initG(cpu1G,cpu1,35);
				initG(pen1G,pen1,30);
				initG(cpu2G,cpu2,90);
				initG(pen2G,pen2,105);
				
				initG(io1G,io1,75);
				initG(disk1G,disk1,60);
				
				
				//马上重新画图,获取最近的数据
				var tmp1:Number=0;
				var cpuV:int=0;
				if(cpuArr.length>0){
					tmp1=1-(new Number(cpuArr[cpuArr.length-1]));
					cpuV=tmp1*100;
				}
				
				drawCpu(cpu1,cpuV+" %",tmp1,cpu1L);
				drawCpu1(cpu2,0x00ff00,cpuArr);
				
				tmp1=0;
				var mem:Number=0;
				if(memArr.length>0){
					tmp1=1-(new Number(memArr[memArr.length-1]));
					mem=tmp1*2;
				}
				
				drawCpu(pen1,mem.toFixed(2)+" %",tmp1,pen1L); 
				drawCpu1(pen2,0x00ffff,memArr);
				
				
				//ioSent
				if(true){
					var tmpIoSent:Number=this.maxIoSent+10;
					var tmpIoArr:Array=new Array();
					var tmpReArr:Array=new Array();
					for(var i:int=0;i<ioSentArr.length;i++){
						tmpIoArr.push(ioSentArr[i]/tmpIoSent);
					}
					for(var i:int=0;i<ioReceiveArr.length;i++){
						tmpReArr.push(ioReceiveArr[i]/tmpIoSent);
					}
					drawCpu1(io1,0xffffff,tmpIoArr);
					drawCpu1(io1,ioReceiveColor,tmpReArr,false);
				}
				
				drawDisk(disk1,dv,total);
			}
			private function initG(cpu1G:Canvas,cpu1:Canvas,fontlen:Number):void{
				cpu1G.graphics.clear();
				
				cpu1G.graphics.lineStyle(1,0x666666);
				var r:Number=cpu1.width+2*8;//最右边点
				var b:Number=cpu1.height+18+8;
				//上一
				cpu1G.graphics.moveTo(0,8);
				cpu1G.graphics.lineTo(10,8);
				//上二
				cpu1G.graphics.moveTo(10+fontlen,8);
				cpu1G.graphics.lineTo(r,8);
				//左
				cpu1G.graphics.moveTo(0,8);
				cpu1G.graphics.lineTo(0,b);
				//右
				cpu1G.graphics.moveTo(r,8);
				cpu1G.graphics.lineTo(r,b);
				//下
				cpu1G.graphics.moveTo(0,b);
				cpu1G.graphics.lineTo(r,b);
			}
		]]>
	</mx:Script>
	
	<mx:Canvas id="cpu1G" x="8" y="8">
		<mx:Label x="13" y="0" text="CPU"/>
		<mx:Canvas horizontalScrollPolicy="off" verticalScrollPolicy="off" id="cpu1" x="8" y="18" width="60">
			<mx:Label x="0" id="cpu1L" styleName="common"/>
		</mx:Canvas>
	</mx:Canvas>
	<mx:Canvas id="cpu2G" x="92" y="8"><!--92=60+8*4-->
		<mx:Label x="13" y="0" text="CPU 使用记录"/>
		<mx:Canvas id="cpu2" horizontalScrollPolicy="off" verticalScrollPolicy="off" x="8" y="18"/>
	</mx:Canvas>
	
	<mx:Canvas id="pen1G" x="8">
		<mx:Label x="13" y="0" text="内存"/>
		<mx:Canvas horizontalScrollPolicy="off" verticalScrollPolicy="off" id="pen1" x="8" y="18" width="60">
			<mx:Label x="0" id="pen1L" styleName="common"/>
		</mx:Canvas>
	</mx:Canvas>
	<mx:Canvas id="pen2G" x="92" ><!--92=60+8*4-->
		<mx:Label x="13" y="0" text="物理内存使用记录"/>
		<mx:Canvas id="pen2" horizontalScrollPolicy="off" verticalScrollPolicy="off" x="8" y="18"/>
	</mx:Canvas>
	
	<mx:Canvas id="io1G" x="8" >
		<mx:Label x="13" y="0" text="IO使用记录"/>
		<mx:Canvas id="io1" horizontalScrollPolicy="off" verticalScrollPolicy="off" x="8" y="18"/>
	</mx:Canvas>
	
	<mx:Canvas id="disk1G" x="8" >
		<mx:Label x="13" y="0" text="存储空间"/>
		<mx:Canvas id="disk1" height="38" horizontalScrollPolicy="off" verticalScrollPolicy="off" x="8" y="18">
			<mx:Label x="4" y="17" id="disk1L"/>
		</mx:Canvas>
	</mx:Canvas>
	
</mx:Canvas>

 
 

 

分享到:
评论

相关推荐

    win-flexbison工具

    总的来说,`win-flex-bison`工具为Windows开发者提供了强大的词法和语法分析能力,极大地简化了复杂解析任务的开发工作,是编程工具箱中的重要成员。了解并熟练掌握其使用方法,对于提升软件开发效率具有显著价值。

    TM_C_081113_ArcGIS-API-for-Flex-教程_v1.00.pdf

    - Flex Builder 开发环境下载地址:[http://download.macromedia.com/pub/flex/flex_builder/FB3_win.exe](http://download.macromedia.com/pub/flex/flex_builder/FB3_win.exe) **1.1.3 创建基本程序** 1. 打开 ...

    用MyEclipse搭建flex+j2ee开发环境

    搭建Flex + J2EE开发环境是一项关键任务,特别是在使用MyEclipse这样的集成开发环境中。以下是一份详尽的步骤指南,以确保您成功地配置这个环境。 首先,我们需要安装MyEclipse的Flex插件。这将使MyEclipse支持Flex...

    用MyEclipse搭建flex+j2ee开发环境.pdf

    【搭建Flex + J2EE开发环境】在IT领域,开发基于Flex前端和J2EE后端的应用程序是一项常见的任务,这种组合提供了丰富的用户界面和强大的服务器端处理能力。MyEclipse作为一款强大的集成开发环境(IDE),为这种混合...

    HowTo:VS2012“ C”项目/ w Flex&Bison

    1. 右键单击解决方案资源管理器中的项目,选择“添加”&gt;“现有项”。 2. 导入`lexer.c`, `parser.c`, `parser.h`以及可能的辅助文件。 最后,配置项目的编译设置: 1. 右键单击项目,选择“属性”。 2. 在“配置...

    xampp集成包

    在XAMPP-win32-1.6.8.exe这个文件中,"win32"表示这是专为32位Windows操作系统设计的版本。这个版本可能包括了所有必要的组件,使得Flex开发者能够在Windows环境下快速搭建开发环境,进行Flex项目的开发和测试。 ...

    联想thinkstation 板载raid驱动

    这个驱动程序是运行在Windows 7 64位操作系统上的,确保RAID控制器能够正常识别和管理连接到主板上的硬盘。 描述中的“联想px10系列”可能指的是联想ThinkStation的一个具体型号,该型号配备了支持RAID功能的主板。...

    mesa opengl build tool

    8. **win_flex_bison-latest**:Flex和Bison是两个用于解析和生成词法分析器和语法分析器的工具。在构建Mesa时,它们可能用于处理源代码的解析部分。 9. **pkg-config-0.27-binwin32**:pkg-config是一个管理和查找...

    转正述职报告汇总5篇.docx

    在入职初期,员工通过学习掌握了Java的基础知识,包括语法、类、对象、异常处理等,以适应公司的工作需求。 2. **公司开发流程**:熟悉公司开发流程是新员工的重要任务。这通常包括需求分析、设计、编码、测试和...

    EXTJS介绍与开发指南

    常见的RIA技术包括Adobe的Flex、Sun的JavaFX、Microsoft的WPF/Silverlight,以及无需额外运行环境支持的Ajax。Ajax技术通过组合HTML、DOM、CSS、XML、XSLT和XMLHttpRequest等技术,实现了页面局部刷新和异步通信,...

    java、c、c++、vc、vc++、vb的区别和联系.docx

    - Java 以其“一次编写,到处运行”的特性著称,具有良好的内存管理和安全性。 - 缺点是学习曲线较陡,需要掌握众多框架和技术,如Spring、Hibernate、MyBatis等。 2. C: - C 语言是一种基础的编程语言,兼备...

    在Ubuntu上下载、编译和安装Android最新源代码

    为了完成这一任务,首先需要在一个虚拟机环境中安装Ubuntu操作系统,这是因为Android源代码不支持在Windows环境下直接构建。 #### 准备工作 1. **硬盘预留空间**:为了确保Ubuntu系统能够顺畅运行,并有足够的空间...

    vc代码合集

    2012-06-11 09:50 3,412,722 内部文件非内部程序员禁止访问谢谢1234567890123456789能够实现文件的多选,统一上传,从而实现文件的批量上传Flex多文件上传源码VS2005.rar 2012-06-11 10:08 1,481,225 几个C语言小...

Global site tag (gtag.js) - Google Analytics