как автоматизировать закрытие приложения.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 в рамках которого производит обмен информацией