Hello i am trying to make analog clock.
And i want to split my classes. my control class in which is analog clock painting functions and etc... And i want to split this class and to make timer class which would be used by my analogClock class. Is it possible?
That is my code:
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
using Timer = System.Windows.Forms.Timer;
namespace AnalogClockControl
{
public class AnalogClock : UserControl
{
public float PI = 3.141592654F; // PI konstanta
private Taimer timerKintamasis; <-- that is parameter by which i am trying to access other class "Taimer"
public DateTime dateTime; // public dateTime kintamasis datai fiksuot
float fRadius; // laipsniai
float fCenterX; // centro koordinates
float fCenterY; // centro koordinates
float fCenterCircleRadius; // centro circle laipsniai
float fHourLength; // valandos ilgis
float fMinLength; // minuciu ilgis
public float fSecLength; // sekundžiu ilgis
float fHourThickness; // valandos rodykles storio parametras
float fMinThickness; // minutes rodykles storio parametras
public float fSecThickness; // sekundess rodykles storio parametras
//chronometro rodykle
public float rodykl;
//žadintuvo rodykle
public float alarmRod;
// Valandiniu brukšniu liniju paišymas
bool bDraw5MinuteTicks = true;
// 60 minuciu brukšniu liniju paišymas
bool bDraw1MinuteTicks = true;
// Tiksejimu rodykliu storis
float fTicksThickness = 1;
// Žadintuvo rodykle parametrai
public string valandos;
// Žadintuvo rodykles parametrai
public string minutes;
Color hrColor = Color.DarkMagenta; // Valandos rodykles spalva
Color minColor = Color.Green; // Minuciu rodykles spalva
Color secColor = Color.Red; // Sekundžiu rodykles spalva
Color circleColor = Color.Red; // Vidurio circle spalva
Color ticksColor = Color.White; // Sekundiniu Tiksejimu rodykles spalva
public Timer timer1; // Laikrodžio taimeris <-- that is timer which i want to move to 'Taimer' class and this class would call it...
public Timer timer2; // Chronometro taimeris
public Timer timer3; // Žadintuvo taimeris
public IContainer components; // Konteineris
// Laikrodyje naudojamu raidžiu/skaitmenu šriftas
Font f = new Font("Calibri", 14, FontStyle.Bold);
public AnalogClock()
{
this.timerKintamasis = timerKintamasis;
InitializeComponent();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region Component Designer generated code
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.timerKintamasis.timer1 = new System.Windows.Forms.Timer(this.timerKintamasis.components); <- this is call.. new object..
this.timer2 = new System.Windows.Forms.Timer(this.components);
this.timer3 = new System.Windows.Forms.Timer(this.components);
//
// timer1 parametrai (Laikrodžio)
//
//this.timer1.Enabled = true; <-
//this.timer1.Interval = 1000; <- all this stuff would be in 'Taimer' class
//this.timer1.Tick += new System.EventHandler(this.timer1_Tick); <- in constructor there could be just timer1 = enabled.
//
// analoginio laikrodžio sukurimas
//
this.Name = "AnalogClock";
this.Resize += new System.EventHandler(this.AnalogClock_Resize);
this.Load += new System.EventHandler(this.AnalogClock_Load);
this.Paint += new System.Windows.Forms.PaintEventHandler(this.AnalogClock_Paint);
this.Visible = false;
}
#endregion
// Laikrodžio užsikrovimas
private void AnalogClock_Load(object sender, System.EventArgs e)
{
dateTime = DateTime.Now;
this.AnalogClock_Resize(sender, e);
}
// Kiekvieno Tiksejimo valdymas
public void timer1_Tick(object sender, System.EventArgs e)
{
this.dateTime = DateTime.Now;
this.Refresh(); // sitas vis perpaiso
// this.Invalidate();
}
//// Laikrodžio Taimerio valdymas
//public void Start()
//{
// timer1.Enabled = true;
// this.Refresh();
//}
//// Laikrodžio Taimerio valdymas
//public void Stop()
//{
// timer1.Enabled = false;
//}
// Sekundine rodykle
private void DrawLine(float fThickness, float fLength, Color color, float fRadians, PaintEventArgs e)
{
e.Graphics.DrawLine(new Pen(color, fThickness),
fCenterX - (float)(fLength / 9 * Math.Sin(fRadians)),
fCenterY + (float)(fLength / 9 * Math.Cos(fRadians)),
fCenterX + (float)(fLength * Math.Sin(fRadians)),
fCenterY - (float)(fLength * Math.Cos(fRadians)));
}
// Chronometro rodykle
public void DrawLine2(float fThickness, float fLength, Color color, float fRadians, PaintEventArgs e)
{
e.Graphics.DrawLine(new Pen(color, fThickness),
fCenterX - (float)(fLength / 5 * Math.Sin(fRadians)),
fCenterY + (float)(fLength / 5 * Math.Cos(fRadians)),
fCenterX + (float)(fLength * Math.Sin(fRadians)),
fCenterY - (float)(fLength * Math.Cos(fRadians)));
}
public void ChronometroRodyklFunkcija(object sender, EventArgs e)
{
rodykl += 1 / 10F * PI / 180 * 6;
}
public void AlarmClockFunkcija(object sender, EventArgs e)
{
this.dateTime = DateTime.Now;
this.Refresh();
}
// Valandine ir Minutine rodykles
private void DrawPolygon(float fThickness, float fLength, Color color, float fRadians, PaintEventArgs e)
{
PointF A = new PointF((float)(fCenterX + fThickness * 2 * Math.Sin(fRadians + PI / 2)),
(float)(fCenterY - fThickness * 2 * Math.Cos(fRadians + PI / 2)));
PointF B = new PointF((float)(fCenterX + fThickness * 2 * Math.Sin(fRadians - PI / 2)),
(float)(fCenterY - fThickness * 2 * Math.Cos(fRadians - PI / 2)));
PointF C = new PointF((float)(fCenterX + fLength * Math.Sin(fRadians)),
(float)(fCenterY - fLength * Math.Cos(fRadians)));
PointF D = new PointF((float)(fCenterX - fThickness * 4 * Math.Sin(fRadians)),
(float)(fCenterY + fThickness * 4 * Math.Cos(fRadians)));
PointF[] points = { A, D, B, C }; // išdestymas
e.Graphics.FillPolygon(new SolidBrush(color), points); //spalvinimas
}
// Laikrodžio nupaisymas
private void AnalogClock_Paint(object sender, PaintEventArgs e)
{
float fRadHr = (dateTime.Hour % 12 + dateTime.Minute / 60F) * 30 * PI / 180;
float fRadMin = (dateTime.Minute) * 6 * PI / 180;
float fRadSec = (dateTime.Second) * 6 * PI / 180;
DrawPolygon(this.fHourThickness, this.fHourLength, hrColor, fRadHr, e);
DrawPolygon(this.fMinThickness, this.fMinLength, minColor, fRadMin, e);
DrawLine(this.fSecThickness, this.fSecLength, secColor, fRadSec, e);
DrawLine2(this.fSecThickness, this.fSecLength, Color.Blue, alarmRod, e);
DrawLine3(this.fSecThickness, this.fSecLength, Color.Chartreuse, rodykl, e);
for (int i = 0; i < 60; i++) // 60 minuciu
{
for (int j = 1; j <= 12; j++) // valandu skaiciu paišymas
{ // 2.8
e.Graphics.DrawString("" + j, f, Brushes.Red,
Width / 2 + (int)(Width / 3.5 * Math.Sin(j * Math.PI / 6))
- (int)e.Graphics.MeasureString("" + j, f).Width / 2,
Height / 2 - (int)(Height / 3.5 * Math.Cos(j * Math.PI / 6))
- (int)e.Graphics.MeasureString("" + j, f).Height / 2);
}
// Paišo kiekvienos valandos liniju brukšnius
if (this.bDraw5MinuteTicks == true && i % 5 == 0)
{
e.Graphics.DrawLine(new Pen(ticksColor, fTicksThickness),
fCenterX + (float)(this.fRadius / 1.50F * Math.Sin(i * 6 * PI / 180)),
fCenterY - (float)(this.fRadius / 1.50F * Math.Cos(i * 6 * PI / 180)),
fCenterX + (float)(this.fRadius / 1.65F * Math.Sin(i * 6 * PI / 180)),
fCenterY - (float)(this.fRadius / 1.65F * Math.Cos(i * 6 * PI / 180)));
}
else if (this.bDraw1MinuteTicks == true) // paišo minuciu liniju brukšnius
{
e.Graphics.DrawLine(new Pen(ticksColor, fTicksThickness),
fCenterX + (float)(this.fRadius / 1.50F * Math.Sin(i * 6 * PI / 180)),
fCenterY - (float)(this.fRadius / 1.50F * Math.Cos(i * 6 * PI / 180)),
fCenterX + (float)(this.fRadius / 1.55F * Math.Sin(i * 6 * PI / 180)),
fCenterY - (float)(this.fRadius / 1.55F * Math.Cos(i * 6 * PI / 180)));
}
}
//Paišo circle viduryje
e.Graphics.FillEllipse(new SolidBrush(circleColor), fCenterX - fCenterCircleRadius / 2, fCenterY - fCenterCircleRadius / 2, fCenterCircleRadius, fCenterCircleRadius);
}
public void AlarmClockLine()
{
if (Convert.ToInt32(valandos) > 23 || Convert.ToInt32(minutes) > 59)
{
valandos = "0";
minutes = "0";
}
alarmRod = (Convert.ToInt32(valandos) % 12 + Convert.ToInt32(minutes) / 60F) * 30 * PI / 180;
}
// Alarm clock rodykle
public void DrawLine3(float fThickness, float fLength, Color color, float fRadians, PaintEventArgs e)
{
e.Graphics.DrawLine(new Pen(color, fThickness),
fCenterX - (float)(fLength / 9 * Math.Sin(fRadians)),
fCenterY + (float)(fLength / 9 * Math.Cos(fRadians)),
fCenterX + (float)(fLength * Math.Sin(fRadians)),
fCenterY - (float)(fLength * Math.Cos(fRadians)));
}
// Matmenu keitimas
private void AnalogClock_Resize(object sender, EventArgs e)
{
this.Draw1MinuteTicks = true;
this.Draw5MinuteTicks = true;
this.ForeColor = System.Drawing.SystemColors.AppWorkspace;
this.HourHandColor = System.Drawing.Color.DarkGray;
this.Location = new System.Drawing.Point(12, 12);
this.MinuteHandColor = System.Drawing.Color.DarkGray;
this.Name = "analogClock3";
this.SecondHandColor = System.Drawing.Color.BlueViolet;
this.Size = new System.Drawing.Size(402, 402);
this.TabIndex = 2;
this.TicksColor = System.Drawing.Color.Black;
this.Width = this.Height;
//this.Width = Width/2;
//this.Height = Height/2;
this.fRadius = this.Height / 2;
this.fCenterX = this.ClientSize.Width / 2;
this.fCenterY = this.ClientSize.Height / 2;
this.fHourLength = (float)this.Height / 3 / 1.65F;
this.fMinLength = (float)this.Height / 3 / 1.20F;
this.fSecLength = (float)this.Height / 3 / 1.15F;
this.fHourThickness = (float)this.Height / 100;
this.fMinThickness = (float)this.Height / 150;
this.fSecThickness = (float)this.Height / 200;
this.fCenterCircleRadius = this.Height / 50;
this.Refresh();
}
public Color HourHandColor // Valandines rodykles spalva
{
get { return this.hrColor; }
set { this.hrColor = value; }
}
public Color MinuteHandColor // minutines rodykles spalva
{
get { return this.minColor; }
set { this.minColor = value; }
}
public Color SecondHandColor // sekundines rodykles spalva
{
get { return this.secColor; }
set
{
this.secColor = value;
this.circleColor = value;
}
}
public Color TicksColor // tiksejimu rodykles spalva
{
get { return this.ticksColor; }
set { this.ticksColor = value; }
}
public bool Draw1MinuteTicks // geteriai seteriai minutinems linijoms
{
get { return this.bDraw1MinuteTicks; }
set { this.bDraw1MinuteTicks = value; }
}
public bool Draw5MinuteTicks // geteriai seteriai valandinems linijoms
{
get { return this.bDraw5MinuteTicks; }
set { this.bDraw5MinuteTicks = value; }
}
}
}