Created
August 28, 2020 12:52
-
-
Save AmbroseNTK/57f30b35bed44028e2e96a9556088f0b to your computer and use it in GitHub Desktop.
Clock Class
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public partial class Clock : UserControl | |
{ | |
private int clockBorderWidth = 5; | |
private Color clockBorderColor = Color.Black; | |
private Color hourNeedleColor = Color.Blue; | |
private int hourNeedleSize = 70; | |
private Color minuteNeedleColor = Color.Green; | |
private Color secondNeedleColor = Color.Red; | |
private Timer timer; | |
public Clock() | |
{ | |
InitializeComponent(); | |
this.DoubleBuffered = true; | |
timer = new Timer(); | |
timer.Interval = 500; | |
timer.Tick += Timer_Tick; | |
timer.Start(); | |
} | |
private void Timer_Tick(object sender, EventArgs e) | |
{ | |
Invalidate(); | |
} | |
public int ClockBorderWidth { get => clockBorderWidth; set => clockBorderWidth = value; } | |
public Color ClockBorderColor { get => clockBorderColor; set => clockBorderColor = value; } | |
public Color HourNeedleColor { get => hourNeedleColor; set => hourNeedleColor = value; } | |
public int HourNeedleSize { get => hourNeedleSize; set => hourNeedleSize = value; } | |
public Color MinuteNeedleColor { get => minuteNeedleColor; set => minuteNeedleColor = value; } | |
public Color SecondNeedleColor { get => secondNeedleColor; set => secondNeedleColor = value; } | |
protected override void OnPaint(PaintEventArgs e) | |
{ | |
base.OnPaint(e); | |
int hour = DateTime.Now.Hour; | |
int minute = DateTime.Now.Minute; | |
int second = DateTime.Now.Second; | |
Pen clockPen = new Pen(new SolidBrush(ClockBorderColor),ClockBorderWidth); | |
Rectangle clockRectangle = new Rectangle(clockBorderWidth, clockBorderWidth, this.Width - 2 * clockBorderWidth, this.Width - 2 * clockBorderWidth); | |
e.Graphics.DrawEllipse(clockPen, clockRectangle); | |
e.Graphics.DrawImage(Image.FromFile("clockFace-cropped.jpg"), clockRectangle); | |
Rectangle hourRectangle = new Rectangle(clockRectangle.X + HourNeedleSize, clockRectangle.Y + HourNeedleSize, clockRectangle.Width - HourNeedleSize*2, clockRectangle.Height - HourNeedleSize*2); | |
Rectangle minuteRectange = new Rectangle(hourRectangle.X - 50, hourRectangle.Y - 50, hourRectangle.Width + 2 * 50, hourRectangle.Height + 2 * 50); | |
e.Graphics.FillPie(new SolidBrush(this.minuteNeedleColor), minuteRectange, minute * (360 / 60.0f) + second*0.1f - 90-2.5f, 5f); | |
e.Graphics.FillPie(new SolidBrush(this.HourNeedleColor), hourRectangle, (hour % 12) * (360 / 12.0f) + minute*(30/60f) - 90-2.5f, 5f); | |
e.Graphics.FillPie(new SolidBrush(this.secondNeedleColor), minuteRectange, second * (360 / 60.0f) - 90-0.5f, 1.0f); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment