как автоматизировать закрытие приложения.mdb ...
pifa
Дата: 29.05.2004 14:40:13
Как автоматизировать закрытие приложения.mdb, с которым пользователь какое-то время не работает (не нажимает кнопки мыши и клавиатуры)?
Shuhard
Дата: 29.05.2004 15:27:27
делаешь отдельную пустую формочку в ней таймер взводящий флаг
если при повторном срабатывании таймер флаг взведен то DoCmd.Quit
формочку запускаешь из autoexec docmd.openform ...,acHidden
на все что ты считаешь активность вешаешь обработчик сбрасывающий флаг
минус схемы за несохраненные пользователем данные ответит PIFA
поэтому схема усложняется выдачей предупредительной формы(модальной и всплывающей) не MsgBox(он глушит таймер) со свистками и цветомузыкой для побудки пользователя
главный гемор - вызов в массе точек подпрограммки сброса флага
pifa
Дата: 30.05.2004 12:54:28
спасибо. если по ходу пьесы, пока буду мучить этот гемор, возникнет более лаконичный вариант, подскажи - буду признателен.
pifa
Дата: 30.05.2004 15:02:37
ещё раз спасибо. дотумкал, сделал как велел Shuhard, обратился к классикам, процедура обработки события "Таймер" формы получилась такая:
Private Sub Form_Timer()
' источник идеи: "ACCESS 7.0 СОТНИ ПОЛЕЗНЫХ РЕЦЕПТОВ" М.Хоффбауер и К.Шпильман,
' BHV Киев 1996 - с.316
Static LastFormName As Variant 'имя последней активной формы
Static LastControlName As Variant 'имя последнего активного элемента управления
Static IdleTime As Long 'счётчик времени в секундах
Dim ActivFormName As Variant 'имя активной формы
Dim ActivControlName As Variant 'имя активного элемента управления
Const TimeLimit = 300 'время (секунды), по истечении которого
'приложение должно автоматически закрыться
On Error Resume Next
ActivFormName = Screen.ActiveForm.Name 'узнаём имя активной формы
ActivControlName = Screen.ActiveControl.Name 'узнаём имя
'активного элемента управления
On Error GoTo 0
If LastFormName <> ActivFormName Then 'если после предыдущего
'исполнения процедуры активной стала другая форма, то:
LastFormName = ActivFormName 'изменяем имя последней активной формы и
IdleTime = 0 'обнуляем счётчик времени
End If
If LastControlName <> ActivControlName Then 'так же проверяем,
'произошла ли смена активного элемента управления
LastControlName = ActivControlName
IdleTime = 0
End If
IdleTime = IdleTime + CLng(Me.TimerInterval / 1000) 'увеличиваем значение счётчика
'на один интервал таймера формы, приведённый к секундам
If IdleTime > TimeLimit Then 'если лимит исчерпан
IdleTime = 0
Application.Quit 'закрываем приложение
End If
End Sub
Shuhard
Дата: 30.05.2004 15:19:04
1 Моя любимая книжка
2 что будет при вводе пользователем данных в длинное MEMO поле сидит и кропотливо бьет(с бумажного носителя)
использует 2 контрола последовательно т.е. успевает за время таймера сделать активным и вернуться назад
юзает ActiveX в рамках которого производит обмен информацией