C# Analog Saat
AnalogSaat adlı projemizi oluşturduktan sonra formumuza öncelikle Toolbox penceresinden bir adet pictureBox ekliyoruz ve Properties penceresinden veya pictureBox'un sağ üst köşesindeki küçük ok aracılığıyla SizeMode'unu Zoom olarak ayarlıyoruz.
Tüm kodlar açıklamaları ile birlikte aşağıda yer almaktadır.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AnalogSaat
{
public partial class Form1 : Form
{
Timer t = new Timer();
int genislik = 300, yukseklik = 300;
int saniye = 140, dakika = 110, saat = 80;
int cx, cy;
Bitmap bmp;
Graphics g;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
bmp = new Bitmap(genislik + 1, yukseklik + 1);
cx = genislik / 2;
cy = yukseklik / 2;
this.BackColor = Color.White;
t.Interval = 1000; // milisaniye
t.Tick += new EventHandler(this.t_TikTak);
t.Start();
}
private void t_TikTak(object sender, EventArgs e)
{
//grafik oluşturma
g = Graphics.FromImage(bmp);
//zamanı alma
int sn = DateTime.Now.Second;
int dk = DateTime.Now.Minute;
int s = DateTime.Now.Hour;
int[] koordinat = new int[2];
//temizle
g.Clear(Color.White);
//daire çizme
g.DrawEllipse(new Pen(Color.Black, 1f), 0, 0, genislik, yukseklik);
//figürleri çizme
g.DrawString("12", new Font("Arial", 12), Brushes.Black, new PointF(140, 2));
g.DrawString("3", new Font("Arial", 12), Brushes.Black, new PointF(286, 140));
g.DrawString("6", new Font("Arial", 12), Brushes.Black, new PointF(142, 282));
g.DrawString("9", new Font("Arial", 12), Brushes.Black, new PointF(0, 140));
//saniye
koordinat = Kordinat(sn, saniye);
g.DrawLine(new Pen(Color.Red, 1f), new Point(cx, cy), new Point(koordinat[0], koordinat[1]));
//dakika
koordinat = Kordinat(dk, dakika);
g.DrawLine(new Pen(Color.Black, 2f), new Point(cx, cy), new Point(koordinat[0], koordinat[1]));
//saat
koordinat = sKordinat(s%12, dk, saat);
g.DrawLine(new Pen(Color.Gray, 3f), new Point(cx, cy), new Point(koordinat[0], koordinat[1]));
// picturebox'a bmp yükleme
pictureBox1.Image = bmp;
//zamanı gösterme
this.Text = "Analog Saat - " + s + ":" + dk + ":" + sn;
g.Dispose();
}
// dakika ve saniye için koordinat
private int[] Kordinat(int val, int hlen)
{
int[] kordinat = new int[2];
val *= 6; // her dakika ve saniye 6 derece
if (val >= 0 && val <= 180)
{
kordinat[0] = cx + (int)(hlen * Math.Sin(Math.PI * val / 180));
kordinat[1] = cy - (int)(hlen * Math.Cos(Math.PI * val / 180));
}
else
{
kordinat[0] = cx - (int)(hlen * -Math.Sin(Math.PI * val / 180));
kordinat[1] = cy - (int)(hlen * Math.Cos(Math.PI * val / 180));
}
return kordinat;
}
// saat için koordinat
private int[] sKordinat(int sval, int dval, int hlen)
{
int[] kordinat = new int[2];
//her saat 30 derece, her dakika 0.5 derece
int val = (int)((sval*30) +(dval*0.5));
if (val >= 0 && val <= 180)
{
kordinat[0] = cx + (int)(hlen * Math.Sin(Math.PI * val / 180));
kordinat[1] = cy - (int)(hlen * Math.Cos(Math.PI * val / 180));
}
else
{
kordinat[0] = cx - (int)(hlen * -Math.Sin(Math.PI * val / 180));
kordinat[1] = cy - (int)(hlen * Math.Cos(Math.PI * val / 180));
}
return kordinat;
}
}
}
C# Analog Saat
Reviewed by Esra TÜRKMEN
on
03:33
Rating: 5