Как остановить таймер?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Как остановить таймер?

Сообщение Pantalone » 19.05.2006 (Пт) 0:22

В прилагаемом простейшем примере не могу остановить таймер.
Хотелось бы узнать объяснение этому явлению.
Вложения
TimerBug.rar
(1.12 Кб) Скачиваний: 166

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 19.05.2006 (Пт) 0:28

Получается если таймер сам изменит свой интервал то уже никто не сможет его изменить.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 19.05.2006 (Пт) 1:13

Он и работает всего час... VB меня все больше удивляет, такая кривота... :shock:

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 19.05.2006 (Пт) 1:15

Даже не час, МИНУТУ! Изображение

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 19.05.2006 (Пт) 3:34

Если правильно понял вопрос...

Код: Выделить всё
Private Sub cmdRun_Click()
    Timer1.Enabled = false
End Sub

Private Sub cmdStop_Click()
    Timer1.Interval = 1
    Timer1.Enabled = True
End Sub

Private sub cmdReTime_Click()
    timer1.enabled = false
    timer1.interval = 250
    timer1.enabled = true
end sub
Бороться и искать, найти и перепрятать!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.05.2006 (Пт) 7:31

Pantalone, строгое замечание за топик-ап. Используй редактирование сообщения.
Lasciate ogni speranza, voi ch'entrate.

Oxygen
Белая и пушистая
Белая и пушистая
Аватара пользователя
 
Сообщения: 1314
Зарегистрирован: 15.07.2003 (Вт) 7:14
Откуда: Москва

Сообщение Oxygen » 19.05.2006 (Пт) 7:48

2MeMBus, 2Pantalone.
Народ, вы откуда все упали? Не одно из предложенных работать не будет.... Вот код. Таймер срабатывает через каждую секунду.

Код: Выделить всё

Private Sub CmdStop_Click()
Timer1.Enabled = False 'Выключаем таймер
Timer1.Interval = 0 'Обнуляем таймер
End Sub

Private Sub CmdStart_Click()
Timer1.Interval = 1000 'Устанавливаем интервал в одну секунду
Timer1.Enabled = True 'Включаем таймер
End Sub

Private Sub Timer1_Timer()
Debug.Print Time
End Sub
Процедура клонирования завершена.
Коррекция имплантированного сознания соответствует принятым алгоритмам.
Уникальный идентификатор скопирован в чип временного паспорта.
Активация прав гражданина ожидается в течение 24 часов

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 19.05.2006 (Пт) 7:52

Гм... Oxygen, кажись речь шла о том, что интервал таймера не меняется, пока его не приостановить. (если я, конечно, верно понял вопрос)
А я все практикую лечение травами...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 19.05.2006 (Пт) 8:05

Я вообще не могу понять в чем трабла. Вот код, в нем таймер сам себе меняет интервал, кнопками можно приостановить/запустить таймер. Pantalone, что у тебя не работает?
Код: Выделить всё
Dim i As Integer

Private Sub cmdStart_Click()
If tmr.Interval < 50 Then tmr.Interval = 1000
tmr.Enabled = True
End Sub

Private Sub cmdStop_Click()
tmr.Enabled = False
End Sub

Private Sub Form_Load()
i = 1000
End Sub

Private Sub tmr_Timer()
Debug.Print i
i = i - 1
tmr.Interval = tmr.Interval - 20
If tmr.Interval < 50 Then
    tmr.Enabled = False
    MsgBox "Timer stopped"
End If
End Sub
А я все практикую лечение травами...

Oxygen
Белая и пушистая
Белая и пушистая
Аватара пользователя
 
Сообщения: 1314
Зарегистрирован: 15.07.2003 (Вт) 7:14
Откуда: Москва

Сообщение Oxygen » 19.05.2006 (Пт) 8:35

2Twister. А разница? Пусть вставляет в таймер все, что угодно (в пределах разумного, разумеется), все-равно будет работать.....
Процедура клонирования завершена.
Коррекция имплантированного сознания соответствует принятым алгоритмам.
Уникальный идентификатор скопирован в чип временного паспорта.
Активация прав гражданина ожидается в течение 24 часов

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 19.05.2006 (Пт) 8:38

А разница?
Да вот именно, что разницы нет, за исключеним того, что я не обнуляю интервал таймера перед его остановкой.
все-равно будет работать.....
Во-во! Я и не могу понять, в чем проблема...
А я все практикую лечение травами...

Oxygen
Белая и пушистая
Белая и пушистая
Аватара пользователя
 
Сообщения: 1314
Зарегистрирован: 15.07.2003 (Вт) 7:14
Откуда: Москва

Сообщение Oxygen » 19.05.2006 (Пт) 8:58

А по поводу того, почему таймер так себя ведет. Могу предположить. Только предположить, потому как исходников этого компонента мне видеть не приходилось, что вероятно, когда он срабатывает, он реинициализирует себя, т.е. :
1. Выключает себя.
2. Выполняет код, который находится в процедуре
3. Устанавливает тот же интервал, что и был, разумеется, если в теле процедуры он не был изменен,
4. Заново включает себя.

В доказательство могу привести следующий код:

Код: Выделить всё
Private Sub Command1_Click()
Timer1.Enabled = False
Timer1.Interval = 0
End Sub

Private Sub Command2_Click()
Timer1.Interval = 1000
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
For i = 1 To 50000000
Next
Debug.Print Time
End Sub


Если это запустить, то мы увидим, что срабатывает он явно не через 1 секунду. Если бы таймер вел себя по-другому, то с большой вероятностью, данный код бы просто вызывал ошибки.
Процедура клонирования завершена.
Коррекция имплантированного сознания соответствует принятым алгоритмам.
Уникальный идентификатор скопирован в чип временного паспорта.
Активация прав гражданина ожидается в течение 24 часов

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 19.05.2006 (Пт) 9:02

срабатывает он явно не через 1 секунду
Да нет, сработает он через секунду, просто цикл задержит вывод информации. К слову говоря, таймер в VB не сработает второй раз, пока его процедура выполнится не выполниться до конца. Это мы с ANDLL уже обсуждали...
А я все практикую лечение травами...

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Re: Как остановить таймер?

Сообщение MeMBus » 19.05.2006 (Пт) 11:48

Oxygen, Twister
про то же и писалось...
Бороться и искать, найти и перепрятать!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 19.05.2006 (Пт) 11:52

Небольшой оффтоп: автору дали замечание до какого-то там числа. Это означает мини-бан?
А я все практикую лечение травами...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 19.05.2006 (Пт) 11:57

Twister писал(а):Небольшой оффтоп: автору дали замечание до какого-то там числа. Это означает мини-бан?

сие означает, что если автор проявит себя хорошо, то после такого-то числа будет чист перед законом, а если нет, то число плюсов будет расти дальше
Весь мир матрица, а мы в нем потоки байтов!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 19.05.2006 (Пт) 12:02

А я предположил что его временно забанили, так как он что-то забыл про свой топик...
А я все практикую лечение травами...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList