using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace oscardata
{
    class KmProgressBar : ProgressBar
    {
        double myvalue = 0;
        public KmProgressBar()
        {
            SetStyle(ControlStyles.UserPaint, true);
            SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
        }

        protected override void OnPaintBackground(PaintEventArgs pevent)
        {
            // None... Helps control the flicker.
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            try
            {
                Rectangle rect = ClientRectangle;
                Graphics g = e.Graphics;
                Brush br = new SolidBrush(Color.FromArgb(255, ForeColor.R, ForeColor.G, ForeColor.B));

                g.FillRectangle(Brushes.LightGray, rect);
                rect.Inflate(-1, -1);
                g.FillRectangle(Brushes.White, rect);
                rect.Inflate(-1, -1);

                double diff = Math.Abs(Value - myvalue);
                if (Value > myvalue) myvalue += diff/10;
                if (Value < myvalue) myvalue -= diff / 10;

                //myvalue = Value;

                if (myvalue > 0)
                {
                    // As we doing this ourselves we need to draw the chunks on the progress bar
                    Rectangle clip = new Rectangle(rect.X, rect.Y, (int)Math.Round(((double)myvalue / Maximum) * rect.Width), rect.Height);
                    g.FillRectangle(br,clip);
                }
            }
            catch { }
        }
    }
}
