|
|
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
Привет всем. Использую из одного топика работу с 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 12:03 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
не глядя в текст - Перая беда здесь Option Private Module ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 12:11 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
автор не глядя в текст - Перая беда здесь Option Private Module а в чём здесь беда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 12:17 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
To Victosha Option Private Module не имеет значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 12:37 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
ни при чем - значит ни при чем, а имел ввиду, не глядя, следующее Option Private Module, предназначенный для ОБЕСПЕЧЕНИЯ НЕПУБЛИЧНОСТИ содержащихся в нем (модуле) функций, не гарантирует, что AddressOf Вашей Progress будет доступен для внешнего мира. Возможно именно в этом я как раз ошибаюсь, но сам не стал бы объявлять модуль, в котором собраны CallBAck функции как Option Private. Глядя в текст, и видя, что Progress объявлен как private, скорее соглашусь с Вами, Progress и без OPtion Private никто не увидит - так что Option Private - точно не причем. Еще глядя в текст вижу, что вы пытаетесь переустановить уже существующий в форме таймер, идентификатор которого Вам известен, но Вы не рассказали, как он получен и почему у него ВСЕГДА значение 10? Сие для меня тайна . Больше пока, глядя в текст МЕЛЬКОМ, ничего сказать не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 13:14 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
про 10 - пардон - смотрел криво ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 13:17 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
посмотрев еще раз мельком скажу примерно следующее - "убить таймер" с помощью этого кода, на мой взгляд не удастся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 13:19 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
объявление Progress - неправильно, она/оно не будет работать вне зависимости от публичности - она следует неверному интерфейсу д.б. (Public) Sub Progress(ByVal hWnd As Long, ByVal lngMsg As Long, ByVal lngID As Long, _ ByVal lngTime As Long). .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 13:25 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
lngEvent в KillTimer - это то что возращает функция SetTimer, а не то что думаешь ты :) т.е. lng =SetTimer lngHandle, 0, lngInterval, AddressOf Progress ... KillTimer( Me.Hwnd, lng )... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 13:29 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
у меня такая мысль возникла, может дело в том, что ты передаёшь в ф-ию SetTimes параметр lngEvent равным 0, может попробывать туда какое-нить другое значение передать? только какое именно - это хз ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 13:33 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
Посмотрел в 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 13:42 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
>объявление Progress - неправильно, она/оно не будет работать вне зависимости >от публичности - она следует неверному интерфейсу >д.б. >(Public) Sub Progress(ByVal hWnd As Long, >ByVal lngMsg As Long, ByVal lngID As Long, _ >ByVal lngTime As Long). Сделал объявление так, но опять закрыватеся, а Description ошибки дает пустое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 13:47 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
2 Kelme lngEvent - это идентификатор таймера (в данном случае пытаюся породить новый таймер на окне формы) Он вполне успешно может быть нулём при рождении нового, при условии, что с данным окном таймер еще не инициализирован. Идентификатор порожденного таймера возвращается как через lngEvent, так и через значение функции SetTimer. В акцесс я бы НЕ СТАЛ пытаться инициализировать таймер на окне формы Акцесс. а вызвал SetTimer( 0,0...) Возвращенное значение НЕОБХОДИМО использовать для последующего Kill... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 13:47 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
Да, еще надо иметь ввиду следующее - попытки на успех отладки подобного кода в IDE = 0 Написал, сохранил, закрыл IDE - попробовал что получилось НЕ ВЫЗЫВАЯ ОТЛАДЧИК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 13:53 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
Хотя может можно это сделать без API? На самом деле мне нужно в форме запускать несколько процессов чтения файлов по разным таймерам, т.е. чтобы таймеры чтения можно было запускать и стопить отдельно друг от друга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 13:57 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
плохая задача для акцесс. можешь управлять собственным таймером формы ( он по крайней мере надежный и вызывает крахов гарантированно) , породив несколько экземпляров этой формы. Подойдет-ли зависит от регламентов и "тяжести" их обработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 14:05 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
НЕ вызывает крахов -))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 14:06 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
А можешь накидать пример? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 14:13 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
накидай, ЧТО тебе надо - разных файлов - это как ? Вот ПЛОХОЙ пример, будет работать в акцесс старше 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 После чего НЕ ЗАБЫВАЕШЬ имплементировать интерфейс. --------------------- Пользуешь полученные классы по своему усмотрению на свой страх и риск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 14:26 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
да, в реализации не забыть Private Sub Terminate() Set tForm = Nothing End Sub Private Sub Class_Terminate() Call Terminate End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 14:28 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
если файлов единицы не поленись сделать для каждого по форме со своим таймером запусти централизованно в стелс режиме юзера не увидят Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 15:19 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
Спасибо, я попробую варианту оба варианта и потом напишу что получилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 15:52 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
2 Март второй - от Shuhard - умнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 15:59 |
|
||
|
Закрывается Access XP при использовании SetTimer
|
|||
|---|---|---|---|
|
#18+
Спасибо Надо добавить вероятно любимую функцию саныча Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 16:04 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1625&tid=1674404]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 250ms |
| total: | 425ms |

| 0 / 0 |
