![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| beyond11 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 3.1.2008 Репутация: нет Всего: нет |
Тема курсового - сделать программу "Часы", которая показывала бы часы со стрелками (движущимися ежесекундно, ессесно).
Разобрался с рисованием более-менее... Сделал, чтобы при старте программы в форме рисовались надписи и т.д. Установил компонент таймер, теперь надо сделать, чтобы каждые 1000 миллисекунд перерисовывалась форма, а именно стрелки на ней. Никак не допру как это сделать. Вот функция проорисовки формы сразу после старта программы: private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { e->Graphics->DrawString("12",gcnew System::Drawing::Font(FontFamily::GenericMonospace, 30) ,Brushes::Blue,170,10); e->Graphics->DrawEllipse(gcnew Pen(Brushes::Red, 2), 50, 50, 300, 300); e->Graphics->DrawEllipse(gcnew Pen(Brushes::Red, 1), 198, 198, 4, 4); //стрелка e->Graphics->DrawLine(gcnew Pen(Brushes::DarkMagenta, 2), 200, 200, 200, 54); } Вот, сделал функцию, которая будет происходить каждую секунду (в свойствах таймера поставил интервал равным 1000). private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { } Так вот, что вписать в функцию System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) , чтобы стрелка перерисовывалась каждую секунду в новом месте? Я знаю как определить координаты куда именно рисовать стрелку, проблема в том, что я не могу ВООБЩЕ вызвать перерисовку формы в этой функции, помогите пожалуйста. |
|||
|
||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
Рисованием занимается функция Paint. Сюда загляни.
-------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Для перерисовки нужно вызвать Refresh() из обработчика таймера. Координаты и т.п. вычислять с помощью синусов/косинусов, исходя из периода (60 секунд) и текущего кол-ва секунд в DateTime.Now.
-------------------- ![]() |
|||
|
||||
| beyond11 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 3.1.2008 Репутация: нет Всего: нет |
> Рисованием занимается функция Paint. Сюда загляни.
Там все материалы по С#, а мне нужны по С++. И я уже сколько раз пытался с этим паинтом разобраться, ошибки лезут везде и всегда. >Для перерисовки нужно вызвать Refresh() из обработчика таймера. Координаты и т.п. вычислять с помощью синусов/косинусов, исходя из периода (60 секунд) и текущего кол-ва секунд в DateTime.Now. Меня интересует не это. Как вычислить координаты стрелок я знаю, текущее количество секунд - потом разберусь. Мне нужно вообще хоть как-то вызвать эту долбаную перерисовку, я что не пишу - всегда и везде куча ошибок (я вообще зелёный ещё в WinForms). зы: Пишу в С++ а не в С# Если не сложно, впишите пожалуйста в функцию Void timer1_Tick то, что нужно. Мне главное сам принцип понять! А с координатами стрелок проблем не будет. Заранее спасибо. |
|||
|
||||
| beyond11 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 3.1.2008 Репутация: нет Всего: нет |
оффтоп, решил проблему, здесь было неправильно
Это сообщение отредактировал(а) beyond11 - 4.1.2008, 17:47 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
-------------------- ![]() |
|||
|
||||
| beyond11 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 3.1.2008 Репутация: нет Всего: нет |
||||
|
||||
| AET |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 13.3.2007 Репутация: нет Всего: нет |
где можно наити пример или скинте в личко блогодарен
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Рецепт создания часов на дотнете (с) mr.DUDA:
- создайте пустое приложение типа Windows Application; - в свойствах формы укажите DoubleBuffered = true, чтобы не мерцало при перерисовке; - с тулбокса вытянуть на форму компонент Timer, в свойствах поставить Enabled = true, Interval = 250, так мы не пропустим ни секунды; - добавить обработчик события таймера Tick и события формы Paint; - пишем код:
Картинко: -------------------- ![]() |
|||
|
||||
| AET |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 13.3.2007 Репутация: нет Всего: нет |
mr.DUDA блогодарен за ответ в рисовани я 0 подскажи как можно чтобы задни фон был в виде круга и цифры были
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
AET, задай форме свойство BackgroundImage.
-------------------- ![]() |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |