Версия для печати темы

Нажмите сюда для просмотра этой темы в оригинальном формате

WinCity.Ru _ Другие приложения для офиса _ Timer в VBA

Автор: Witaliy Пятница, 25 Июля 2003, 14:58

Можно ли каким нибудь образов вставить в офисовский бэсик таймер из обычного 6го визуал бэйсика? Заранее спасибо.

Автор: yozh Пятница, 25 Июля 2003, 15:55

http://www.experts-exchange.com/Developer/Applications/MS_Office/Q_20507308.html
http://www.progsoc.uts.edu.au/lists/progsoc/2001/July/msg00107.html
http://home.t-online.de/home/520096780133-0001/lang_en/freeware.html

Автор: Witaliy Воскресенье, 27 Июля 2003, 15:06

yozh
почитал я твои ссылки, создал ocx фаил, но как применить таймер я так и не понял (вернее не смог перевести всё до конца). Не могбы ты рассказать мне по подробней, как это делается или дать ссылку на рускоязычный ресурс?

Автор: yozh Воскресенье, 27 Июля 2003, 16:17

НЕ знаю, сам не делал.
Русскоязычных ресурсов не нашёл.

Автор: Witaliy Воскресенье, 27 Июля 2003, 17:15

Я тут покопался и нашёл такой код:

Public Declare Function SetTimer Lib "user32" ( _
ByVal HWnd As Long, ByVal nIDEvent As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" ( _
ByVal HWnd As Long, ByVal nIDEvent As Long) As Long

Public TimerID As Long
Public TimerSeconds As Single

Sub StartTimer()
TimerSeconds = 1 ' how often to "pop" the timer.
TimerID = SetTimer(0&, 0&, TimerSeconds * 1000&, AddressOf TimerProc)
End Sub

Sub EndTimer()
On Error Resume Next
KillTimer 0&, TimerID
End Sub

Sub TimerProc(ByVal HWnd As Long, ByVal uMsg As Long, _
ByVal nIDEvent As Long, ByVal dwTimer As Long)
'
' The procedure is called by Windows. Put your
' timer-related code here.
'
End Sub



но процедура EndTimer почемуто не работает, никаих ошибок, ничего, просто никак не реагирует, может кто знает в чём дело?

Автор: yozh Воскресенье, 27 Июля 2003, 17:26

Не понял. Процедура TimerProc вызывается или нет? Именно ей при каждом срабатывании таймера должна передавать управление Windows (SetTimer - обычная APIшная функция, именно её я чаще всего и использую в Delphi, хотя там есть и свои компоненты). Что касается EndTimer, то из приведённого тобой кода мне лично неясно, кто и где должен эту процедуру вызывать.
SetTimer запускает таймер. С этого момента каждые TimerSeconds секунд он будет срабатывать (вызывать функцию, адрес которой ты ей передал в четвёртом параметре), пока ты его не заткнёшь путём вызова KillTimer.
Оно у тебя вообще срабатывает? Если нет, то ты проверял значение TimerID сразу после вызова SetTimer? Там не ноль случайно?

Автор: Witaliy Воскресенье, 27 Июля 2003, 17:56

Всё спасибо, я понял в чём была моя ошибка.Теперь всё работает.
Тему можно считать закрытой.

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