برنامه زیر برنامه ساعت آنالوگ و عقربه ای است :
توجه شود که خود ساعت ، عقربه هایش عکس هستند و عکس ها Transparent هستند .
برای طراحی عقربه ها چون anchor در #C به صورت Top و Left است ، در هنگام طراحی عکس ها ، عقربه
ها باید به سمت چپ ترین یال عکس بچسبند، یعنی باید در گوشه قرار بگیرند :
عقربه هم به همین شکل بالا در گوشه سمت چپ عکس قرار گرفته اند.
برای پیدا کردن میزان چرخش باید دقت شود.
برای پیدا کردن چرخش دقیقه شمار :
می خواهیم 60 دقیقه را در یک دایره 360 درجه ای قرار دهیم ، پس با تقسیم 360 بر 60 ، خواهیم دانست
که هر دقیقه به 6 درجه چرخش نیاز دارد.
برای پیدا کردن چرخش ثانیه شمار :
private void timer1_Tick(object sender, EventArgs e)
{
theta_second = (int)DateTime.Now.Second * 6;
theta_minute = (int)DateTime.Now.Minute * 6;
theta_hour = (int)DateTime.Now.Hour * 30 +
(int)DateTime.Now.Minute / 2;
this.Invalidate();
}
و برای مثال برای چرخش عقربه ثانیه داریم :
int x = center_x;
int y = center_y;
second_hand = Properties.Resources.second_hand;
e.Graphics.TranslateTransform(x, y);
e.Graphics.RotateTransform(theta_second - 180);
e.Graphics.TranslateTransform(-x, -y);
e.Graphics.DrawImage(second_hand, new Point(center_x, center_y));
second_hand.Dispose();
همگان می دانیم که کد بالا ، مرکز دوران را به وسط فرم می آورد و به اندازه تتا میچرخاند و چون در فرم ،
مختصات بر عکس میباشد ، یک flip با کم کردن 180 از theta انجام میدهیم.
نکته : متد this.Invalidate رویداد Paint را فراخوانی میکند.
منبع:برنامه نویسی به زبان سی شارپ
ممنون.