İnternette dolasırken gözume hoş bir kod carptı paylaşmak istedim.
C# ta timer ve grafik metotları kullanarak analog saat yapımı. Bana gayet ilginç ve guzel bir kod geldi:
19 private void Form1_Load(object sender, EventArgs e)
20 {
21 this.ClientSize = new Size(300, 300);
22 Timer zaman = new Timer();
23 zaman.Interval = 1000;
24 zaman.Start();
25 zaman.Tick += new System.EventHandler(zaman_Tick);
26 }
27
28 private void zaman_Tick(object sender, EventArgs e)
29 {
30 float yari_cap, xorta, yorta, xx, yx;
31 Graphics cizim;
32 cizim = this.CreateGraphics();
33 cizim.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
34 yari_cap = this.ClientSize.Width / 2;
35 cizim.DrawEllipse(new Pen(Color.Black, 2), 0, 0, 2 * yari_cap, 2 * yari_cap);
36 cizim.DrawEllipse(new Pen(Color.Black, 2), 10, 10, 2 * yari_cap - 20, 2 * yari_cap - 20);
37 cizim.FillEllipse(new SolidBrush(this.BackColor), 15, 15, 2 * yari_cap - 25, 2 * yari_cap - 25);
38 xorta = yari_cap;
39 yorta = yari_cap;
40 yari_cap -= 10;
41 int saat, dakika, saniye, aci, x, y, x1, y1;
42 for (aci = 0; aci <= 360; aci += 6)
43 {
44 x = (int)(xorta + (yari_cap + 10) * Math.Cos(aci * 3.1415 / 180));
45 y = (int)(yorta - (yari_cap + 10) * Math.Sin(aci * 3.1415 / 180));
46 x1 = (int)(xorta + (yari_cap) * Math.Cos(aci * 3.1415 / 180));
47 y1 = (int)(yorta - (yari_cap) * Math.Sin(aci * 3.1415 / 180));
48 if ((aci % 30) == 0)
49 cizim.DrawLine(new Pen(Color.Red, 10), x, y, x1, y1);
50 else
51 cizim.DrawLine(new Pen(Color.Blue, 5), x, y, x1, y1);
52 }
53 System.Drawing.Drawing2D.GraphicsPath bicim;
54 bicim = new System.Drawing.Drawing2D.GraphicsPath();
55 saat = System.DateTime.Now.TimeOfDay.Hours;
56 aci = -saat * 30 + 90;
57 xx = (int)(xorta + yari_cap * 2 / 3 * Math.Cos(aci * 3.1415 / 180));
58 yx = (int)(yorta - yari_cap * 2 / 3 * Math.Sin(aci * 3.1415 / 180));
59 x = (int)(xorta - 10 * Math.Cos(aci * 3.1415 / 180 + Math.PI / 2));
60 y = (int)(yorta + 10 * Math.Sin(aci * 3.1415 / 180 + Math.PI / 2));
61 x1 = (int)(xorta + 10 * Math.Cos(aci * 3.1415 / 180 + Math.PI / 2));
62 y1 = (int)(yorta - 10 * Math.Sin(aci * 3.1415 / 180 + Math.PI / 2));
63 bicim.AddLine(x, y, xx, yx);
64 bicim.AddLine(x1, y1, xx, yx);
65 bicim.AddLine(x, y, x1, y1);
66 dakika = System.DateTime.Now.Minute;
67 aci = -dakika * 6 + 90;
68 xx = (int)(xorta + yari_cap * Math.Cos(aci * 3.1415 / 180));
69 yx = (int)(yorta - yari_cap * Math.Sin(aci * 3.1415 / 180));
70 x = (int)(xorta - 5 * Math.Cos(aci * 3.1415 / 180 + Math.PI / 2));
71 y = (int)(yorta + 5 * Math.Sin(aci * 3.1415 / 180 + Math.PI / 2));
72 x1 = (int)(xorta + 5 * Math.Cos(aci * 3.1415 / 180 + Math.PI / 2));
73 y1 = (int)(yorta - 5 * Math.Sin(aci * 3.1415 / 180 + Math.PI / 2));
74 bicim.AddLine(x, y, xx, yx);
75 bicim.AddLine(x1, y1, xx, yx);
76 bicim.AddLine(x, y, x1, y1);
77 saniye = System.DateTime.Now.TimeOfDay.Seconds;
78 aci = -saniye * 6 + 90;
79 xx = (int)(xorta + yari_cap * Math.Cos(aci * 3.1415 / 180));
80 yx = (int)(yorta - yari_cap * Math.Sin(aci * 3.1415 / 180));
81 x = (int)(xorta - 1 * Math.Cos(aci * 3.1415 / 180 + Math.PI / 2));
82 y = (int)(yorta + 1 * Math.Sin(aci * 3.1415 / 180 + Math.PI / 2));
83 x1 = (int)(xorta + 1 * Math.Cos(aci * 3.1415 / 180 + Math.PI / 2));
84 y1 = (int)(yorta - 1 * Math.Sin(aci * 3.1415 / 180 + Math.PI / 2));
85 bicim.AddLine(x, y, xx, yx);
86 bicim.AddLine(x1, y1, xx, yx);
87 bicim.AddLine(x, y, x1, y1);
88 cizim.FillEllipse(new SolidBrush(Color.Black), xorta - 20, yorta - 10, 30, 30);
89 cizim.DrawPath(new Pen(Color.Blue), bicim);
90
91 }