Урок 9. Таймер с ProgressBar’ом
Вот мы снова встретились… пусть виртуально, но все равно приятно.
Сегодня мы рассмотрим создание таймера. Нет не часов, а таймера, отсчитывающего заданное время.
Создаем проект: Standard.exe. На форму устанавливает объекты:
-
3 Label’a – для индикации прошедшего времени;
-
2 Label’a – для разделения секунд, минут и сотых;
-
1 Label – для записи напоминания о процессе;
-
1 TextBox – для задания интервала времени (по умолчанию зададим 1 минуту = 60 сек.);
-
2 Timer’a – один будет показывать текущее время (Interval=10, т.е. сотые доли секунды), а второй – для таймера (Interval=500) для индикации записи;
-
1 кнопку (CommandButton) – для запуска timer’a отсчета;
-
1 ProgressBar (max=60)– для графического изображения оставшегося времени.
Примечание. Прежде чем продолжить выполнение задания – необходимо изучить свойства установленных объектов
Если не знаешь, как установить ProgressBar (ведь его нет на стандартной панели инструментов), то щелкни правой кнопкой на ней и выбери Компоненты (Components) откроется окно, в котором необходимо выбрать (поставить флажок) Microsoft Windows Common Controls 6.0 (SP6) и нажать ОК.
На панели инструментов появятся дополнительные объекты. Выберите ProgressBar.
После установки объектов и изменения свойства объектов у нас получится нечто вроде:
Осталось написать код для программы:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Sub Form_Load() ‘ задаем свойства ProgressBar’a
Call SendMessage(ProgressBar1.hwnd, 1033, 0, ByVal vbRed) ‘ полоса будет красной
Call SendMessage(ProgressBar1.hwnd, 8193, 0, ByVal &HFFFF00;) ‘ фон должен слиться с фоном формы
End Sub
Private Sub Command1_Click()
Text1.Enabled=False ‘ текст1 делаем недоступным для изменения
ProgressBar1.Max = 60 * Text1.Text ‘задаем максимальное значение ProgressBar’a
Label5.Caption = "Идет отсчет!" ‘ при нажатии кнопки надпись на Label5 меняется
Timer1.Enabled = True ‘ при нажатии кнопки включается таймер
End Sub
Private Sub Timer1_Timer()
x = Val(Label3.Caption)
x = x + 1 ‘ запускается таймер сотых секунды
Label3.Caption = x
If Label3 > 59 Then ‘ если сотых более 59, то
Label3 = 0 ‘запись3 обнуляется
Label2 = Label2 + 1 ‘в записи3 добавляется 1 секунда
End If
If Label2 > 59 Then ‘ если секунд более 59, то
Label2 = 0 ‘запись2 обнуляется
Label1 = Label1 + 1 ‘в записи1 добавляется 1 минута
End If
If Len(Label1) < 2 Then Label1 = "0" & Label1 ‘добавляем по нолику
If Len(Label2) < 2 Then Label2 = "0" & Label2 ‘ в записи для двузначности чисел
If Len(Label3) < 2 Then Label3 = "0" & Label3
If Label1 = "0" & Text1.Text Then ‘ если число на записи1 и текстовом поле
Timer1.Enabled = False ‘ совпадает, то останавливаем таймер1
Timer2.Enabled = False ‘ и таймер2
MsgBox ("Время вышло!!!") ‘ выводим сообщение
End If
ProgressBar1.Value = ProgressBar1.Value + 1 / 60 ‘ при отсчете времени величину прогрессбара увеличиваем на 1/60
If ProgressBar1.Value = ProgressBar1.Max Then ‘ при достижении максимума ProgressBar1.Value = 0 ‘прогрессбар обнуляем
End If
End Sub
Private Sub Timer2_Timer() ‘ таймеру2 задание: сигнализировать запись5
If Label5.Visible = True Then
Label5.Visible = False
Else: Label5.Visible = True
End If
End Sub
Для любознательных
Добавим в наш проект строку меню, как в любой программе Windows. Для этого нажмем кнопку в меню
и создадим несколько команд меню:
Для команды File
|
|
Для команды Фон формы
|
|
Для команды Шрифт, предварительно установив эти шрифты (их можно скачать из Интернета);
|
|
Для команды Цвет Прогрессбара
|
|
Теперь необходимо этим командам написать код:
-
Команда File
-
Запуск. Она заменяет нам кнопку Start – ее можно удалить:
Private Sub mnurun_Click()
ProgressBar1.Max = 60 * Text1.Text
Label5.Caption = "Идет отсчет!"
Timer1.Enabled = True
End Sub
- Выход – она дублирует нам крестик
на Строке заголовка:
Private Sub mnuexit_Click()
End
End Sub
-
Команда Фон формы:
- Синий:
Private Sub mnublue2_Click(Index As Integer)
Form1.BackColor = &HFF0000;
Label1.BackColor = &HFF0000;
Label2.BackColor = &HFF0000;
Label3.BackColor = &HFF0000;
Label4(0).BackColor = &HFF0000;
Label4(1).BackColor = &HFF0000;
End Sub
Так как при этом плохо виден отсчет для них тоже заменим цвет цифр, допустим на «Золотой». Впишем код до End Sub:
…
Label1.ForeColor = &HC0C0;&
Label1.ForeColor = &HC0C0;&
Label2.ForeColor = &HC0C0;&
Label3.ForeColor = &HC0C0;&
Label4(0).ForeColor = &HC0C0;&
Label4(1).ForeColor = &HC0C0;&
…
End Sub
Красный цвет «Задайте время» и «Идет отсчет» хорошо виден на синем фоне:
Фон полосы ПрогессБара также желательно заменить на цвет формы: Там же, но ниже:
…
Call SendMessage(ProgressBar1.hwnd, 8193, 0, ByVal &HFF0000;)
…
Таким же образом меняем цвета и на «Зеленый» и «Золотой». Это я оставляю выполнить тебе самостоятельно…
-
Шрифт. При выборе на команды меню Шрифт - AG_Cooper весь шрифт на форме меняется:
на
Private Sub mnufont2_Click()
Text1.Font = "AG_Cooper"
Label1.Font = "AG_Cooper"
Label2.Font = "AG_Cooper"
Label3.Font = "AG_Cooper"
Label5.Font = "AG_Cooper"
End Sub
Аналогично проделайте с другими типами шрифта самостоятельно…
и
Цвет ПрогрессБар’а можно выбрать любой, но так, чтобы он был хорошо виден на фоне формы.
Вот и все виражи…
До скорой встречи…
Скачать проект можно по ссылке: https://www.fayloobmennik.net/2341433
Запустить проект
2012 год, город Тараз, сш 18
учитель информатики Башмаков Ильдар Шарифович
E-mail: [email protected]
|