Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Включение и выключение таймера


Рекомендуемые сообщения

У меня такая проблема.

Надо что бы при бездействии (нет движения мышки, не нажимаются клавиши клавиатуры) запускался таймер, а при начале этих действий отключался независимо от того, свернута данная программа или в фокусе.

И еще, подскажите как иконку программы в трею поместить?

Всё на Delphi.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Решил свой вопрос с помощью HOOK.

function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;var msg: PEVENTMSG;begin if Code >= 0 then begin   result := 0;   msg := Pointer(LParam);   with Form1 do     case msg.message of       WM_MOUSEMOVE: if CheckBox1.Checked=true then        begin         Timer1.Enabled:=false;         Timer1.Interval:=0;         Timer1.Interval:=(ComboBox1.ItemIndex*60*1000);         Timer1.Enabled:=true;        end;        WM_LBUTTONDOWN: Timer1.Enabled:=false;       WM_LBUTTONUP: if CheckBox1.Checked=true then        begin         Timer1.Interval:=(ComboBox1.ItemIndex*60*1000);         Timer1.Enabled:=true;        end;       WM_RBUTTONDOWN: Timer1.Enabled:=false;       WM_RBUTTONUP: if CheckBox1.Checked=true then        begin         Timer1.Interval:=(ComboBox1.ItemIndex*60*1000);         Timer1.Enabled:=true;        end;       WM_KEYDOWN: Timer1.Enabled:=false;       WM_KEYUP: if CheckBox1.Checked=true then        begin         Timer1.Interval:=(ComboBox1.ItemIndex*60*1000);         Timer1.Enabled:=true;        end;     end; end else   result := CallNextHookEx(HookHandle, code, WParam, LParam);end;procedure TForm1.FormCreate(Sender: TObject);beginHookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0);end;procedure TForm1.FormDestroy(Sender: TObject);beginif HookHandle <> 0 then   UnhookWindowsHookEx(HookHandle);end;

:rolleyes: Но возникла другая проблема. При бездействии таймер постоянно перезапускается, пока из кода не убрать действия, связанные с движением мыши, после чего всё нормально работает.

Как исправить ошибку?

Ссылка на комментарий
Поделиться на другие сайты

У тебя в коде все верно.

Что значит "таймер постоянно перезапускается"? Таймер так и должен работать - выполнять один и тот же код каждые n-милисекунд. Что не так? Тебе нужно, чтобы при бездействии, таймер выполнился только один раз? Тогда вставь в начало OnTimer строчку:

Timer1.Enabled:=False;

и все.

Ссылка на комментарий
Поделиться на другие сайты

Да нет, просто если я установлю интервал таймера больше чем 10000, то срабатывания не происходит вообще, хотя мышь не движется.

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...