Clock
Добър ден!
Вчера ми хрумна една идея за едно проектче - .Net Часовник :)
И обмислих го и настина ми се стори един интересен проект, най-вече за начинаещи програмисти.
И идеята ми беше следната
Картинката която използвам за background
е със ширина 160(x) и дължина 160(y), следователно центърът и е на 80x80.
От тук можем да си направим извода, че трябва да поставим центъра на изчертаването точно в тази позиция. Така и тъй като за часовник използваме кръг, градусите са му - 360.
И започваме сметките за всяко едно от трите: секунда, минута, час
Download - Изпълнимият файл се намира в bin\Release и забележете, че няма да работи без clock.bmp, така че ако искате да разархивирате програмата тя трябва да върви с clock.bmp!
(Изображението също се намира в същата директория)
Успех! :)
Вчера ми хрумна една идея за едно проектче - .Net Часовник :)
И обмислих го и настина ми се стори един интересен проект, най-вече за начинаещи програмисти.
И идеята ми беше следната
- Enable на double buffering - по този начин увеличаваме броят на буферите от един на два което ще раче, че докато единият буфер чете, другият може да пише и обратното(препоръчвам тази техника на всички, тъй като по този начин се предотвратяват повечето BufferOverflows проблеми :)
- Използвайки едни от невероятните възможности на Windows Forms да кача background картинка - самият часовник(без стрелките 160x160)
- Ползвам Timer, за да може всяка секунда да преизчертавам формата - използвам функцията Invalidate, тя от своя страна кара формата да се преизчертае -> вика се функцията OnPaint и ние използваме точно нея, за да положим стрелките не подходящото място :)
Картинката която използвам за background
е със ширина 160(x) и дължина 160(y), следователно центърът и е на 80x80.
От тук можем да си направим извода, че трябва да поставим центъра на изчертаването точно в тази позиция. Така и тъй като за часовник използваме кръг, градусите са му - 360.
И започваме сметките за всяко едно от трите: секунда, минута, час
- Секунда: 1min = 60s (за едно завъртане) и сега трябва да опраделим колко трябва да е "стъпката" на всеки Tick, така че да може да обиколи целият кръг, без да изоставя или напредва. И затова трябва да изчилим "стъпката" - 360 / 60 = 6.0, също така към формулата трябва да предвидим че започваме да въртим от X оста, при което нашата по-горна формула няма да работи - затова изваждане 90 и по този начин въртим от Y оста - Секунда * 6.0 - 90.
- Минута: същото като по-горе.
- Час: при часа нещата малко се усложняват - един ден = 24 часа, но нашият часовник е проектиран така че има само 12 показващи се часа -> ще го изчислим за 1/2 ден -> 12 часа. 360 / 12 = стъпка 30.0 и оттук формулата Час * 30.0 - 90(защото като по горе пак въртим от X оста)
Download - Изпълнимият файл се намира в bin\Release и забележете, че няма да работи без clock.bmp, така че ако искате да разархивирате програмата тя трябва да върви с clock.bmp!
(Изображението също се намира в същата директория)
Успех! :)