C# ile Analog Saat Uygulaması

Bu uygulamamızda form ekranında kendi saatimizi yapacağız. Tamamen kodlarla çizim yapacağız.

Bu uygulamamızda form ekranında kendi saatimizi yapacağız. Tamamen kodlarla çizim yapacağız.


using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;



namespace WindowsFormsApplication10

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }



        private void Form1_Load(object sender, EventArgs e)

        {

            timer1.Interval = 1000;

            timer1.Enabled = true;

            //Formun iç yüksekliği ile iç genişliğini eşitle

            this.Height = this.Width + this.ClientSize.Width - this.ClientSize.Height;

        }



        private void timer1_Tick(object sender, EventArgs e)

        {

            Graphics g;

   g = this.CreateGraphics();

   float xorta, yorta, yarı_çap, sx, sy;

   if (this.ClientSize.Width > this.ClientSize.Height)

    yarı_çap = this.ClientSize.Height / 2;

   else

    yarı_çap = this.ClientSize.Width / 2;

   g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

   //Saatin etrafındaki ait daireleri çiz

   g.DrawEllipse(new Pen(Color.Red), 0, 0, 2 * yarı_çap, 2 * yarı_çap);

   g.DrawEllipse(new Pen(Color.Red), 8, 8, 

    2 * yarı_çap - 16, 2 * yarı_çap - 16);

   g.FillEllipse(new SolidBrush(this.BackColor), 9, 9, 

    2 * yarı_çap - 18, 2 * yarı_çap - 18);

   xorta = yarı_çap;

   yorta = yarı_çap;

   yarı_çap -= 8;

   int açı, saniye, dakika, saat;

   int kx1, kx2, ky1, ky2;

   //Saati ve dakikayı gösteren çizgileri oluştur

   for (açı = 0 ; açı<= 360 ; açı+=6)

   {

    kx1 = (int) (xorta + (yarı_çap + 8) * Math.Cos(açı * 3.1415 / 180));

    ky1 = (int) (yorta - (yarı_çap + 8) * Math.Sin(açı * 3.1415 / 180));

    kx2 = (int) (xorta + (yarı_çap) * Math.Cos(açı * 3.1415 / 180));

    ky2 = (int) (yorta - (yarı_çap) * Math.Sin(açı * 3.1415 / 180));

    if ((açı % 30) == 0)

     //Her 30 derecede bir saat başı bulunur. Bunları kalın çiz

     g.DrawLine(new Pen(Color.Red, 4), kx1, ky1, kx2, ky2);

    else

     //Her 6 derecede bir dakika bulunur. Bunları ince çiz

     g.DrawLine(new Pen(Color.Blue, 2), kx1, ky1, kx2, ky2);

   }

   //Orta noktayı bulup Bizim Saat yaz

   kx1 = (int)(xorta - (g.MeasureString("yusufum", 

    new Font("Tahoma", 8, FontStyle.Regular)).Width) / 2);

   ky1 = 30;

   g.DrawString("yusuf ziya sosan", new Font("Tahoma", 8, FontStyle.Regular), 

    new SolidBrush(Color.Blue), kx1, ky1);

   //Saat, Dakika, Saniye çizgilerini hesapla

   System.Drawing.Drawing2D.GraphicsPath p = new System.Drawing.Drawing2D.GraphicsPath();

   saat = DateTime.Now.TimeOfDay.Hours; //saati al

   açı = -saat * 30 + 90; //her saat 30 derecedir. 

   //360 derece / 12 saat = 30

   sx = (int)(xorta + yarı_çap * 2 / 3 * Math.Cos(açı * 3.1415 / 180));

   sy = (int)(yorta - yarı_çap * 2 / 3 * Math.Sin(açı * 3.1415 / 180));

   kx1 = (int)(xorta - 8 * Math.Cos(açı * 3.1415 / 180 + Math.PI / 2));

   kx2 = (int)(xorta + 8 * Math.Cos(açı * 3.1415 / 180 + Math.PI / 2));

   ky1 = (int)(yorta + 8 * Math.Sin(açı * 3.1415 / 180 + Math.PI / 2));

   ky2 = (int)(yorta - 8 * Math.Sin(açı * 3.1415 / 180 + Math.PI / 2));

   //Akrebi üçgen şeklinde çiz

   p.AddLine(kx1, ky1, sx, sy);

   p.AddLine(kx2, ky2, sx, sy);

   p.AddLine(kx1, ky1, kx2, ky2);



   dakika = DateTime.Now.TimeOfDay.Minutes; //dakikayı saatten al

   açı = -dakika * 6 + 90; //her bir dakika 6 derecedir.360 derece/60dakika

   sx = (float)(xorta + yarı_çap * Math.Cos(açı * 3.1415 / 180));

   sy = (float)(yorta - yarı_çap * Math.Sin(açı * 3.1415 / 180));

   kx1 = (int)(xorta - 4 * Math.Cos(açı * 3.1415 / 180 + Math.PI / 2));

   kx2 = (int)(xorta + 4 * Math.Cos(açı * 3.1415 / 180 + Math.PI / 2));

   ky1 = (int)(yorta + 4 * Math.Sin(açı * 3.1415 / 180 + Math.PI / 2));

   ky2 = (int)(yorta - 4 * Math.Sin(açı * 3.1415 / 180 + Math.PI / 2));

   //Yelkovanı üçgen şeklinde çiz

   p.AddLine(kx1, ky1, sx, sy);

   p.AddLine(kx2, ky2, sx, sy);

   p.AddLine(kx1, ky1, kx2, ky2);



   saniye = DateTime.Now.TimeOfDay.Seconds; //saniyeyi saatten al

   açı = -saniye * 6 + 90; //her bir saniye 6 derecedir.360 derece/60saniye

   sx = (float)(xorta + yarı_çap * Math.Cos(açı * 3.1415 / 180));

   sy = (float)(yorta - yarı_çap * Math.Sin(açı * 3.1415 / 180));

   kx1 = (int)(xorta - 1 * Math.Cos(açı * 3.1415 / 180 + Math.PI / 2));

   kx2 = (int)(xorta + 1 * Math.Cos(açı * 3.1415 / 180 + Math.PI / 2));

   ky1 = (int)(yorta + 1 * Math.Sin(açı * 3.1415 / 180 + Math.PI / 2));

   ky2 = (int)(yorta - 1 * Math.Sin(açı * 3.1415 / 180 + Math.PI / 2));

   //Saniyeyi üçgen şeklinde çiz

   p.AddLine(kx1, ky1, sx, sy);

   p.AddLine(kx2, ky2, sx, sy);

   p.AddLine(kx1, ky1, kx2, ky2);

   //Ortadaki yuvarlak

   p.AddEllipse(xorta - 8, yorta - 8, 16, 16);

   //Akrep, Yelkovan ve Saniye çizimlerini yap

   g.DrawPath(new Pen(Color.Blue, 1), p);

   //Ortadaki yuvarlağı boya

   g.FillPath(new SolidBrush(Color.Blue), p);

   g.Dispose();

   p.Dispose();

  }



        private void Form1_Paint(object sender, PaintEventArgs e)

        {

            e.Graphics.Clear(this.BackColor);

        }



        private void Form1_Resize(object sender, EventArgs e)

        {

            //Form boyutlandığında içeriği sil

            Graphics g;

            g = this.CreateGraphics();

            g.Clear(this.BackColor);

            g.Dispose();

        }

     }

   }

  • Etiketler;
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git