Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Странный такой таймер


Автор: Registr 29.12.2004, 18:48
Здраствуйте, я тут в Excel-е таймер наварганил smile :
Код


[code=vb]
Do While G = False
S = S + 1
If S = 60 Then
  S = 0
  M = M + 1
ElseIf M = 60 Then
  M = 0
  H = H + 1
ElseIf H = 24 Then
  H = 0
End If
Worksheets(1).LabelTime.Caption = CStr(TimeSerial(H, M, S))
DpEvents
Loop


Странный такой получился таймер - скорость пересчёта явно меняется со временем в несколько раз,
при чём на эту скорость влияет только закрытие и повторное открытие Excel. Никто не подскажет
из-за чего такое может быть? Кстати я как-то видел статью, что в VBA можно переносить (подключать)
компоненты из VB. Как это можно сделать конкретно? Вчасности интересует Timer.

Автор: ~FoX~ 30.12.2004, 11:45
А справочку почитать по слову Timer?
1. Ладно. Так как у тебя сделано - скорость будет меняться полюбому в зависимости от загрузки системы.
2. Подлючай скока угодно. Храняться они в *.OCX или *.dll

Автор: Registr 31.12.2004, 09:08
smile Так ведь не знаю я как подключать... Я в VBA не силён. А что по Timer, то насколько мне известно, она возращает кол-во секунд прошедших после полуночи. Или это про другой
Timer? Нельзя ли ответить конкретнее...

Автор: Guest 31.12.2004, 09:13
Мда, не всё сказал. С секундами проблем нет, мне надо таймер в милисекундах. С наступающим Новым Годом! smile

Автор: Akina 31.12.2004, 11:22
Цитата(Registr @ 31.12.2004, 10:08)
А что по Timer, то насколько мне известно, она возращает кол-во секунд прошедших после полуночи. Или это про другой
Timer? Нельзя ли ответить конкретнее...

В VBA есть функция Timer и есть метод формы Timer. Это две большие разницы. Подробнее - в хелпе.

Что до использования - юзаешь функцию типа такой:

Код

If StartTime=0 Then
  StartTime=Timer
Else
  Secunds = Fix(Timer-StartTime)
  S = Secunds MOD 60
  M = Secunds \ 60
  Min = Minuts MOD 60
  H = Minuts \ 60
  Worksheets(1).LabelTime.Caption = CStr(TimeSerial(H, M, S))
End If


StartTime - глобальная на уровне приложения переменная. Процедура вызывается событием Timer формы. Причем теперь дискретность ее вызова неважна в принципе - раз в секунду или раз в 10 секунд - пофиг.

Автор: Guest 31.12.2004, 15:59
Спасибо, Akina. Правда я нашёл ещё другой ответ: Tools > References > Browse > VB98 > VB6.OLB и Timer становится доступен как класс. smile

Автор: cardinal 31.12.2004, 16:58
Registr, я о Timer'e давным давно написал smile Достаточно в FAQ'e поковырятся. Читай тут:
http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&target=main_panel§ion=613

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)