/// <summary> /// Returns the color for a 2scale 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 2color parameters.</param> /// <returns></returns> public static Color ConvertTwoRange(double value, double min, double max, TwoColoursParams par) { HSVColour A = ColourToHSV(par.MinimumColour); HSVColour B = ColourToHSV(par.MaximumColour); //Ratio double percent; if (min == max) { percent = 1.0; } else { //Min can be different from 0 percent = (value - min) / (max - min); } return(Color.FromArgb((int)Math.Round(par.MinimumColour.A + (par.MaximumColour.A - par.MinimumColour.A) * percent), (int)Math.Round(par.MinimumColour.R + (par.MaximumColour.R - par.MinimumColour.R) * percent), (int)Math.Round(par.MinimumColour.G + (par.MaximumColour.G - par.MinimumColour.G) * percent), (int)Math.Round(par.MinimumColour.B + (par.MaximumColour.B - par.MinimumColour.B) * percent))); }
/// <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); }