Пример #1
0
        /// <summary>
        /// Returns the color for a 3scale color formatting.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <param name="min">The minimum.</param>
        /// <param name="max">The maximum.</param>
        /// <param name="par">The 3color parameters.</param>
        /// <returns></returns>
        public static Color ConvertThreeRange(double value, double min, double max, ThreeColoursParams par)
        {
            HSVColour A = ColourToHSV(par.MinimumColour);
            HSVColour B = ColourToHSV(par.MaximumColour);
            HSVColour C = ColourToHSV(par.MediumColour);

            //Ratio
            double percent;

            if (min == max)
            {
                percent = 1.0;
            }
            else
            {
                //Min can be different from 0
                percent = (value - min) / (max - min);
            }

            if (percent == 0.5)
            {
                return(par.MediumColour);
            }
            else if (percent <= 0.5)
            {
                return(Color.FromArgb((int)Math.Round(par.MinimumColour.A + (par.MediumColour.A - par.MinimumColour.A) * percent), (int)Math.Round(par.MinimumColour.R + (par.MediumColour.R - par.MinimumColour.R) * percent), (int)Math.Round(par.MinimumColour.G + (par.MediumColour.G - par.MinimumColour.G) * percent), (int)Math.Round(par.MinimumColour.B + (par.MediumColour.B - par.MinimumColour.B) * percent)));
            }
            else
            {
                return(Color.FromArgb((int)Math.Round(par.MediumColour.A + (par.MaximumColour.A - par.MediumColour.A) * percent), (int)Math.Round(par.MediumColour.R + (par.MaximumColour.R - par.MediumColour.R) * percent), (int)Math.Round(par.MediumColour.G + (par.MaximumColour.G - par.MediumColour.G) * percent), (int)Math.Round(par.MediumColour.B + (par.MaximumColour.B - par.MediumColour.B) * percent)));
            }
        }
Пример #2
0
        /// <summary>
        /// Paints the specified graphics.
        /// </summary>
        /// <param name="graphics">The graphics.</param>
        /// <param name="clipBounds">The clip bounds.</param>
        /// <param name="cellBounds">The cell bounds.</param>
        /// <param name="rowIndex">Index of the row.</param>
        /// <param name="cellState">State of the cell.</param>
        /// <param name="value">The value.</param>
        /// <param name="formattedValue">The formatted value.</param>
        /// <param name="errorText">The error text.</param>
        /// <param name="cellStyle">The cell style.</param>
        /// <param name="advancedBorderStyle">The advanced border style.</param>
        /// <param name="paintParts">The paint parts.</param>
        protected override void Paint(System.Drawing.Graphics graphics, System.Drawing.Rectangle clipBounds, System.Drawing.Rectangle cellBounds, int rowIndex, System.Windows.Forms.DataGridViewElementStates cellState, object value, object formattedValue, string errorText, System.Windows.Forms.DataGridViewCellStyle cellStyle, System.Windows.Forms.DataGridViewAdvancedBorderStyle advancedBorderStyle,
                                      System.Windows.Forms.DataGridViewPaintParts paintParts)
        {
            if (FormatParams != null)  // null can happen when cell set to Formatting but no condition has been set !
            {
                switch (FormatType)
                {
                case EnumConditionalFormatType.BAR:
                    int       barWidth;
                    BarParams par = (BarParams)FormatParams;
                    barWidth        = (int)((cellBounds.Width - 10) * par.ProportionValue);
                    Style.BackColor = this.DataGridView.DefaultCellStyle.BackColor;
                    Style.ForeColor = this.DataGridView.DefaultCellStyle.ForeColor;

                    if (barWidth > 0)     //(double)value > 0 &&
                    {
                        Rectangle r = new Rectangle(cellBounds.X + 3, cellBounds.Y + 3, barWidth, cellBounds.Height - 8);
                        if (par.GradientFill)
                        {
                            using (LinearGradientBrush linearBrush = new LinearGradientBrush(r, par.BarColour, Color.White, LinearGradientMode.Horizontal))     //Color.FromArgb(255, 247, 251, 242)
                            {
                                graphics.FillRectangle(linearBrush, r);
                            }
                        }
                        else
                        {
                            using (SolidBrush solidBrush = new SolidBrush(par.BarColour))     //Color.FromArgb(255, 247, 251, 242)
                            {
                                graphics.FillRectangle(solidBrush, r);
                            }
                        }

                        using (Pen pen = new Pen(par.BarColour))     //Color.FromArgb(255, 140, 197, 66)))
                        {
                            graphics.DrawRectangle(pen, r);
                        }
                    }

                    break;

                case EnumConditionalFormatType.TWOCOLOURSRANGE:
                    TwoColoursParams TWCpar = (TwoColoursParams)FormatParams;
                    Style.BackColor = TWCpar.ValueColour;
                    //  if (ContrastTextColor)
                    Style.ForeColor = ContrastColour(TWCpar.ValueColour);
                    break;

                case EnumConditionalFormatType.THREECOLOURSRANGE:
                    ThreeColoursParams THCpar = (ThreeColoursParams)FormatParams;
                    Style.BackColor = THCpar.ValueColour;
                    Style.ForeColor = ContrastColour(THCpar.ValueColour);
                    break;

                default:
                    Style.BackColor = this.DataGridView.DefaultCellStyle.BackColor;
                    Style.ForeColor = this.DataGridView.DefaultCellStyle.ForeColor;
                    break;
                }
            }
            else
            {
                Style.BackColor = this.DataGridView.DefaultCellStyle.BackColor;
                Style.ForeColor = this.DataGridView.DefaultCellStyle.ForeColor;
            }

            base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle,
                       DataGridViewPaintParts.None | DataGridViewPaintParts.ContentForeground);
        }