Например, во время работы программы работает таймер времени, который показывает, сколько времени осталось до завершения работы программы, но если пользователь нажимает и удерживает кнопку “закрыть”, при этом не выходя из программы (имеется в виду кнопка в правом верхнем углу формы), то таймер замораживается. Соответственно при возвращении в программу время уже неверное. Как можно избежать этого? Чтоб таймер продолжал работать во время удерживания кнопки “закрыть”.
Ну наверное через APi, поищи по форуму тут это уже обсуждалось гдето. есть 2 вариант ) , вычисляй время по системному времени, эти часы не так сильно тормозят ) Или попробуй создать еще 1 форму невидимую, и размести таймер на ней, и запускай все это с модуля Main(). Мдя... а вообще через АПИ делай дето тут было, ищи
Спасибо за ответы, но мне нужен таймер независимый от часов Windows.
Ввариант с другой формой и модулем работает только c использованием win-времени, но это понятно почему, а мне нужен таймер типа 15:00, где через 15 минут программа завершает работу, а если пользователь будет удерживать кнопку "закрыть" или кнопки свернуть/развернуть окно, то он может продлить себе время прибывания в программе, т.к вся программа замораживается. Ваши варианты пробовала, но они не работают!
Нет, использование API не помогает. Можете сами убедиться, вот пример:
Код модуля:
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() frmMain.lblMsg = CLng(frmMain.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
Код формы:
Option Explicit Private Sub cmdRun_Click() modTimer.StartTimer hWnd, 1 End Sub Private Sub Form_Unload(Cancel As Integer) modTimer.CloseTimer hWnd End Sub
При нажатии и удерживании кнопки [X], приложение съедает всё свободное
процессорное время и, видимо, приложение не обрабатывает приходящие
твоему окну сообщения таймера. Как это порешить, не используя
системное время, я не знаю..
Как вариант, время отсчитывать в отдельном потоке, записывать в
какую-нть переменную, а эта форма пусть по таймеру читает по таймеру
данные из этой переменной.
Только вот многопоточность в VB6 не рулит