2008年10月26日星期日

openflashchart 2 .net添加了一个IHttpHandler

新添加的httphanlder,使得图形可以不再需要使用单独的数据文件。
使用方式,
1,web.config中添加
<httpHandlers>
<add verb="*" path="ofc_handler.ofc" type="OpenFlashChart.WebHandler.ofcHandler, OpenFlashChart"/>
</httpHandlers>
2,在数据生成的时候,把chart的示例赋予control中的Chart属性

具体见代码。

ArrayList data1 = new ArrayList();
Random rand = new Random(DateTime.Now.Millisecond);
for (double i = 0; i < temp =" rand.Next(30);"> 20)
data1.Add(new LineDotValue(temp, "#fe0"));
else
{
data1.Add(temp);
}
}

OpenFlashChart.LineHollow line1 = new LineHollow();
line1.Values = data1;
line1.HaloSize = 0;
line1.Width = 2;
line1.DotSize = 5;

line1.Tooltip = "提示:#val#";

chart.AddElement(line1);

chart.Title = new Title("line演示");
chart.Y_Axis.SetRange(0, 35, 5);
chart.Tooltip = new ToolTip("全局提示:#val#");
chart.Tooltip.Shadow = true;
chart.Tooltip.Colour = "#e43456";
chart.Tooltip.MouseStyle = ToolTipStyle.CLOSEST;
OpenFlashChartControl1.EnableCache = false;
OpenFlashChartControl1.Chart = chart;

2008年10月10日星期五

VS设计时问题

下面类似的错误,一般是由于自定义控件中出现。

The variable '****' is either undeclared or was never assigned.

Hide    Edit

at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializePropertyAssignStatement(IDesignerSerializationManager manager, CodeAssignStatement statement, CodePropertyReferenceExpression propertyReferenceEx, Boolean reportError)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeAssignStatement(IDesignerSerializationManager manager, CodeAssignStatement statement)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement)

VS应该是(猜测?)通过InitializeComponent函数来初始化在设计时相关的变量,所以程序本身运行时不会有问题,不过却无法正常的显示设计的页面。
例如下面的代码(部分)
      ///
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        ///

        private void InitializeComponent()
        {
           
            this.SuspendLayout();
            //
            // button1
            //
            this.button1.Location = new System.Drawing.Point(40, 86);
        
            ……
            this.ResumeLayout(false);

        }

        #endregion
      
        private System.Windows.Forms.Button button1= new System.Windows.Forms.Button();


button1变量在InitializeComponent函数外声明并初始化,虽然不会影响程序的正确性,不过再设计时无法确认button1是否初始化
因此,会给出错误(原则上说VS在这点上有点苛刻。),改为下面的可以消除设计时的错误。
private void InitializeComponent()
        {
            button1 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            //
            // button1
            //
            this.button1.Location = new System.Drawing.Point(40, 86);
            ……
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.Button button1;//= new System.Windows.Forms.Button();

上面的错误的话,VS2008中还可以给出错误的行数(2005不可以),可以据此修改,不过下面一种可以引起的错误,VS2008
也没法给出。
比如我在自定义控件里定义一个属性(Property)
public string JustForTest
        {
            get
            {
                return ConfigurationManager.AppSettings["Test"]??string.Empty;
            }
            set
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                config.AppSettings.Settings["Test"].Value = value;
                config.Save(ConfigurationSaveMode.Modified);
            }
        }

    这样的属性在运行时和设计时对这个控件来说也是没有问题的,不过在设计的时候,比如我把这个自定义的控件添加到了一个Form上,
这个Form就会出现问题。
VS会自动的初始化这个控件的Public属性值,
 this.userControl11.JustForTest = null;
而在设计时,这个属性是无法获取的,错误产生。

VS还需要继续在设计时的支持方面努力啊

2008年9月27日星期六

VSS branch ,share,merge 操作

首先不得不说,操作的方式给人的感觉很不好。
vss 的分支(branch)操作需要先进行share(分享)的操作,当然也可以在share的时候,选择branch after shared的复选框。
具体操作,
vss操作的不好之处,在与先选择目的地,然后才选择 需要共享的 工程目录
比如,现在我有一个项目,名称为 "动态用户控件应用框架",其中有两个工程,一个Framework工程,一个web站点。我想创建一个分支 ,分支与主项目共享同一个Framework工程,这样的话,任何一个项目中修改,都会反应到另一个项目中,同时我需要不同的web站点。
操作步骤,创建项目shared2

,然后选择 share to $ 的选项

然后选择第一个项目中的Framework工程。

同样的步骤创建web工程,不过要选择 Branch After share的复选框。

对share后的文件中的修改,会同时在各个项目中反应,对branch的文件的修改对各个项目中没有影响。
branch的文件可以执行merge操作。

2008年9月10日星期三

看下google blog 对Title的中文翻译,;)

现在好像改掉了

2008年8月30日星期六

actionscript3 代码片段4 ――绘制3D bar

代码从openflashchart中取出

import flash.display.Sprite;
import flash.filters.DropShadowFilter;
import flash.geom.Matrix;

/**
* ...
* @author DefaultUser (Tools -> Custom Arguments...)
*/
public class Snippet3D_5 extends Sprite
{
private var col:Number = 0x3e4e4;// , 0x3ef43e];
public function Snippet3D_5()
{
var dropShadow:DropShadowFilter = new flash.filters.DropShadowFilter();
dropShadow.blurX = 5;
dropShadow.blurY = 5;
dropShadow.distance = 3;
dropShadow.angle = 45;
dropShadow.quality = 2;
dropShadow.alpha = 0.4;
this.filters = [dropShadow];
}
public function draw3Dbar(w:Number, h:Number,color:Number):void
{
this.col = color;
this.graphics.clear();
draw_top(w, h);
draw_front(w, h);
draw_side(w, h);
}
private function draw_top( w:Number, h:Number ):void {

this.graphics.lineStyle(0, 0, 0);
//set gradient fill

var lighter:Number = Lighten( this.col );

var colors:Array = [this.col,lighter];
var alphas:Array = [1,1];
var ratios:Array = [0,255];
var matrix:Matrix = new Matrix();
matrix.createGradientBox(w + 12, 12, (270 / 180) * Math.PI );
this.graphics.beginGradientFill('linear' /*GradientType.Linear*/, colors, alphas, ratios, matrix, 'pad'/*SpreadMethod.PAD*/ );


var y:Number = 0;
if( h<0 )
y = h;

this.graphics.moveTo(0, y);
this.graphics.lineTo(w, y);
this.graphics.lineTo(w-12, y+12);
this.graphics.lineTo(-12, y+12);
this.graphics.endFill();
}

private function draw_front( w:Number, h:Number ):void {
//
var rad:Number = 7;

var lighter:Number = Lighten( this.col );

// Darken a light color
//var darker:Number = this.colour;
//darker &= 0x7F7F7F;

var colors:Array = [lighter,this.col];
var alphas:Array = [1,1];
var ratios:Array = [0, 127];

var matrix:Matrix = new Matrix();
matrix.createGradientBox(w - 12, h+12, (90 / 180) * Math.PI );
this.graphics.beginGradientFill('linear' /*GradientType.Linear*/, colors, alphas, ratios, matrix, 'pad'/*SpreadMethod.PAD*/ );

this.graphics.moveTo(-12, 12);
this.graphics.lineTo(-12, h+12);
this.graphics.lineTo(w-12, h+12);
this.graphics.lineTo(w-12, 12);
this.graphics.endFill();
}

private function draw_side( w:Number, h:Number ):void {
//
var rad:Number = 7;

var lighter:Number = Lighten( this.col );

var colors:Array = [this.col,lighter];
var alphas:Array = [1,1];
var ratios:Array = [0,255];
var matrix:Matrix = new Matrix();
matrix.createGradientBox(w, h+12, (270 / 180) * Math.PI );
this.graphics.beginGradientFill('linear' /*GradientType.Linear*/, colors, alphas, ratios, matrix, 'pad'/*SpreadMethod.PAD*/ );


this.graphics.lineStyle(0, 0, 0);
this.graphics.moveTo(w, 0);
this.graphics.lineTo(w, h);
this.graphics.lineTo(w-12, h+12);
this.graphics.lineTo(w-12, 12);
this.graphics.endFill();
}
public function Lighten( col:Number ):Number {
var rgb:Number = col; //decimal value for a purple color
var red:Number = (rgb & 16711680) >> 16; //extacts the red channel
var green:Number = (rgb & 65280) >> 8; //extacts the green channel
var blue:Number = rgb & 255; //extacts the blue channel
var p:Number = 2;
red += red/p;
if( red > 255 )
red = 255;

green += green/p;
if( green > 255 )
green = 255;

blue += blue/p;
if( blue > 255 )
blue = 255;

return red << 16 | green << 8 | blue;
}
}

见: http://xiao-yifang.blogspot.com

2008年8月28日星期四

修改web.config,app.config

1,修改web.config
Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
config.AppSettings.Settings["a1"].Value = "new value";
config.Save(ConfigurationSaveMode.Modified);

2,修改app.config

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["a1"].Value = "new value";
config.Save(ConfigurationSaveMode.Modified);

2008年8月27日星期三

actionscript3 代码片段3

默认滤镜:
分别对应Bevel,DropShadow,Blur