Пример #1
0
        /// <summary>
        /// カーソルを更新します。
        /// </summary>
        /// <param name="mouse">マウス座標</param>
        /// <param name="result">ヒットテストの結果</param>
        /// <param name="x">x座標</param>
        /// <param name="max_x">最大x座標</param>
        /// <param name="format">価格表示のフォーマット</param>
        public virtual void UpdateCursors(Point mouse, HitTestResult result, int x, int max_x, string format)
        {
            if (result.ChartArea == this)
            {
                // マウスが自エリア内の場合

                // カーソル
                CursorX.SetCursorPixelPosition(mouse, false);
                CursorY.SetCursorPixelPosition(mouse, false);

                // カーソルラベルY
                CursorLabelY.Text = AxisY2.PixelPositionToValue(mouse.Y).ToString(format);
                CursorLabelY.Top  = mouse.Y - CursorLabelY.Height / 2;
                if (AxisX.ScaleView.Position + AxisX.ScaleView.Size > max_x)
                {
                    CursorLabelY.Left = (int)(AxisX.ValueToPixelPosition(AxisX.ScaleView.Position + AxisX.ScaleView.Size) + 1);
                }
                else
                {
                    CursorLabelY.Left = (int)(AxisX.ValueToPixelPosition(AxisX.ScaleView.Position + AxisX.ScaleView.Size + 1) + 1);
                }
                CursorLabelY.Visible = true;
            }
            else
            {
                // マウスが他エリア内の場合

                // カーソル
                CursorY.Position = double.NaN;

                // カーソルラベルY
                CursorLabelY.Visible = false;
            }
        }
Пример #2
0
        // 如果上一次的视图和当前XY轴范围不匹配则取消缩放视图
        private void CancelScaleViewIfRangeNotFit(double lastMaxX, double lastMinX, double lastMaxY, double lastMinY)
        {
            if (!AxisX.IsZoomed && !AxisY.IsZoomed)
            {
                return;
            }

            double currentMaxX = AxisX.Maximum;
            double currentMinX = AxisX.Minimum;
            double currentMaxY = AxisY.Maximum;
            double currentMinY = AxisY.Minimum;

            //            double viewMaxX = plotArea.AxisX.ViewMaximum;
            //            double viewMinX = plotArea.AxisX.ViewMinimum;
            //            double viewMaxY = plotArea.AxisY.ViewMaximum;
            //            double viewMinY = plotArea.AxisY.ViewMinimum;
            // 如果没有重合区域则取消缩放
            if (double.IsNaN(lastMaxX) || double.IsNaN(lastMinX) || double.IsNaN(lastMaxY) || double.IsNaN(lastMinY) ||
                double.IsNaN(currentMaxX) || double.IsNaN(currentMinX) || double.IsNaN(currentMaxY) || double.IsNaN(currentMinY) ||
                currentMaxX <= lastMinX || currentMinX >= lastMaxX || currentMaxY <= lastMinY || currentMinY >= lastMaxY)
            {
                AxisX.CancelScaleView();
                AxisX2.CancelScaleView();
                AxisY.CancelScaleView();
                AxisY2.CancelScaleView();
            }
            double currentXRange = currentMaxX - currentMinX;
            double currentYRange = currentMaxY - currentMinY;
            double lastXRange    = lastMaxX - lastMinX;
            double lastYRange    = lastMaxY - lastMinY;
            double minXRange     = currentXRange > lastXRange ? lastXRange : currentXRange;
            double minYRange     = currentYRange > lastYRange ? lastYRange : currentYRange;

            // 如果X轴范围差比例超过最大维持系数则取消XY轴的缩放
            if (Math.Abs(currentXRange - lastXRange) / minXRange > Constants.MaxDiffToKeepXScaleview)
            {
                AxisX.CancelScaleView();
                AxisX2.CancelScaleView();
                AxisY.CancelScaleView();
                AxisY2.CancelScaleView();
            }
            // 如果Y轴范围差比例超过最大维持系数则取消Y轴的缩放
            else if (Math.Abs(currentYRange - lastYRange) / minYRange > Constants.MaxDiffToKeepYScaleview)
            {
                AxisY.CancelScaleView();
                AxisY2.CancelScaleView();
            }
        }
Пример #3
0
        /// <summary>
        /// カーソルを更新します。
        /// </summary>
        /// <param name="mouse">マウス座標</param>
        /// <param name="result">ヒットテストの結果</param>
        /// <param name="x">x座標</param>
        /// <param name="max_x">最大x座標</param>
        /// <param name="format">価格表示のフォーマット</param>
        public override void UpdateCursors(Point mouse, HitTestResult result, int x, int max_x, string format)
        {
            base.UpdateCursors(mouse, result, x, max_x, format);

            // カーソルラベルX
            CursorLabelX.Text = Candles[x].DateTime.ToShortDateString();
            CursorLabelX.Left = mouse.X - CursorLabelX.Width / 2;
            CursorLabelX.Top  = (int)(AxisY2.ValueToPixelPosition(AxisY2.ScaleView.Position) + 1 + AxisY2.ScrollBar.Size);

            // 価格表示板
            DataTypes.Candle prev = null;
            if (x > 0)
            {
                prev = Candles[x - 1];
            }
            PriceBoard.SetCandle(Candles[x], prev, format);
        }