public void DrawCursor(Graphics g, FormulaArea fa, FormulaData fd) { float x = this.Rect.X + fa.Canvas.GetX(this.CursorPos); float y = this.Rect.Y + fa.AxisY.CalcY(fd[this.CursorPos]); this.DrawCursor(g, x, y); }
public ObjectPoint GetValueFromPos(float X, float Y, ref FormulaArea fa) { ObjectPoint point = new ObjectPoint(); FormulaHitInfo hitInfo = this.GetHitInfo(X, Y); if (fa == null) { fa = hitInfo.Area; } point.Y = fa.AxisY.GetValueFromY(Y - this.Rect.Y) * fa.AxisY.MultiplyFactor; int cursorPos = hitInfo.CursorPos; double[] numArray = this.DataProvider["DATE"]; if ((numArray != null) && (numArray.Length > 0)) { if (cursorPos < 0) { point.X = numArray[0] + cursorPos; return(point); } if (cursorPos >= numArray.Length) { point.X = numArray[numArray.Length - 1] + ((cursorPos - numArray.Length) + 1); return(point); } point.X = numArray[cursorPos]; } return(point); }
/// <summary> /// Draw date label at X /// </summary> /// <param name="g"></param> /// <param name="fc"></param> /// <param name="Area"></param> /// <param name="X"></param> public void DrawCursor(Graphics g, FormulaChart fc, FormulaArea Area, float X) { if (!LastCursorRect.IsEmpty) { fc.RestoreMemBmp(g, LastCursorRect); } FormulaLabel fl = Area.Labels[2]; int i = fc.CursorPos; if ((object)fdDate != null) { if (i >= 0) { DateTime D = fc.IndexToDate(i); string s = D.ToString(CursorFormat); //,DateTimeFormatInfo.InvariantInfo SizeF sf = g.MeasureString(s, LabelFont); RectangleF R = new RectangleF(X - fc.Rect.X, Rect.Y, sf.Width, Rect.Height - 1); if (R.Right > Rect.Right) { R.Offset(-R.Width - 1, 0); } LastCursorRect = R; LastCursorRect.Inflate(2, 1); R.Offset(fc.Rect.Location); fl.DrawString(g, s, LabelFont, fl.TextBrush, VerticalAlign.Bottom, FormulaAlign.Left, R, false); } } }
/// <summary> /// Render the X-Axis /// </summary> /// <param name="Canvas">FormulaCanvas</param> /// <param name="fa">FormulaArea</param> public void Render(FormulaCanvas Canvas, FormulaArea fa) { if (Visible) { if (fa.AxisY.AxisPos == AxisPos.Left) { Rect.X--; } Graphics g = Canvas.CurrentGraph; Back.Render(g, Rect); } if (majorTick.Visible || minorTick.Visible) { double[] Date; Date = fa.Parent.DataProvider["DATE"]; fdDate = new FormulaData(Date); fdDate.Canvas = Canvas; fdDate.AxisY = fa.AxisY; PointF[] pfs = fdDate.GetPoints(); majorTick.DataCycle = DataCycle; majorTick.Format = Format; majorTick.DateFormatProvider = DateFormatProvider; majorTick.DrawXAxisTick(Canvas, Date, fdDate, pfs, this, IntradayInfo); minorTick.DrawXAxisTick(Canvas, Date, fdDate, pfs, this, IntradayInfo); } }
/// <summary> /// Show the formula manager /// </summary> /// <param name="Formulas">The default formulas</param> /// <returns>Dialog result</returns> public DialogResult ShowForm(FormulaArea fa, FormulaBase SelectedFormula) { if (fa != null) { string[] Formulas = fa.FormulaToStrings(); if (Formulas != null) { this.CurrentFormulas = string.Join("#", Formulas); string s = ""; if (SelectedFormula != null) { s = SelectedFormula.CreateName; } this.SelectedFormula = s; ArrayList al = new ArrayList(); al.AddRange(Formulas); if (fa.IsMain()) { al.AddRange(OverlayFormulas); } else { al.AddRange(ListedFormulas); } AddFavorite((string[])al.ToArray(typeof(string))); } } return(ShowDialog()); }
public void Render(FormulaCanvas Canvas, FormulaArea fa) { if (this.Visible) { if (fa.AxisY.AxisPos == AxisPos.Left) { this.Rect.X--; } Graphics currentGraph = Canvas.CurrentGraph; this.Back.Render(currentGraph, this.Rect); } if (this.MajorTick.Visible || this.MinorTick.Visible) { double[] data = fa.Parent.DataProvider["DATE"]; this.fdDate = new FormulaData(data); this.fdDate.Canvas = Canvas; this.fdDate.AxisY = fa.AxisY; PointF[] points = this.fdDate.GetPoints(); this.MajorTick.DataCycle = this.DataCycle; this.MajorTick.Format = this.Format; this.MajorTick.DateFormatProvider = this.DateFormatProvider; this.MajorTick.DrawXAxisTick(Canvas, data, this.fdDate, points, this, this.IntradayInfo); this.MinorTick.DrawXAxisTick(Canvas, data, this.fdDate, points, this, this.IntradayInfo); } }
private void SetBestFormat(FormulaCanvas Canvas, FormulaArea Area, int Start) { int k = Start; for (int i = 0; i < LabelValues.Length; i++) { double d = (LabelValues[i] / MultiplyFactor); k = FormulaHelper.TestBestFormat(d, k); } bool b = false; for (int i = 0; i < Area.FormulaDataArray.Count; i++) { FormulaRenderType frt = (Area.FormulaDataArray[i] as FormulaData).RenderType; if (frt == FormulaRenderType.STOCK) { double d = GetLastValue(Canvas, Area, i); if (!double.IsNaN(d)) { k = FormulaHelper.TestBestFormat(d, k); b = true; } } } if (format != null && format.Length > 1 && !b) { format = "f" + format.Substring(1); } else { format = "f" + k; } }
public void DrawCursor(Graphics g, FormulaChart fc, FormulaArea Area, float X) { if (!this.LastCursorRect.IsEmpty) { fc.RestoreMemBmp(g, this.LastCursorRect); } FormulaLabel label = Area.Labels[2]; int cursorPos = fc.CursorPos; if ((Object)fdDate != null && cursorPos >= 0) { if (cursorPos < this.fdDate.Length) { string text = DateTime.FromOADate(this.fdDate[cursorPos]).ToString(this.CursorFormat, DateTimeFormatInfo.InvariantInfo); SizeF ef = g.MeasureString(text, this.LabelFont); RectangleF rect = new RectangleF(X - fc.Rect.X, (float)this.Rect.Y, ef.Width, (float)(this.Rect.Height - 1)); this.LastCursorRect = rect; this.LastCursorRect.Inflate(2f, 1f); rect.Offset((PointF)fc.Rect.Location); label.DrawString(g, text, this.LabelFont, label.TextBrush, VerticalAlign.Bottom, FormulaAlign.Left, rect, false); } } }
public void AddArea(FormulaBase fb) { FormulaArea fa = new FormulaArea(this); fa.HeightPercent = 1.0; fa.AddFormula(fb); this.Areas.Add(fa); }
public void InsertArea(int Index, FormulaBase fb) { FormulaArea fa = new FormulaArea(this); fa.HeightPercent = 1.0; fa.AddFormula(fb); this.Areas.Insert(Index, fa); }
static public FormulaChart ShowObjectOnChart(FormulaChart fc, TextReader reader, DataManagerBase dmb, bool ObjectLayout) { ObjectManager om = FromChart(fc); om.ReadXml(reader, false); if (om.startTime != 0.0) { fc.StartTime = DateTime.FromOADate(om.startTime); } if (om.endTime != 0.0) { fc.EndTime = DateTime.FromOADate(om.endTime); } if (ObjectLayout && om.indicators != null) { fc.Areas.Clear(); if (om.indicators != null) { fc.StringsToArea(om.indicators.Split(';')); } fc.SetAreaPercent(om.areaPercent); fc.Rect = new Rectangle(0, 0, om.width, om.height); } om.SetCanvas(om.Canvas); if (om.skin != null) { fc.SetSkin(om.skin); } fc.StickRenderType = om.stickRenderType; if (om.symbol != null && om.symbol != "") { //if (om.latestTime!=0.0) // dmb.EndTime = DateTime.FromOADate(om.latestTime); CommonDataProvider cdp = (CommonDataProvider)dmb[om.symbol]; cdp.DataCycle = DataCycle.Parse(om.currentDataCycle); fc.DataProvider = cdp; } FormulaArea fa = fc.MainArea; if (fa != null) { fa.StockRenderType = om.stockRenderType; } if (om.minPrice != 0) { if (fa != null) { fa.AxisY.MinY = om.minPrice; fa.AxisY.MaxY = om.maxPrice; fa.AxisY.AutoScale = false; } } return(fc); }
private void DesignerControl_MouseMove(object sender, MouseEventArgs e) { if (this.DragObject != null) { FormulaArea fa = this.DragObject.Object.Area; float num = e.X - this.DragObject.StartPoint.X; float num2 = e.Y - this.DragObject.StartPoint.Y; this.InvalidateObject(this.DragObject.Object); if (this.DragObject.ControlPointIndex < 0) { for (int i = 0; i < this.DragObject.Object.ControlPoints.Length; i++) { PointF tf = this.DragObject.Object.ToPointF(this.DragObject.ControlPoints[i]); this.DragObject.Object.ControlPoints[i] = this.GetValueFromPos(tf.X + num, tf.Y + num2, ref fa); } } else { BaseObject obj2 = this.DragObject.Object; obj2.ControlPoints[this.DragObject.ControlPointIndex] = this.GetValueFromPos((float)e.X, (float)e.Y, ref fa); if (((obj2.InitNum > 0) && (obj2.InitPoints != null)) && (obj2.InSetup && (this.DragObject.ControlPoints.Length > 1))) { PointF tf2 = obj2.ToPointF(obj2.ControlPoints[1]); PointF tf3 = obj2.ToPointF(obj2.ControlPoints[0]); float num4 = (tf2.X - tf3.X) / obj2.InitPoints[1].X; float num5 = (tf2.Y - tf3.Y) / obj2.InitPoints[1].Y; for (int j = 2; j < obj2.ControlPoints.Length; j++) { obj2.ControlPoints[j] = this.GetValueFromPos(tf3.X + (num4 * obj2.InitPoints[j].X), tf3.Y + (num5 * obj2.InitPoints[j].Y), ref fa); } } } this.InvalidateObject(this.DragObject.Object); } else { Cursor cursor = this.Designer.Cursor; if (this.GetPointIndex(e.X, e.Y) >= 0) { this.Designer.Cursor = Cursors.SizeAll; } else if (this.GetObjectAt(e.X, e.Y) != null) { this.Designer.Cursor = Cursors.Hand; } else if (this.ObjectType == null) { this.Designer.Cursor = cursor; } else { this.Designer.Cursor = Cursors.Cross; } } }
private void DesignerControl_MouseDown(object sender, MouseEventArgs e) { FormulaArea fa = null; BaseObject objectAt; this.StartPoint = this.GetValueFromPos((float)e.X, (float)e.Y, ref fa); this.SaveChartControlSetting(); if (this.ObjectType == null) { this.SelectedObject = null; if (e.Button == MouseButtons.Left) { int controlPointIndex = this.GetPointIndex(e.X, e.Y, out objectAt); if (objectAt == null) { objectAt = this.GetObjectAt(e.X, e.Y); } if (objectAt != null) { this.SelectedObject = objectAt; this.DragObject = new ObjectDragging(new PointF((float)e.X, (float)e.Y), controlPointIndex, objectAt); this.Designer.Invalidate(objectAt.GetRegion()); objectAt.InMove = true; } } } else if (e.Button == MouseButtons.Right) { this.objects.Remove(this.DragObject.Object); this.DragObjectFinished(); } else if (this.ObjectSteps == 0) { objectAt = this.ObjectType.Invoke(); objectAt.AreaName = fa.Name; objectAt.Area = fa; objectAt.InSetup = true; objectAt.InMove = true; if (this.AfterCreateStart != null) { this.AfterCreateStart(this, objectAt); } objectAt.SetObjectManager(this); for (int i = 0; i < objectAt.ControlPointNum; i++) { objectAt.ControlPoints[i] = this.StartPoint; } this.objects.Add(objectAt); this.SelectedObject = objectAt; this.DragObject = new ObjectDragging(new PointF((float)e.X, (float)e.Y), ((this.ObjectSteps + objectAt.InitNum) > 1) ? 1 : 0, objectAt); } this.DragMemBmp = null; }
public string GetAreaTextData(string Separator, bool ShowHeader) { if (this.Areas.Count > 0) { FormulaArea selectedArea = this.SelectedArea; if (selectedArea == null) { selectedArea = this.Areas[this.Areas.Count - 1]; } return(this.GetAreaTextData(selectedArea, Separator, ShowHeader)); } return(""); }
public void SetObjectManager(BaseObject bo) { bo.SetObjectManager(this); if (Canvas.Chart != null) { FormulaArea fa = Canvas.Chart[bo.AreaName]; if (fa == null) { fa = Canvas.Chart[0]; bo.AreaName = fa.Name; } bo.Area = fa; } }
/// <summary> /// Calc Y-axis width /// </summary> /// <param name="Canvas"></param> /// <returns></returns> public int CalcLabelWidth(FormulaCanvas Canvas, FormulaArea Area) { Graphics g = Canvas.CurrentGraph; CalcLableLine(Canvas); int LabelWidth = int.MinValue; string s; int Start = 0; if (AutoFormat) { if (MaxY <= 10 && MinY < 1) { Start = 3; } else if (MaxY <= 100) { Start = 2; } else if (MaxY <= 1000) { Start = 1; } else { Start = 0; } format = "Z" + Start; } if (format.StartsWith("Z")) { SetBestFormat(Canvas, Area, Start); } for (int i = -1; i < LabelValues.Length; i++) { if (i < 0) { s = MultiplyFactorToString(); } else { double d = (LabelValues[i] / MultiplyFactor); s = FormulaHelper.FormatDouble(d, format); } LabelWidth = Math.Max(LabelWidth, (int)g.MeasureString(s, LabelFont).Width); } return(LabelWidth + majorTick.TickWidth); }
public void SetObjectManager(BaseObject bo) { bo.SetObjectManager(this); if (this.Canvas.BackChart != null) { FormulaArea area = this.Canvas.BackChart[bo.AreaName]; if (area == null) { area = this.Canvas.BackChart[0]; bo.AreaName = area.Name; } bo.Area = area; } }
private void miChangeFormulaParameter_Click(object sender, System.EventArgs e) { if (ChartControl.Chart.Areas.Count > 0) { //Get first area FormulaArea fa = ChartControl.Chart.Areas[0]; if (fa.Formulas.Count > 2) { //Get third formula and set N parameter to 20 fa.Formulas[2].SetParam("N", "20"); } } ChartControl.SaveChartProperties(); ChartControl.NeedRebind(); }
// private void miChangeFormulaParameter_Click(object sender, System.EventArgs e) // { // // if (ChartControl.Chart.Areas.Count>0) // { // //Get first area // FormulaArea fa = ChartControl.Chart.Areas[0]; // if (fa.Formulas.Count>2) // //Get third formula and set N parameter to 20 // fa.Formulas[2].SetParam("N","20"); // } // ChartControl.SaveChartProperties(); // ChartControl.NeedRebind(); // } /// <summary> /// Add RSI(10) to fa if not exist /// </summary> /// <param name="fa"></param> private void AddFormula(FormulaArea fa) { if (fa != null) { string Indicator = "RSI(10)"; ArrayList al = new ArrayList(); al.AddRange(fa.FormulaToStrings()); if (al.IndexOf(Indicator) < 0) { al.Add(Indicator); fa.Formulas.Clear(); fa.StringsToFormula((string[])al.ToArray(typeof(string))); ChartControl.NeedRebind(); } } }
public void DrawCursor(Graphics g, FormulaChart fc, FormulaArea Area, float Y, double d) { if (!this.LastCursorRect.IsEmpty) { fc.RestoreMemBmp(g, this.LastCursorRect); } FormulaLabel label = Area.Labels[2]; string text = d.ToString(this.Format); SizeF ef = g.MeasureString(text, this.LabelFont); RectangleF rect = new RectangleF((float)this.Rect.Left, Y - fc.Rect.Y, (this.Rect.Width - 1) - this.Back.RightPen.Width, ef.Height); this.LastCursorRect = rect; this.LastCursorRect.Inflate(2f, 1f); rect.Offset((PointF)fc.Rect.Location); label.DrawString(g, text, this.LabelFont, label.TextBrush, VerticalAlign.Bottom, FormulaAlign.Left, rect, false); }
public void Paste() { try { IDataObject ido = Clipboard.GetDataObject(); string s = (string)ido.GetData(typeof(string)); if (s != null) { byte[] bs = Encoding.UTF8.GetBytes(s); MemoryStream ms = new MemoryStream(bs); StreamReader sr = new StreamReader(ms); string t = sr.ReadLine(); Type T = Type.GetType(t); if (T != null) { XmlSerializer xs = new XmlSerializer(T); object o = xs.Deserialize(sr); if (o is BaseObject) { BaseObject bo = o as BaseObject; bo.SetObjectManager(this); FormulaHitInfo fhi = Canvas.Chart.GetHitInfo(CurrentMouseX, CurrentMouseY); FormulaArea fa = fhi.Area; if (fhi.HitType == FormulaHitType.htArea && fa != null) { PointF pf0 = bo.ToPointF(bo.ControlPoints[0]); float DeltaX = CurrentMouseX - pf0.X; float DeltaY = CurrentMouseY - pf0.Y; for (int i = 0; i < bo.ControlPoints.Length; i++) { PointF pf = bo.ToPointF(bo.ControlPoints[i]); bo.ControlPoints[i] = GetValueFromPos(pf.X + DeltaX, pf.Y + DeltaY, ref fa); } AddObject(bo); Invalidate(); } } } } } catch { } }
public PointF GetPointAt(FormulaArea fa, int DateIndex, double Price) { if (((fa != null) && (fa.Canvas != null)) && (fa.AxisY != null)) { float x = (float)(((DateIndex - fa.Canvas.Stop) + 0.5) * this.ColumnWidth); float y = fa.AxisY.CalcY(Price); foreach (FormulaAxisY sy in fa.AxisYs) { if (sy.AxisPos == AxisPos.Left) { x += sy.Width; } } return(new PointF(x, y)); } return(PointF.Empty); }
/// <summary> /// Load object and bind object properties to the chart /// </summary> /// <param name="Symbol"></param> /// <param name="ObjectName">Object file name</param> public void LoadObject(string Symbol, string ObjectName) { if (Symbol != null && Symbol != "") { if (Canvas.DesignerControl is ChartWinControl) { ChartWinControl cwc = Canvas.DesignerControl as ChartWinControl; FormulaArea fa = cwc.Chart.MainArea; string ObjectFileName = FormulaHelper.GetObjectFile(ObjectName); if (File.Exists(ObjectFileName)) { ReadXml(ObjectFileName, true); if (startTime > 0) { cwc.StartTime = DateTime.FromOADate(startTime); } if (endTime > 0) { cwc.EndTime = DateTime.FromOADate(endTime); } if (fa != null) { if (minPrice > 0) { cwc.MinPrice = minPrice; cwc.MaxPrice = maxPrice; } } } else { if (fa != null) { cwc.MinPrice = 0; cwc.EndTime = DateTime.MinValue; fa.AxisY.AutoScale = true; } Clear(); } } } }
/// <summary> /// Draw price label at Y /// </summary> /// <param name="g"></param> /// <param name="fc"></param> /// <param name="Area"></param> /// <param name="Y">Y-Position</param> /// <param name="d">Price</param> public void DrawCursor(Graphics g, FormulaChart fc, FormulaArea Area, float Y, double d) { if (!LastCursorRect.IsEmpty) { fc.RestoreMemBmp(g, LastCursorRect); } FormulaLabel fl = Area.Labels[2]; string s = FormulaHelper.FormatDouble(d, format); SizeF sf = g.MeasureString(s, LabelFont); RectangleF R = new RectangleF(Rect.Left, Y - fc.Rect.Y, Rect.Width - 1 - Back.RightPen.Width, sf.Height); LastCursorRect = R; LastCursorRect.Inflate(2, 1); R.Offset(fc.Rect.Location); fl.DrawString(g, s, LabelFont, fl.TextBrush, VerticalAlign.Bottom, FormulaAlign.Left, R, false); }
// private void miAddFormula1_Click(object sender, System.EventArgs e) // { // if (ChartControl.Chart.Areas.Count>2) // AddFormula(ChartControl.Chart.Areas[2]); // } // // private void miAddFormula2_Click(object sender, System.EventArgs e) // { // AddFormula(ChartControl.Chart.SelectedArea); // } // // private void miAddFormula3_Click(object sender, System.EventArgs e) // { // if (ChartControl.Chart.Areas.Count<8) // ChartControl.DefaultFormulas +=";RSI(10)"; // } private void MoveFormula(FormulaArea fa1, FormulaArea fa2, int Index) { if (fa1 != null && fa2 != null) { ArrayList al = new ArrayList(); al.AddRange(fa1.FormulaToStrings()); if (al.Count > Index) { string s = (string)al[Index]; al.RemoveAt(Index); fa1.Formulas.Clear(); fa1.StringsToFormula((string[])al.ToArray(typeof(string))); s = fa2.FormulaToString('#') + '#' + s; fa2.Formulas.Clear(); fa2.StringToFormula(s, '#'); ChartControl.NeedRebind(); } } }
public PointF GetPointAt(FormulaArea fa, double d, string DataType, double Price) { if (this.DataProvider != null) { double[] dd = this.DataProvider["DATE"]; double[] numArray2 = null; if (DataType != null) { numArray2 = this.DataProvider[DataType]; } if ((dd != null) && (dd.Length > 0)) { int index = FindIndex(dd, d); if (numArray2 != null) { Price = numArray2[index]; } return(this.GetPointAt(fa, index, Price)); } } return(PointF.Empty); }
public ChartDragInfo(FormulaChart Chart, FormulaHitInfo HitInfo) { this.HitInfo = HitInfo; this.AreaHeight = new int[Chart.Areas.Count]; FormulaAxisY axisY = HitInfo.AxisY; if ((axisY == null) && (HitInfo.Area != null)) { axisY = HitInfo.Area.AxisY; } if (axisY != null) { this.AreaMinY = axisY.MinY; this.AreaMaxY = axisY.MaxY; } for (int i = 0; i < Chart.Areas.Count; i++) { FormulaArea area = Chart.Areas[i]; this.AreaHeight[i] = area.Rect.Height; } this.StartTime = Chart.StartTime; this.EndTime = Chart.EndTime; }
private double GetLastValue(FormulaCanvas Canvas, FormulaArea Area, int LineIndex, out bool IsUp) { LatestValueType lvt = Area.Parent.LatestValueType; FormulaData f = Area.FormulaDataArray[LineIndex]; double d = double.NaN; IsUp = true; if (Area.AxisYs[f.AxisYIndex] == this && ((lvt == LatestValueType.All && f.ValueTextMode != ValueTextMode.None /*!f.TextInvisible*/) || ((lvt == LatestValueType.All || lvt == LatestValueType.StockOnly) && f.RenderType == FormulaRenderType.STOCK) || (lvt == LatestValueType.Custom && f.LastValueInAxis))) { int Start = Math.Max(0, Canvas.Start); if (f.Length > Start) { int LastIndex = f.Length - 1 - Start; for (int k = f.Length - 1 - Start; k >= 0; k--) { if (!double.IsNaN(f[k])) { LastIndex = k; break; } } d = f[LastIndex]; if (LastIndex > 0) { if (f[LastIndex - 1] > d) { IsUp = false; } } } } return(d); }
/// <summary> /// Constructor of ChartDragInfo /// </summary> /// <param name="Chart">FormulaChart instance</param> /// <param name="HitInfo">The Hit information of the dragging start point</param> public ChartDragInfo(FormulaChart Chart, FormulaHitInfo HitInfo) { this.HitInfo = HitInfo; AreaHeight = new int[Chart.Areas.Count]; FormulaAxisY fay = HitInfo.AxisY; if (fay == null && HitInfo.Area != null) { fay = HitInfo.Area.AxisY; } if (fay != null) { AreaMinY = fay.MinY; AreaMaxY = fay.MaxY; } for (int i = 0; i < Chart.Areas.Count; i++) { FormulaArea fa = Chart.Areas[i]; AreaHeight[i] = fa.Rect.Height; } StartTime = Chart.StartTime; EndTime = Chart.EndTime; }
private void InternalRender(Graphics g) { try { if (this.DataProvider != null) { double num = 0.0; foreach (FormulaArea area in this.Areas) { if (area.Visible) { num += area.HeightPercent; } } double num2 = 0.0; for (int i = 0; i < this.Areas.Count; i++) { FormulaArea area2 = this.Areas[i]; if (area2.Visible) { area2.Rect = new Rectangle(this.Rect.X, this.Rect.Y + ((int)((this.Rect.Height * num2) / num)), this.Rect.Width, ((int)((this.Rect.Height * area2.HeightPercent) / num)) + 1); if (i < (this.Areas.Count - 1)) { area2.Rect.Height++; } else { area2.Rect.Height = this.Rect.Bottom - area2.Rect.Top; } num2 += area2.HeightPercent; } } this.AdjustLabelWidth(g); this.SetView(); for (int j = 0; j < this.Areas.Count; j++) { FormulaArea area3 = this.Areas[j]; if (area3.Visible) { try { if (this.ShowDateInLastArea && (j < (this.Areas.Count - 1))) { foreach (FormulaAxisX sx in area3.AxisXs) { sx.Visible = false; } } area3.Render(g); } catch (Exception exception) { StringFormat format = new StringFormat(); format.Alignment = StringAlignment.Center; format.LineAlignment = StringAlignment.Center; g.DrawString(exception.ToString(), new Font("verdana", 10f), Brushes.Red, area3.Rect, format); } } } if (this.NativePaint != null) { this.NativePaint(this, new NativePaintArgs(g, this.Rect, this.MemBmp)); } } } catch (Exception exception2) { g.DrawString(exception2.ToString(), new Font("verdana", 10f), Brushes.Red, (float)1f, (float)30f); } }