Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика. Базовый курс. Ч.3. Основы алгоритмизации и про- граммирования в среде Visual C++ 2005.pdf
Скачиваний:
53
Добавлен:
05.02.2023
Размер:
3.81 Mб
Скачать

169

private: System::Void button12_Click (System::Object^ sender, System:: EventArgs^ e)

{ // функция выполнения операции float numb;

numb=(float::Parse)(textBox1->Text);

if (f==0) oper=((Button^)sender)->TabIndex; else

{switch(oper)

{case 0: accum=numb; break;

case 1: accum=accum+numb; break; case 2: accum=accum-numb; break; case 3: accum=accum*numb; break; case 4: accum=accum/numb; break;

}

oper=((Button^)sender)->TabIndex; f=0;

textBox1->Text=(accum).ToString();

}

}

И также назначим эту функцию для остальных кнопок с операциями.

Создадим отдельно функцию для кнопки «C»:

private: System::Void button17_Click(System::Object^ sender, System::EventArgs^ e)

{textBox1->Text="0"; oper=0; accum=0; }

И создадим для кнопки «,» такую функцию:

private: System::Void button11_Click(System::Object^ sender, System::EventArgs^ e)

{textBox1->Text=textBox1->Text+»,»; }

Кроме того, создадим функцию, срабатывающую в момент создания формы:

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e)

{ textBox1->Text=««; oper=0; }

Работающий калькулятор готов!

4.ИСПОЛЬЗОВАНИЕ ТАЙМЕРА. КОМПОНЕНТ CHECKBOX

4.1Таймер

170

До сих пор рассматривали компоненты, которые непосредственно видны на форме и выполняют видимую роль.

Однако, есть еще и компоненты, которые выполняют свою работу, не будучи видными, для постороннего глаза. Одним из таких компонентов является Timer (таймер). В его задачу входит обрабатывать какое-либо сообщение через определенные интервалы времени. Хотя этот компонент и невидим в процессе работы программы, у него тоже есть свои события и свойства. Вернее, событие одно – Tiсk, которое определяет, что должна делать программа, когда истечет заданный интервал.

Самое важное свойство таймера – Interval (Интервал). Оно указывает, когда (через какое время) в следующий раз таймер должен сработать. Промежуток времени задается в тысячных долях секунды – миллисекундах. По умолчанию, свойство Interval содержит число 1000, следовательно, таймер будет срабатывать каждую секунду.

Рассмотрим пример.

Пример 4.1. Создать программу-игру «Прыгающая кнопка» (рис. 9.11): кнопка будет прыгать по поверхности формы с заданным интервалом и следует попасть по ней (щелкнуть на ней мышью).

Предусмотреть возможность ускорить и замедлить движение кнопки.

Рис. 9.11

Итак, создадим новый проект и разместим, прежде всего, объект Timer. Обратите внимание, что он разместится не на самой форме, а сразу под ней. Поместим также нужное число кнопок и сменим на них надписи. Давайте сделаем так, чтобы через каждые пол-секунды кнопка прыгала куда-нибудь. А задача пользователя – ее поймать. Свойство Interval объекта Timer сделайте равным 500.

171

Затем дважды щелкните по значкуTimer, чтобы открыть обработчик события. Начинаем писать код:

private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e)

{int x,y;

// кнопка может прыгать по всей длине формы x=rand()%((this->Size.Width)-100);;

// кнопка может прыгать по всей ширине формы y=rand()%(this->Size.Height-100);

button1->Location=Point(x, y);

}

Обратите внимание, что положение кнопки на форме(координаты ее левой верхней точкиx,y) задаются с помощью датчика случайных чисел. Дополнительный сдвиг на 100 предусмотрели, чтобы кнопка своими краями не выскакивала за пределы формы.

Когда нужно закончить игру? Когда пользователь щелкнет по кнопке. То есть для кнопки произойдет событиеClick. Его и будем программировать. Щелкните два раза по кнопкеbutton1, чтобы создать процедуру обработки щелчка. Введите следующий код:

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

{timer1->Enabled=false; button1->Text="ÓÐÀ!" ;

}

Осталось доработать кнопку Выход, а также кнопку Медленнее и кнопку Быстрее, при нажатии на которые увеличивается или уменьшается интервал таймера. Функции события Click для них имеют вид:

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)

{ //кнопка «Быстрее» timer1->Interval=timer1->Interval/2;

}

private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e)

{ //кнопка «Медленнее» timer1->Interval=timer1->Interval*2;

}

private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e)

172

{ //кнопка «Выход» this->Close(); }

И остается проверить в работе.

Пример 4.2. Создадим электронные часы, на которых будет отображаться текущее время, дата и день недели (рис. 9.12).

Рис. 9.12

Создадим новый проект и разместим на форме два объекта Label. сразу зададим шрифт побольше для этих надписей(например, 24 кегля). Для этого, напомним, нужно выделить этот объект и в окне Инспектора объектов выбрать свойствоFont, щелкнуть там по многоточию и в возникшем окне выбрать тип и размер шрифта. Поместим также объект Timer.

Далее нужно создать события. Одно событие для формы Form_Load (выбрать форму и на вкладке Events выбрать Load):

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e)

{ int dn; String^ named;

timer1->Interval = 1000;//период сигналов таймера 1с timer1->Enabled = true; // пуск таймера

//получить дату label2->Text=

"Сегодня: " + DateTime::Now.Today.ToShortDateString() ; // вывести день недели

dn= (int)DateTime::Now.DayOfWeek ; switch ( dn)

{case 0: named="воскресенье"; break;