Задание №11. Часы
Цель занятия: Научиться рисовать графические изображения на форме Студенты должны уметь: подключать модули для работы с датой и временем, программировать приложение Часы Задание. 1. Выберите в меню Пуск – Программы - CodeGear RAD Studio2009 2. Создание новое приложение (File – New – VCL Forms Application). a. Проектирование интерфейса приложения. а). Переименуйте название формы на Часы. б). Добавьте компонент Timer1 на приложение. b. Программирование приложения а). Включите модули для работы с датой и временем, а также #include " DateUtils.hpp" #include " math.h" б). Опишите переменные Int x0, y0; Int ahr, amin, asec; #define R 100 в). Напишите программный код в конструкторе формы: __fastcall TForm1:: TForm1(TComponent* Owner) : TForm(Owner) { TDateTime t; ClientHeight=(R+30)*2; //задание размера формы в соответствии с размером циферблата ClientWidth=(R+30)*2; x0=R+30; y0=R+30; t=Now(); //текущее время ahr=90-HourOf(t)*30-(MinuteOf(Today())/12)*6; //Определение положения стрелок amin=90-MinuteOf(t)*6; asec=90-SecondOf(Today())*6; Timer1-> Interval=1000; //период сигнала от таймера 1 секунда Timer1-> Enabled=true; //пуск таймера } г). Перейдите на модуль Unit1.h. Измените описание класса TForm1: добавьте описание двух процедур: class TForm1: public TForm { __published: // IDE-managed Components TTimer *Timer1; Void __fastcall DrawClock(void); Void __fastcall Vector(int x0, int y0, int a, int l); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; д). Напишите процедуру для рисования линии (стрелок): void __fastcall TForm1:: Vector(int x0, int y0, int a, int l) { #define TORAD 0.0174532 //коофициент перерасчёта угла из градусов в радианы Int x, y; Canvas-> MoveTo(x0, y0); x=x0+l*cos(a*TORAD); y=y0-l*sin(a*TORAD); Canvas-> LineTo(x, y); } е). Напишите процедуру для изображения стрелок: void __fastcall TForm1:: DrawClock(void) { TDateTime t; Canvas-> Pen-> Color=clBtnFace; //стереть изображение стрелок Canvas-> Pen-> Width=3 Vector(x0, y0, ahr, R-20);; //часовую Vector(x0, y0, amin, R-15); //минутную Vector(x0, y0, asec, R-7); //секундную t=Now(); ahr=90-HourOf(t)*30-(MinuteOf(t)%12)*6; //новое положение стрелок amin=90-MinuteOf(t)*6; asec=90-SecondOf(t)*6; Canvas-> Pen-> Width=3; //нарисовать стрелки Canvas-> Pen-> Color=clBlack; Vector(x0, y0, ahr, R-20); Canvas-> Pen-> Width=2; Canvas-> Pen-> Color=clBlack; Vector(x0, y0, amin, R-15); Canvas-> Pen-> Width=1; Canvas-> Pen-> Color=clYellow; Vector(x0, y0, asec, R-7); } ж). Напишите процедуру для прорисовки циферблата на событие onPaint для формы Form1: void __fastcall TForm1:: FormPaint(TObject *Sender) //прорисовка циферблата {
|