Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Закрывается Access XP при использовании SetTimer / 25 сообщений из 26, страница 1 из 2
24.05.2004, 12:03
    #32530376
Март
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Закрывается Access XP при использовании SetTimer
Привет всем.
Использую из одного топика работу с 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
24.05.2004, 12:11
    #32530400
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Закрывается Access XP при использовании SetTimer
не глядя в текст -
Перая беда здесь
Option Private Module
...
Рейтинг: 0 / 0
24.05.2004, 12:17
    #32530424
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Закрывается Access XP при использовании SetTimer
автор
не глядя в текст -
Перая беда здесь
Option Private Module


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

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

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

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

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

д.б.

(Public) Sub Progress(ByVal hWnd As Long,

ByVal lngMsg As Long, ByVal lngID As Long, _

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

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

только какое именно - это хз ;)
...
Рейтинг: 0 / 0
24.05.2004, 13:42
    #32530634
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Закрывается Access XP при использовании SetTimer
Посмотрел в 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
24.05.2004, 13:47
    #32530641
Март
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Закрывается Access XP при использовании SetTimer
>объявление Progress - неправильно, она/оно не будет работать вне зависимости >от публичности - она следует неверному интерфейсу

>д.б.

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

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

>ByVal lngTime As Long).

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

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

Вот ПЛОХОЙ пример, будет работать в акцесс старше 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
24.05.2004, 14:28
    #32530743
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Закрывается Access XP при использовании SetTimer
да, в реализации не забыть

Private Sub Terminate()
Set tForm = Nothing
End Sub


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

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


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