Jump to content
СофтФорум - всё о компьютерах и не только

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


Recommended Posts

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

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

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

Всё на Delphi.

Link to comment
Share on other sites

  • 2 weeks later...

Решил свой вопрос с помощью 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: Но возникла другая проблема. При бездействии таймер постоянно перезапускается, пока из кода не убрать действия, связанные с движением мыши, после чего всё нормально работает.

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

Link to comment
Share on other sites

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

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

Timer1.Enabled:=False;

и все.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...