C# ve Analog Clock

C# ve Analog Clock

Analog Clock projesinin C# sürümünü yazmamak olmazdı herhalde. Delphi sürümünde yapılan ufak tefek değişikliklerle C# sürümünü elde ettim. Aslında piyasada ne kadar yorumlayıcı (interpreter) varsa hepsinden nefret ediyorum ama C#' a ayrı bir sempatim var. Delphi ile geliştirdiğim programları C#' a çevirme konusunda hiç zorlanmıyorum. Belki de Delphi ve C# aynı elden çıktığı içindir. Malum her iki dilin de geliştiricisi Anders Hejlsberg. Neyse konumuzun dışına çıkmadan proje hakkında bazı bilgiler verelim. Proje Visual Studio 2008 ortamında .NET Framework 3.5 temel alaınarak geliştirildi. Projenin en önemli yordamı PaintElements. Burada bazı matematiksel işlemler mevcut. Akrep, yelkovan ve saniye için açıların hesaplanması işlemlerine dikkat etmeniz gerekiyor. Elbette öncelikle TranslateTransform ve RotateTransform işlemleri iyice anlaşılmalı. MSDN üzerinden okumanızı tavsiye ederim. Diğer matematiksel işlemler hakkında sorun yaşarsanız -ki zannetmiyorum- bana mail atabilirsiniz. PaintElements yordamını aşağıda bulabilirsiniz.


private void PaintElements()
{
/* Acilari su anki saate gore hesapla. */
DateTime Now = DateTime.Now;
int Hour = Now.Hour;
int Minute = Now.Minute;
int Second = Now.Second;
Single AngleS = Second * 6;
Single AngleM = Minute * 6 + AngleS / 60;
Single AngleH = Hour * 30 + AngleM / 12;
/* Orta noktayi ekran genisligine gore bul. */
Single Dx = this.Width / 2 - 1;
Single Dy = this.Height / 2 - 1;
Single Ox = -6; // -13 div 2
Single Oy = -64; // -129 div 2;
/* Cizim alaninin durumunu sakla. */
System.Drawing.Drawing2D.GraphicsState State = FGraphics.Save();
/* Baslangic cizim noktasini formun ortasina konumlandir. */
FGraphics.TranslateTransform(Dx, Dy);
/* Saat parcasini ciz */
FGraphics.RotateTransform(AngleH);
FGraphics.DrawImage(FHour, Ox, Oy, 13, 129);
FGraphics.RotateTransform(-AngleH);
/* Dakika parcasini ciz */
FGraphics.RotateTransform(AngleM);
FGraphics.DrawImage(FMinute, Ox, Oy, 13, 129);
FGraphics.RotateTransform(-AngleM);
/* Saniye parcasini ciz */
FGraphics.RotateTransform(AngleS);
FGraphics.DrawImage(FSecond, Ox, Oy, 13, 129);
FGraphics.RotateTransform(-AngleS);
/* Nokta parcasini ciz */
FGraphics.DrawImage(FDot, Ox, Oy, 13, 129);
/* Cizim alaninin durumunu eski haline getir. */
FGraphics.Restore(State);
}

Analog Clock projesinin C# versiyonunu aşağıdaki linkten indirebilirsiniz.

analog-clock-csharp-source.rar [249 KB]