Шаг 188.
Microsoft Visual C++ 2010. Язык С/С++.
Компоненты Windows Forms. Компонент Timer

    На этом шаге мы рассмотрим назначение и использование этого компонента.

    Компонент находится в списке All Windows Forms (Все формы Windows Forms) палитры компонентов. Он задает счетчик времени.

    Свойство Enabled управляет запуском и остановкой таймера.

    Свойство Interval задает промежуток времени, через который возникает единственное его событие Tick. При разработке обработчика события следует учитывать, что новое событие не возникает, пока не выполнятся все команды обработчика. Как только все команды обработчика будут завершены, новое событие возникает не позднее, чем через интервал времени, заданный в свойстве Interval. Основными методами компонента являются Start() и Stop(), которые запускают и останавливают таймер.

    Timer - это удобное средство для организации процессов, автоматически повторяющихся через равные интервалы времени. Например, вы хотите, чтобы на экране компьютера происходило движение различных окрашенных линий. Вставьте в обработчик события Tick формирование таких линий запустите это приложение. Пока не будет заполнен прямоугольник (компонент ProgressBar) на форме будут появляться разноцветные линии. Приложение в режиме дизайна изображено на рисунке 1, в режиме выполнения - на рисунке 2. Текст обработчиков приведены ниже.


Рис.1. Приложение в режиме разработки

    Текст обработчиков событий.

#pragma once

#include <cstdlib> // для функции rand()

namespace pr188_1 {
.    .    .    .    .    .
	}
#pragma endregion
// Действия, выполняемые по прошествии 
// заданного промежутка времени
private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) {
	 Color^ col = gcnew Color(); 
	 Pen^ pen = gcnew Pen(col->Black);
	 //чтобы создать  графический объект, надо получить ссылку на него 
	 //выполнив метод CreateGraphics() компонента  (формы) 
	 Graphics^ im = this->CreateGraphics();

	 int x1, x2, y1, y2;
	 x1 = rand(); //функция получения случайного числа
	 x2 = rand();
	 y1 = rand();
	 y2 = rand();
	 pen->Width = 5;   //ширина пера для рисования линии
			 
	 // Получить размеры формы
	 int x = this->Width;
	 int y = this->Height;

	 // надо привести интервалы случайных чисел, 
	 // чтобы они попадали в форму
	 if (x1  > x) 
		  x1 = x - ( x1 % x ); 
	 // вычисление цвета
	 int x1_col = x1 > 255?x1 % 255:x1;
	 // задание цвета
	 pen->Color = Color::FromArgb(x1_col); 
	 // надо привести интервалы случайных чисел, 
	 // чтобы они попадали в форму
	 if (x2  > 200) 
		 x2 = x - ( x2 % x ); 
	 if (y1  >  y)
		 y1 = y - ( y1 % y); 
	 if (y2 > y) 
		 y2 = y - ( y2 % y);
	 // вычисление цвета
	 int x2_col = x2 > 255?x2 % 255:x2;
	 int y1_col = y1 > 255?y1 % 255:y1;
	 int y2_col = y2 > 255?y2 % 255:y2;
	 // задание цвета
	 pen->Color = Color::FromArgb( x1_col, x2_col, y1_col, y2_col);
	 // рисует линию между 2-мя точками (х1, у1) и (х2,у2)
	 im->DrawLine(pen, x1, y1, x2, y2);

	 progressBar1->Value++;
	 // принудительная остановка таймера
	 if (progressBar1->Value == 100)
		 timer1->Stop();
 }
// Запуск/остановка таймера
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
	 progressBar1->Value = 0; 
	 //включение/отключение таймера 
	 if(!timer1->Enabled)
		 timer1->Enabled = true; 
	 else
		 timer1->Enabled = false;
 }
Архив проекта можно взять здесь.


Рис.2. Результат работы приложения (некоторые кадры)

    На следующем шаге мы рассмотрим компонент ProgressBar.




Предыдущий шаг Содержание Следующий шаг