- 浏览: 287789 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
xisuchi:
咋没人收藏阿
前端开发大众手册(包括工具、网址、经验等) -
past2010yeah:
太好了,解决了我纠结很久的问题!!!非常感谢!
解决Flex跨域"访问URL时遇到安全性错误" -
shlei:
xiao_kai 写道这样会不会牺牲性能啊~~会,但是这是暂时 ...
解决flex4 spark 找不到外观错误 -
xiao_kai:
这样会不会牺牲性能啊~~
解决flex4 spark 找不到外观错误 -
jcl860:
兄台:左边面板是图片,还是用mxml画出来的图形?
仿IBM-BPM Editor实现的WorkFlowEditor
前段时间根据公司要求做一个工作流方面的demo,遂模仿IBM的BPM Monitor做了一个demo。因Company Secret原因,不能公开全部源码,现将部分代码贴于此,供各位大虾点评。
画线代码:
那个我暂时还没有做出来,我在做业务方面的东西,不过我有个思路:你把你的流程图的容器的宽定义为距离容器原点横坐标最远的节点X轴加上节点的宽度,纵坐标也一样,然后再给流程图所在容器的父容器加一个slider,当流程图容器被拖拽超出流程图容器的父容器时,slider增加长度,这个slider有属性可以设置。
好的,谢谢你的提醒,我一会去试试,最近在做SSO,搞得头大,好久没忙活前端了。
不好意思,我说的是scroller,不是slider,之前打错了。
那个我暂时还没有做出来,我在做业务方面的东西,不过我有个思路:你把你的流程图的容器的宽定义为距离容器原点横坐标最远的节点X轴加上节点的宽度,纵坐标也一样,然后再给流程图所在容器的父容器加一个slider,当流程图容器被拖拽超出流程图容器的父容器时,slider增加长度,这个slider有属性可以设置。
好的,谢谢你的提醒,我一会去试试,最近在做SSO,搞得头大,好久没忙活前端了。
那个我暂时还没有做出来,我在做业务方面的东西,不过我有个思路:你把你的流程图的容器的宽定义为距离容器原点横坐标最远的节点X轴加上节点的宽度,纵坐标也一样,然后再给流程图所在容器的父容器加一个slider,当流程图容器被拖拽超出流程图容器的父容器时,slider增加长度,这个slider有属性可以设置。
不好意思,因为是在公司做的,所以有相关的保密约束,不过我可以贴出来小部分代码,剩下的就要你举一反三了。
画线代码:
package com { import flash.geom.Point; import mx.controls.Text; import mx.core.UIComponent; /** * * 控制流程图的画线 * * */ public class Line extends UIComponent { /** 线段的显示文本 **/ public var label:String; /** 箭头大小 **/ public var arrowSize:uint = 3; /** 线的颜色 **/ public var lineColor:uint = 0xffffff; /** 箭头方向 **/ private var aspect:int=1; /** 开始的一段直线长度 **/ private var startLine:int=10; /** 线的名称 **/ private var _label:Text; /** 开始节点 **/ private var startPoint:Point; /** 结束节点 **/ private var endPoint:Point; /** 线段连接的开始节点名称 **/ public var fromNode:String; /** 线段连接的结束节点名称 **/ public var toNode:String; /** 初始化文本样式 **/ private static var classConstructed:Boolean = Nodes.initStyles(); public function Line() { super(); } /** 创建组建的子组件 **/ override protected function createChildren():void{ super.createChildren(); if(!_label){ _label=new Text(); var textStyleName:*=getStyle("textStyleName"); _label.styleName=textStyleName?textStyleName:this; addChild(_label); } } /** 更改属性 **/ override protected function commitProperties():void{ super.commitProperties(); if(_label){ _label.text=label; } } /** 在组建中画出子组件,并确定子组件在组件中的位置和大小 **/ override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{ super.updateDisplayList(unscaledWidth,unscaledHeight); if(!_label) return; //endPoint.x-startPoint.x,endPoint.y-startPoint.y _label.move(0,0); _label.setActualSize(width,30); } /** 带箭头的线 **/ private function drawLine(startPoint:Point,endPoint:Point,startL:int):void{ getLine(startPoint,endPoint,startL); drawArrowHead(startPoint,endPoint); } /** 自定义画线 **/ public function cusLine(arr:Array):void{ var len:int=arr.length; if(len==0)return; if(len==1){ var p:Object=arr[0] as Object; this.graphics.clear();//清除之前的画线痕迹 drawLine(p.sPoint as Point,p.ePoint as Point,p.sLine as int); return; } for(var i:int=0;i<arr.length;i++){ var points:Object=arr[i] as Object; getLine(points.sPoint as Point,points.ePoint as Point,points.sLine as int); } drawArrowHead(Object(arr[len-1]).sPoint as Point,Object(arr[len-1]).ePoint as Point); } /** 画线 **/ private function getLine(startPoint:Point,endPoint:Point,startL:int):void{ this.startPoint=startPoint; this.endPoint=endPoint; if(startL>0) startLine=startL; this.graphics.moveTo(startPoint.x,startPoint.y); this.graphics.lineStyle(2,lineColor,0.7); //用于确定根据开始节点和结束节点画出的线是否是直线 if(startPoint.x==endPoint.x||startPoint.y==endPoint.y){ this.graphics.lineTo(endPoint.x,endPoint.y); //确定箭头的方向 if(startPoint.y==endPoint.y&&startPoint.x<endPoint.x) aspect=1;//箭头向右 else if(startPoint.y==endPoint.y&&startPoint.x>endPoint.x) aspect=2;//箭头向左 else if(startPoint.y>endPoint.y&&startPoint.x==endPoint.x) aspect=3;//箭头向上 else aspect=4;//箭头向下 }else{ //开始节点横坐标小于结束节点时 if(startPoint.x<endPoint.x){ aspect=1; this.graphics.lineTo(startPoint.x+startLine,startPoint.y); //开始节点纵坐标小于结束节点时,改变弧线的方向 if(startPoint.y<endPoint.y){ this.graphics.curveTo(startPoint.x+startLine+10,startPoint.y,startPoint.x+startLine+10,startPoint.y+10); this.graphics.lineTo(startPoint.x+startLine+10,endPoint.y-10); this.graphics.curveTo(startPoint.x+startLine+10,endPoint.y,startPoint.x+startLine+20,endPoint.y); }else{ this.graphics.curveTo(startPoint.x+startLine+10,startPoint.y,startPoint.x+startLine+10,startPoint.y-10); this.graphics.lineTo(startPoint.x+startLine+10,endPoint.y+10); this.graphics.curveTo(startPoint.x+startLine+10,endPoint.y,startPoint.x+startLine+20,endPoint.y); } this.graphics.lineTo(endPoint.x,endPoint.y); }else{//开始节点横坐标大于结束节点时 aspect=2; this.graphics.lineTo(startPoint.x-startLine,startPoint.y); if(startPoint.y<endPoint.y){ this.graphics.curveTo(startPoint.x-startLine-10,startPoint.y,startPoint.x-startLine-10,startPoint.y+10); this.graphics.lineTo(startPoint.x-startLine-10,endPoint.y-10); this.graphics.curveTo(startPoint.x-startLine-10,endPoint.y,startPoint.x-startLine-20,endPoint.y); }else{ this.graphics.curveTo(startPoint.x-startLine-10,startPoint.y,startPoint.x-startLine-10,startPoint.y-10); this.graphics.lineTo(startPoint.x-startLine-10,endPoint.y+10); this.graphics.curveTo(startPoint.x-startLine-10,endPoint.y,startPoint.x-startLine-20,endPoint.y); } this.graphics.lineTo(endPoint.x,endPoint.y); } } startLine=10;//还原初始值 } /** 画箭头 **/ private function drawArrowHead(startPoint:Point,endPoint:Point):void{ //得到箭头的角度 var angle:Number = this.getAngle(startPoint,endPoint); var centerX:Number = endPoint.x - arrowSize * Math.cos(angle*(Math.PI/180)); var centerY:Number = endPoint.y + arrowSize * Math.sin(angle*(Math.PI/180)); var leftX:Number = centerX + arrowSize * Math.cos((angle+120)*(Math.PI/180)); var leftY:Number = centerY - arrowSize * Math.sin((angle+120)*(Math.PI/180)); var rightX:Number = centerX + arrowSize * Math.cos((angle+240)*(Math.PI/180)); var rightY:Number = centerY - arrowSize * Math.sin((angle+240)*(Math.PI/180)); this.graphics.lineStyle(2,lineColor,1); this.graphics.moveTo(endPoint.x,endPoint.y); this.graphics.lineTo(leftX,leftY); this.graphics.lineTo(centerX,centerY); this.graphics.lineTo(rightX,rightY); this.graphics.lineTo(endPoint.x,endPoint.y); } /** 得到箭头的角度 **/ private function getAngle(startPoint:Point,endPoint:Point):Number{ var temX:Number = 0; var temY:Number = 0; //调整箭头方向 switch(aspect){ case 1: //箭头向右 temX= endPoint.x - (endPoint.x-10); temY= endPoint.y - endPoint.y; break; case 2: //箭头向左 temX= endPoint.x - (endPoint.x+10); temY= endPoint.y - endPoint.y; break; case 3: //箭头向上 temX= endPoint.x - endPoint.x; temY= endPoint.y - (endPoint.y-10); break; case 4: //箭头向下 temX= endPoint.x - endPoint.x; temY= endPoint.y - (endPoint.y+10); break; } var angle:Number = Math.atan2(temY,temX)*(180/Math.PI) return angle; } /** 删除 **/ public function removeLine():void{ this.graphics.clear(); } } }
评论
7 楼
421081646
2012-08-08
挺好的,学习中
6 楼
shlei
2011-03-07
andy_ghg 写道
shlei 写道
andy_ghg 写道
我写了一个类似的东西,不过不是用来做流程设计的,是用来展现数据的,不过基础组件应该是差不多的,不过我现在遇到一个问题,就是那个工作区的问题,我现在想做成跟BPM一样的工作区,就是将组件拖拽至边缘后会自动出现滚动条。我现在基本上都做的差不多了,就差这一个实现了,想请教一下你是怎么做的,我现在用的是Flexlib里面的DragCanvas这个开源的组件,但是做scale的时候会出现问题,所以想自己写一个。
留个Email,andy_ghg@163.com希望在这方面能多交流,我这边完成的组件有Node,Line,ZoomPanel(就是缩略图)。线是带箭头且不深入到节点内部的,Node是用的FXG做图标的。
留个Email,andy_ghg@163.com希望在这方面能多交流,我这边完成的组件有Node,Line,ZoomPanel(就是缩略图)。线是带箭头且不深入到节点内部的,Node是用的FXG做图标的。
那个我暂时还没有做出来,我在做业务方面的东西,不过我有个思路:你把你的流程图的容器的宽定义为距离容器原点横坐标最远的节点X轴加上节点的宽度,纵坐标也一样,然后再给流程图所在容器的父容器加一个slider,当流程图容器被拖拽超出流程图容器的父容器时,slider增加长度,这个slider有属性可以设置。
好的,谢谢你的提醒,我一会去试试,最近在做SSO,搞得头大,好久没忙活前端了。
不好意思,我说的是scroller,不是slider,之前打错了。
5 楼
andy_ghg
2011-03-06
shlei 写道
andy_ghg 写道
我写了一个类似的东西,不过不是用来做流程设计的,是用来展现数据的,不过基础组件应该是差不多的,不过我现在遇到一个问题,就是那个工作区的问题,我现在想做成跟BPM一样的工作区,就是将组件拖拽至边缘后会自动出现滚动条。我现在基本上都做的差不多了,就差这一个实现了,想请教一下你是怎么做的,我现在用的是Flexlib里面的DragCanvas这个开源的组件,但是做scale的时候会出现问题,所以想自己写一个。
留个Email,andy_ghg@163.com希望在这方面能多交流,我这边完成的组件有Node,Line,ZoomPanel(就是缩略图)。线是带箭头且不深入到节点内部的,Node是用的FXG做图标的。
留个Email,andy_ghg@163.com希望在这方面能多交流,我这边完成的组件有Node,Line,ZoomPanel(就是缩略图)。线是带箭头且不深入到节点内部的,Node是用的FXG做图标的。
那个我暂时还没有做出来,我在做业务方面的东西,不过我有个思路:你把你的流程图的容器的宽定义为距离容器原点横坐标最远的节点X轴加上节点的宽度,纵坐标也一样,然后再给流程图所在容器的父容器加一个slider,当流程图容器被拖拽超出流程图容器的父容器时,slider增加长度,这个slider有属性可以设置。
好的,谢谢你的提醒,我一会去试试,最近在做SSO,搞得头大,好久没忙活前端了。
4 楼
shlei
2011-01-07
andy_ghg 写道
我写了一个类似的东西,不过不是用来做流程设计的,是用来展现数据的,不过基础组件应该是差不多的,不过我现在遇到一个问题,就是那个工作区的问题,我现在想做成跟BPM一样的工作区,就是将组件拖拽至边缘后会自动出现滚动条。我现在基本上都做的差不多了,就差这一个实现了,想请教一下你是怎么做的,我现在用的是Flexlib里面的DragCanvas这个开源的组件,但是做scale的时候会出现问题,所以想自己写一个。
留个Email,andy_ghg@163.com希望在这方面能多交流,我这边完成的组件有Node,Line,ZoomPanel(就是缩略图)。线是带箭头且不深入到节点内部的,Node是用的FXG做图标的。
留个Email,andy_ghg@163.com希望在这方面能多交流,我这边完成的组件有Node,Line,ZoomPanel(就是缩略图)。线是带箭头且不深入到节点内部的,Node是用的FXG做图标的。
那个我暂时还没有做出来,我在做业务方面的东西,不过我有个思路:你把你的流程图的容器的宽定义为距离容器原点横坐标最远的节点X轴加上节点的宽度,纵坐标也一样,然后再给流程图所在容器的父容器加一个slider,当流程图容器被拖拽超出流程图容器的父容器时,slider增加长度,这个slider有属性可以设置。
3 楼
andy_ghg
2011-01-07
我写了一个类似的东西,不过不是用来做流程设计的,是用来展现数据的,不过基础组件应该是差不多的,不过我现在遇到一个问题,就是那个工作区的问题,我现在想做成跟BPM一样的工作区,就是将组件拖拽至边缘后会自动出现滚动条。我现在基本上都做的差不多了,就差这一个实现了,想请教一下你是怎么做的,我现在用的是Flexlib里面的DragCanvas这个开源的组件,但是做scale的时候会出现问题,所以想自己写一个。
留个Email,andy_ghg@163.com希望在这方面能多交流,我这边完成的组件有Node,Line,ZoomPanel(就是缩略图)。线是带箭头且不深入到节点内部的,Node是用的FXG做图标的。
留个Email,andy_ghg@163.com希望在这方面能多交流,我这边完成的组件有Node,Line,ZoomPanel(就是缩略图)。线是带箭头且不深入到节点内部的,Node是用的FXG做图标的。
2 楼
shlei
2010-12-27
rongxh2010 写道
Point这个类的代码贴来看看,呵呵
不好意思,因为是在公司做的,所以有相关的保密约束,不过我可以贴出来小部分代码,剩下的就要你举一反三了。
graphics.clear(); graphics.lineStyle(2,lineColor,1); var fillType:String=GradientType.LINEAR; var color:Array=[0XFFFFFF, 0XCDE891]; var alphas:Array=[1,1]; var ratios:Array=[0x00,0xff]; var matr:Matrix=new Matrix(); matr.createGradientBox(width,height,Math.PI/4,0,0); var spreadMethod:String=SpreadMethod.PAD; graphics.beginGradientFill(fillType,color,alphas,ratios,matr,spreadMethod); graphics.drawCircle(unscaledWidth/2,CIRCLE_RADIUS,CIRCLE_RADIUS); graphics.endFill();
1 楼
rongxh2010
2010-12-25
Point这个类的代码贴来看看,呵呵
发表评论
-
Flex4之皮肤定制【Skin类和Skin类】
2013-10-05 19:19 1144第一、关于spark.skin.SparkSkin类的 ... -
基于 Cairngorm MVC 框架的 Flex 程序设计与开发
2013-10-05 18:38 991翟 峰, 开发工程师, IBM 吴 镝, IBM 实习生, I ... -
在flex中使用model标签读取配置文件的方法
2012-08-16 09:54 9911.使用 Model标签 <mx:Model id=& ... -
flex xml操作
2012-04-25 10:48 1162今天我们来看看AS3中新的XML处理方法:E4X,直到现在,E ... -
Flex 创建过滤特定文件的FileReference
2012-03-01 16:13 1654下面的代码演示了Flex中如何创建一个可以过滤特定后缀文件的F ... -
Flex 根据图片url获取bitmapdata并绑定到多个Image
2012-03-01 14:40 3048private function getImage(url ... -
Flex 开始日期与结束日期DateField组件
2012-03-01 13:45 1826<?xml version="1.0&qu ... -
匹配已选中数据的某字段和下拉框数据
2012-03-01 08:41 1304package YD.Web.Common.Utils ... -
解决flex4 spark 找不到外观错误
2012-02-27 14:01 1905spark组件为了提高性能adobe做了很多努力,同 ... -
Flex垃圾回收和性能优化的一些总结
2012-02-27 11:30 1209本文是Kenshin根据一些对 ... -
【转】关于Flex未来走向的问答
2011-11-22 09:50 1763•转自:http://www.riadev.com/flex- ... -
Flex 关于validateNow方法
2011-11-18 10:42 2298validateNow(); 官方解释:验证并更新此对 ... -
Flex 数值转IP
2011-11-18 10:19 909package common { public cl ... -
Flex 关于遍历
2011-11-18 10:15 1041获取XML属性名、值 var x : XML = < ... -
Flex HttpService重用2
2011-09-28 13:30 1197HttpService工具类: package commo ... -
动态配置AMF与后台接口调用
2011-09-28 11:47 1507以下是一个AMF调用类: package common ... -
Unix时间戳转化AS3日期格式
2011-09-21 16:14 2299Unix时间戳:1254671828 返回:2009-10-1 ... -
Responder使用方法
2011-07-11 18:03 2136Responder 是一个简单的处理远程异步调用的结果/异常的 ... -
AS3.0
2011-03-14 15:40 1484┏━━━━━━━━━━━━━━━━━━┓ ┃ 第三部分:Ac ... -
关于as3的一些总结
2010-11-12 09:23 11011.载入外部xml方法 注意点:如果将flash放在html ...
相关推荐
【标题】"仿IBM-BPM Editor实现的WorkFlowEditor"是一个关于流程编辑器开发的项目,旨在模仿IBM的Business Process Manager (BPM)编辑器的功能。这个编辑器主要用于设计、编辑和管理工作流,它是业务流程自动化的...
ibm-pc汇编语言程序设计教程参考答案ibm-pc汇编语言程序设计教程参考答案ibm-pc汇编语言程序设计教程参考答案ibm-pc汇编语言程序设计教程参考答案ibm-pc汇编语言程序设计教程参考答案ibm-pc汇编语言程序设计教程参考...
ibm-java-sdk-8.0-5.11-x86_64-archive.bin ibm的jdk 8.0版本
1. **下载与准备**:首先,你需要从IBM官方网站或者其他可信赖的来源下载`ibm-java-ppc64-sdk-7.0-10.50.bin`这个二进制文件。这个文件是安装程序的载体,包含了所有必要的组件。 2. **赋予执行权限**:由于AIX系统...
IBM Thread and Monitor Dump Analyzer (TMDA) 是一个专门用于分析Java应用程序的线程和监控器转储的工具。在Java应用开发和运维过程中,线程 dump 是诊断和解决性能问题、死锁、线程阻塞等关键问题的重要手段。TMDA...
此“IBM-MQ项目DEMO和Jar包.zip”压缩包显然包含了与IBM MQ相关的示例代码和必要的JAR库文件,用于帮助开发者理解和使用IBM MQ。 首先,让我们来详细探讨IBM MQ的核心概念和技术特性: 1. **消息中间件**:IBM MQ...
linux 64位IBM JDK1.8 linux 64位
2. **IBM Java演示包** - `java-1.6.0-ibm-demo-1.6.0.16.30-1jpp.i386.rpm` 这个包包含了示例程序和演示应用,用户可以通过它们了解IBM Java的功能和用法,同时也可以用于教学和学习目的。 3. **IBM Java源代码包...
1) 本工程主要演示在SPRING BOOT工程中怎样使用JMS集成IBM-MQ及TLQ两种消息中间件产品 2) 使用SPRING BOOT Conditional机制实现了两种产品按需加载,工程会根据配置文件开关动态加载 3) 实现了普通队列消息发送与...
IBM-WWPMM方法论 IBM-WWPMM方法论 基本概念 项目计划 项目授权书 组建项目团队 构建项目管理主计划框架 完成工作分解(WBS) 进行风险识别、制定风险管理计划 修订WBS并估算每一项任务的成本(时间) 确定任务间的...
因素与员工离职和绩效有关(数据集)-ibm-hr-analytics-attrition-dataset.zip因素与员工离职和绩效有关(数据集)-ibm-hr-analytics-attrition-dataset.zip因素与员工离职和绩效有关(数据集)-ibm-hr-analytics-...
【IBM-Full官方Visio形状】是一套专为IBM产品设计的Visio形状库,它包含了大量的图形元素,用于在Microsoft Visio中绘制IBM相关的系统架构、网络拓扑、流程图和其他技术图表。这些形状可以帮助IT专业人员更直观地...
- 本书可能会介绍如何通过中断服务程序(ISR)或者系统调用来实现对操作系统服务的调用,这对于开发能够在IBM-PC上运行的应用程序来说非常重要。 5. **调试与优化** - 编写高质量的汇编语言程序往往需要经过多次...
ibm-java-jre-6.0-16.30-linux-i386.binibm-java-jre-6.0-16.30-linux-i386.bin
IBM MQ Explorer是IBM提供的一个强大的消息中间件管理工具,尤其适用于Windows 64位操作系统。这个9.2.1.0版本是专为IBM Message Queuing (MQ) 7.0及更高版本设计的,它提供了图形用户界面,使得MQ的配置、管理和...
ibm open j9的虚拟机包(mac os x64)
ibm thread and monitor dump analyzer https://www.ibm.com/support/pages/ibm-thread-and-monitor-dump-analyzer-java-tmda
根据提供的文件信息,本篇将围绕“IBM-PC汇编语言程序设计实验报告1”进行深入探讨,重点解析四个子程序的功能实现以及如何通过主程序完成一个简单的乐曲程序。 ### 一、实验背景 在计算机科学领域,汇编语言是一...
在IBM-PC汇编语言中,这通常通过定义数据段(datarea segment)并存储字符序列来实现。例如,定义两个字符串string1和string2,并使用db指令分配存储空间并赋值。字符的显示则通过调用DOS中断服务,如INT 21H的AH=09...