powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Закрывается Access XP при использовании SetTimer
25 сообщений из 26, страница 1 из 2
Закрывается Access XP при использовании SetTimer
    #32530376
Март
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем.
Использую из одного топика работу с SetTimer, но при этом закрывается сам Аксесс XP.

Модуль modTimer.

Option Explicit
Option Private Module

Private Declare Function SetTimer Lib "user32" (ByVal lngHandle As Long, ByVal lngEvent As Long, ByVal lngElapse As Long, ByVal lngFuncion As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal lngHandle As Long, ByVal lngEvent As Long) As Long

Private Sub Progress()
Timer_test.lblMsg = CStr(CLng(Timer_test.lblMsg) + 1)
End Sub

Public Sub CloseTimer(ByVal lngHandle As Long)
KillTimer lngHandle, 0
End Sub

Public Sub StartTimer(ByVal lngHandle As Long, ByVal lngInterval As Long)
SetTimer lngHandle, 0, lngInterval, AddressOf Progress
End Sub

----------------
Вызываю из-под формы Timer_test нажатием кнопки

Private Sub Кнопка0_Click()
modTimer.StartTimer Me.Hwnd, 10
End Sub
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530400
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не глядя в текст -
Перая беда здесь
Option Private Module
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530424
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
не глядя в текст -
Перая беда здесь
Option Private Module


а в чём здесь беда?
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530471
Март
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To Victosha

Option Private Module
не имеет значения.
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530557
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ни при чем - значит ни при чем,
а имел ввиду, не глядя, следующее
Option Private Module, предназначенный для ОБЕСПЕЧЕНИЯ НЕПУБЛИЧНОСТИ содержащихся в нем (модуле) функций, не гарантирует, что AddressOf Вашей Progress будет доступен для внешнего мира. Возможно именно в этом я как раз ошибаюсь, но сам не стал бы объявлять модуль, в котором собраны CallBAck функции как Option Private.

Глядя в текст, и видя, что Progress объявлен как private, скорее соглашусь с Вами, Progress и без OPtion Private никто не увидит - так что Option Private - точно не причем.

Еще глядя в текст вижу, что вы пытаетесь переустановить уже существующий в форме таймер, идентификатор которого Вам известен, но Вы не рассказали, как он получен и почему у него ВСЕГДА значение 10?
Сие для меня тайна .

Больше пока, глядя в текст МЕЛЬКОМ, ничего сказать не могу.
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530566
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про 10 - пардон - смотрел криво
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530569
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрев еще раз мельком скажу примерно следующее - "убить таймер" с помощью этого кода, на мой взгляд не удастся
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530583
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
объявление Progress - неправильно, она/оно не будет работать вне зависимости от публичности - она следует неверному интерфейсу

д.б.

(Public) Sub Progress(ByVal hWnd As Long,

ByVal lngMsg As Long, ByVal lngID As Long, _

ByVal lngTime As Long).
....
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530589
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lngEvent в KillTimer - это то что возращает функция SetTimer, а не то что думаешь ты :)
т.е.

lng =SetTimer lngHandle, 0, lngInterval, AddressOf Progress
...
KillTimer( Me.Hwnd, lng )...
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530601
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня такая мысль возникла, может дело в том, что ты передаёшь в ф-ию SetTimes параметр lngEvent равным 0, может попробывать туда какое-нить другое значение передать?

только какое именно - это хз ;)
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530634
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел в MSDN, Senin Viktor прав:

SetTimer:

If the function succeeds and the hWnd parameter is NULL, the return value is an integer identifying the new timer. An application can pass this value to the KillTimer function to destroy the timer.

If the function succeeds and the hWnd parameter is not NULL, then the return value is a nonzero integer. An application can pass the value of the nIDEvent parameter to the KillTimer function to destroy the timer.

If the function fails to create a timer, the return value is zero. To get extended error information, call
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530641
Март
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>объявление Progress - неправильно, она/оно не будет работать вне зависимости >от публичности - она следует неверному интерфейсу

>д.б.

>(Public) Sub Progress(ByVal hWnd As Long,

>ByVal lngMsg As Long, ByVal lngID As Long, _

>ByVal lngTime As Long).

Сделал объявление так, но опять закрыватеся, а Description ошибки дает пустое.
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530642
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Kelme
lngEvent - это идентификатор таймера (в данном случае пытаюся породить новый таймер на окне формы)
Он вполне успешно может быть нулём при рождении нового, при условии, что с данным окном таймер еще не инициализирован. Идентификатор порожденного таймера возвращается как через lngEvent, так и через значение функции SetTimer.
В акцесс я бы НЕ СТАЛ пытаться инициализировать таймер на окне формы Акцесс. а вызвал SetTimer( 0,0...) Возвращенное значение НЕОБХОДИМО использовать для последующего Kill...
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530665
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, еще надо иметь ввиду следующее - попытки на успех отладки подобного кода в IDE = 0
Написал, сохранил, закрыл IDE - попробовал что получилось НЕ ВЫЗЫВАЯ ОТЛАДЧИК.
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530679
Март
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя может можно это сделать без API?
На самом деле мне нужно в форме запускать несколько процессов чтения файлов по разным таймерам, т.е. чтобы таймеры чтения можно было запускать и стопить отдельно друг от друга.
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530688
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
плохая задача для акцесс.
можешь управлять собственным таймером формы ( он по крайней мере надежный и вызывает крахов гарантированно) , породив несколько экземпляров этой формы. Подойдет-ли зависит от регламентов и "тяжести" их обработки.
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530690
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НЕ вызывает крахов

-)))
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530701
Март
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можешь накидать пример?
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530732
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
накидай, ЧТО тебе надо - разных файлов - это как ?

Вот ПЛОХОЙ пример, будет работать в акцесс старше 97

1) заводишь форму ПУСТУЮ с Именем timerForm. В ее свойствах ховоришь, что У НЕЕ ЕСТЬ МОДУЛЬ (он будет пустой)

2) заводишь класс IMyFileProcessor, в котором пишешь

Public Property Let SetTimerInterval(byval lValue as long)

End Property

property Get GetTimerInterval as Long

End Property

Public Sub ProcessFile
End Sub


3) Заводишь столько классов имплементаторов, сколько предполагаешь иметь алгоритмов обработки
В каждом из них пишешь

Implements IMyFileProcessor

дальше

Private WithEvents tForm As Form



Private Sub Class_Initialize()
Set tForm = New form_formTimer
tForm.OnTimer = "[Event Procedure]"
End Sub

Private Sub tForm_Timer()
'здесь будут обрабаываться события таймера
End Sub

После чего НЕ ЗАБЫВАЕШЬ имплементировать интерфейс.

---------------------
Пользуешь полученные классы по своему усмотрению на свой страх и риск.
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530743
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, в реализации не забыть

Private Sub Terminate()
Set tForm = Nothing
End Sub


Private Sub Class_Terminate()
Call Terminate
End Sub
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530886
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если файлов единицы не поленись сделать для каждого по форме со своим таймером запусти централизованно в стелс режиме юзера не увидят
Код: plaintext
1.
2.
3.
DoCmd.Openform "Forma_1",acNormal,,,,acHidden
...
DoCmd.Openform "Forma_N",acNormal,,,,acHidden
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530957
Март
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, я попробую варианту оба варианта и потом напишу что получилось.
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530976
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Март
второй - от Shuhard - умнее
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32530992
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо
Надо добавить вероятно любимую функцию саныча
Код: plaintext
1.
DoEvents
чтобы таймеры не передрались
...
Рейтинг: 0 / 0
Закрывается Access XP при использовании SetTimer
    #32531007
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если им не суждено передраться - и так не передереться, а если суждено - DoEvents не поможет.

Между прочим, не передеруться - если КАЖДУЮ открывать в отдельном экземпляре Application.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Закрывается Access XP при использовании SetTimer
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]