Timer: У меня глюк или у него?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Timer: У меня глюк или у него?

Сообщение LexBondAgent007 » 12.09.2005 (Пн) 9:51

Приветствую всех!
Вобщем такая проблема: на форме есть таймер. После того как я отгружаю форму (Unload Form1) - таймер почемуто продолжает свою работу... Раньше это особо не влияло на мои проекты... но вот щас таймер ведет проверку значений и если значения совпадают - то он выдает сообщение... И форму на которой таймер я отгрузил - а вот сообщения продолжают выдаваться... в общем таймер на отгруженной форме работает - вопрос: ПОЧЕМУ? И КАК МОЖНО ЭТО ИСПРАВИТЬ?

з.ы. - Причем даже если я ставил timer1.enabled = false - все равно как только форма ОТГРУЖЕНА - таймер продолжает все!!
Это не читайте! Это спам! :D

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

Сообщение Viper » 12.09.2005 (Пн) 11:00

а можно узреть код?
Весь мир матрица, а мы в нем потоки байтов!

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 12.09.2005 (Пн) 11:06

А как же =P
seconds - текстбокс
minutes - тоже
debugger - это форма
Остальные лэйбелы и переменные работают ОК
Вобщем проблема (наверное) там где UNLOAD AFTERROUND1 (это форма)
Код: Выделить всё
Private Sub Timer2_Timer()
seconds = seconds - 1
If seconds > -1 And seconds < 10 Then seconds = "0" + seconds.Text
If seconds < 0 Then
minutes = minutes - 1
seconds = 59
End If
If minutes < 0 Then
minutes = 8
Label11.Visible = False
huh = Round(bonusdollars)
a = MsgBox("Congratulations! You win bonus " & huh & "$!!!", 48, "Bonus")
Debugger.score = Debugger.score + huh
Label1.Caption = "Status: " & Debugger.score & "$"

If Val(Debugger.score) > Val(Debugger.enemyscore) Then
Line1.Visible = True
Line2.Visible = True
a = MsgBox("WOOHOOO! YOU COLLECTED " & Debugger.score & "$ against Dog Naebshik's " & Debugger.enemyscore & "$!! You won Rang#2 and Easy Zone COMPLETED!", 64, "Congratulations!")

Else
Debugger.MediaPlayer1.FileName = App.Path & "\data\stream\gameover.mp3"
Debugger.MediaPlayer1.Play
a = MsgBox("Awww NOO! You have only " & Debugger.score & "$! Dog Naebshik have more than you...", 16, "Too Bad...")
a = MsgBox("Dog Naebshik says: MOOAUAHUAHUAHUAHAUHAUHAUAAAAHAAA!!!! Looser!", 48, "Game Over")
Debugger.MediaPlayer1.FileName = App.Path & "\data\stream\sometimes.mp3"
Debugger.MediaPlayer1.Play
bmainmenu.Visible = True
Unload afterround1
End If
Timer2.Enabled = False

End If
Label11.Caption = "Time left: " & minutes & ":" & seconds
bonusdollars = bonusdollars + 0.01
Label4.Caption = "Bonus: " & bonusdollars & "$"
End Sub
Это не читайте! Это спам! :D

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 12.09.2005 (Пн) 13:30

IMHO в коде все впорядке!!! Все 3 раза перепроверял! НО ВОТ ТАЙМЕР ПОСЛЕ ОТГРУЗКИ ФОРМЫ РАБОТАЕТ ВСЕ РАВНО! =(
:cry: Мож Unload(form1) недостаточно? Какие еще бывают варианты убийство формы?
Это не читайте! Это спам! :D

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 12.09.2005 (Пн) 13:47

Код: Выделить всё
Sub Form_Unload(Cancel As Integer)
Timer2.Enabled=False
end sub

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 12.09.2005 (Пн) 13:53

Konst_One писал(а):
Код: Выделить всё
Sub Form_Unload(Cancel As Integer)
Timer2.Enabled=False
end sub


не помогло... :cry: все равно этот таймер продолжает...
Это не читайте! Это спам! :D

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 12.09.2005 (Пн) 15:11

Народ! Неужели никто не знает? Нехочу я свой проэкт уничтожать из-за какого то таймера... :cry:
Это не читайте! Это спам! :D

_Brodyaga
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 104
Зарегистрирован: 11.09.2005 (Вс) 11:14
Откуда: Казахстан 70х83

Сообщение _Brodyaga » 12.09.2005 (Пн) 16:42

А что несколько форм что ли?И почему Таймер условии:А нутка вынеси его оттуда:)
Счастливых программистов очень мало на свете...

_Brodyaga
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 104
Зарегистрирован: 11.09.2005 (Вс) 11:14
Откуда: Казахстан 70х83

Сообщение _Brodyaga » 12.09.2005 (Пн) 16:47

Всмысле Почему таймер находится в условии, может он просто не выходит из условия?То есть форма за анлоадилась, а значения остаются на месте, и потому все условия выполняются?
Счастливых программистов очень мало на свете...

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 12.09.2005 (Пн) 19:51

Что-то его опять включает?

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 12.09.2005 (Пн) 20:03

_Brodyaga писал(а):Всмысле Почему таймер находится в условии, может он просто не выходит из условия?То есть форма за анлоадилась, а значения остаются на месте, и потому все условия выполняются?


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

Amed писал(а):Что-то его опять включает?

Его включает таймер, который находится на тойже форме что и второй таймер... Первый таймер проверяет значения - как только условия совпадут - тогда он дестабилизируется и запускает таймер2...
Но проблема исключена - если бы его ктото снова включал - тогда бы он продолжал бы работать в таком же духе - если условия не сошлись то таймер не отгружает форму - но останавливается... А если условия сошлись то форма отгружается... и таймер продолжает работу! :cry:
Это не читайте! Это спам! :D

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 12.09.2005 (Пн) 20:05

Отключать сначала
таймер, который находится на тойже форме что и второй таймер
.

Сами по себе таймеры не включаются :)

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 12.09.2005 (Пн) 20:09

Так я их оба отключил.... Но как только форма АНЛОАД - он вновь запускается сам! И ЕГО НЕ ЧТО НЕ ЗАПУСКАЕТ! 100% Полистайте код выше... мож там я че напортачил... хотя как я уже и непробовал.... :?
Это не читайте! Это спам! :D

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 12.09.2005 (Пн) 20:45

Ну попробуй через SetTimer и KillTimer :roll:
Может надежней будет =)
Если всё делать своими ручками, они скоро отвалятся !

_Brodyaga
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 104
Зарегистрирован: 11.09.2005 (Вс) 11:14
Откуда: Казахстан 70х83

Сообщение _Brodyaga » 12.09.2005 (Пн) 21:11

или вообще Поставь пи анлоаде магическую команду:
End
и живи спокойно:))
Счастливых программистов очень мало на свете...

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

Сообщение MeMBus » 13.09.2005 (Вт) 4:07

afterround1 - это та форма в которой стоит таймер Timer2? Если да, то у тебя таймер остается в работе, т.к. происходит выгрузка данной формы...
Код: Выделить всё
Unload afterround1
End If
Timer2.Enabled = False

на
Код: Выделить всё
Timer2.Enabled = False
Unload afterround1
End If

Если нет, то код нужен, по возможности, полнее...
Бороться и искать, найти и перепрятать!

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 13.09.2005 (Вт) 8:08

_Brodyaga, ха-ха

MeMBus, Да я уже куда тока не пихал этот timer.enabled=false...
и перед, и после и вообще через каждую строчку :lol:

Kovu, что за SetTimer и KillTimer??? Первый раз слышу...
Это не читайте! Это спам! :D

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 13.09.2005 (Вт) 10:11

Declare Function SetTimer Lib "user32" Alias "SetTimer" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Устанавливает таймер
Пример использования:
SetTimer Form1.Hwnd,222,100,addressof TimerProc,
где 100-интервал таймера , TimerProc -процедура в модуле куда перенеси всё что у тебя есть в событии Timer1_Timer
Public Function TimerProc(Byval hwnd as long, byval uMsg as Long, Byval idEvent, dwSystemTime as long)
твой код
End Function
Declare Function KillTimer Lib "user32" Alias "KillTimer" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Соответственно убивает заданный таймер(KillTimer Form1.Hwnd,222)
Если всё делать своими ручками, они скоро отвалятся !

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 13.09.2005 (Вт) 10:47

Хозяйке на заметку: если вы не помните, сколько таймеров у вас на форме и когда они выключаются (если выключаются вообще), то гарантированно застопить все таймеры при выгрузке формы можно с помощью примерно следующего кода:
Код: Выделить всё
Private Sub Form_Unload(Cancel as Integer)
Dim V as Control
for each v in me.controls
  if typeof v is timer then v.enabled = false
next v
doevents
...

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 13.09.2005 (Вт) 11:06

Ничего не помогает!!!! Ни SetTimer (с которым я ели разобрался), ни for Each... Что то меня терзают смутные сомнения что форма вообще не выгружается... :? Или она "ПЕРЕЗАПУСКАЕТСЯ" - то есть она выгружается и тутже запускается вновь с первоначальными значениями... =\\
Это не читайте! Это спам! :D

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

Сообщение Viper » 13.09.2005 (Вт) 11:21

Поставь брейкпойнты в процедуру Form_Load и смотри когда и как она загружается. Стек вызовов посмотри.

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

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 13.09.2005 (Вт) 12:08

Слущай а тебе нужно именно эту форму выгрузить или завершить приложение :?: :?
Если всё делать своими ручками, они скоро отвалятся !

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 13.09.2005 (Вт) 13:55

!Viper!
Проверил - все впоряде - форма оказывается и выгружается и загружается... НО ТАЙМЕР ВСЕ ЕЩЕ ТУПИТ! А код я 1000 раз уже проверял - точно что не в коде проблема... IMHO

Kovu
Ясное дело нужно выгрузить форму... (End тут не поможет)

Мдя... вот вам и проблемка... второй день решить не можем...
Это не читайте! Это спам! :D

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 13.09.2005 (Вт) 18:32

LexBondAgent007
Возможно в какой-то процедуре формы сидит незавершенный цикл, пока процедура не закончена - форма не выгрузится, хотя и пропадет с экрана. Проверь, в остальных процедурах формы точно нет никаких циклов ожидания, или операторов\вызовов, которые могут ждать завершения?

ARTES
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 17.08.2005 (Ср) 14:00
Откуда: Belarus

Сообщение ARTES » 13.09.2005 (Вт) 19:25

Sub Form_Unload(Cancel As Integer)
Cancel=True
Timer2.Enabled=False
Cancel=False
end sub

Кстати,проверь имя таймера

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 13.09.2005 (Вт) 19:49

Mikle Нет таких -( Все завершено когда форма соберается быть АНЛОАД :cry:

ARTES
Бесполезно... я даже пробовать небуду :cry:

А вобще такая дребедень может быть из за того что таймер работает со значениями не только на форме на которой сидит - просто когда форма с этим таймером выгружается - другая форма с которой работает таймер - ОСТАЕТСЯ?
Это не читайте! Это спам! :D

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 13.09.2005 (Вт) 22:26

Телепаты не могут больше применять свои магические способности :twisted:
Проект в студию :)
Если всё делать своими ручками, они скоро отвалятся !

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 13.09.2005 (Вт) 22:45

http://lehas-entertainment.narod.ru/timgGGS.zip

Вырезал все что можно до минимума - вот ошибочка то осталась, небеспокойтесь :lol:

И кто нить меня может научить как на форум выкладывать файлы? :roll: (Ну не тут конечно - а то и так проблем хватает в этой теме -\)
Это не читайте! Это спам! :D

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 13.09.2005 (Вт) 22:51

Почитал... да, правильно Сишники смеются над ВБистами))))
Как МС могла допустить фишки создания форм "от балды", тоесть совсем не объекным способом.

dim f as form1
f=new form1

unload f
f=nothing

и небудет никогда твоего таймера.

ЗЫ: правда не факт что у тя там циклических ссылок нет(((


Забудте про FORM1.method_name !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! J,
Объекты нужно создавать ЯВНО!!!!
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 13.09.2005 (Вт) 23:55

Sebas, а вот самое забавное что даже твой способ не сработал =) смотрю и веселюсь, поведение программы не поддается никаким разумным объяснениям :D
ХЎ

След.

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

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

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

    TopList