![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() драсте мне нужно выполнить определеную операцию после определеного времени простоя
я это реализовал вот так Код:
const tp = 3; {время простоя} var tda : DWord; liInfo: TLastInputInfo; function Ida : DWord; var a : integer; begin a := (tda - liInfo.dwTime) DIV 60000; Result := a; end; procedure Form.Timer1Timer(Sender: TObject); var t : DWord; begin tda := GetTickCount; liInfo.cbSize := SizeOf(TLastInputInfo); GetLastInputInfo(liInfo); t := Ida; if t = tp then {действие при простое} end после того как приходит время действия при простое действие запускаеться каждый раз при входе в таймер а мне нужно шоб после действия таймер простоя начал отщет заново Последний раз редактировалось lmikle, 03.02.2016 в 19:01. |
#2
|
||||
|
||||
![]() Это делается несколько иначе. Надо работать с событием procedure ApplicationOnIdle(Sender: TObject; var Done: Boolean);
Попробую скинуть попозже рабочий примерчик. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 03.02.2016 в 11:19. |
#3
|
||||
|
||||
![]() пример выполняет действие через 5 сек. после бездействия и повторяет выполнять действие каждые 5 сек. если бездействие продолжается:
Код:
unit Unit1; interface uses Math, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, AppEvnts, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; ApplicationEvents1: TApplicationEvents; (* OnIdle *) procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean); private { Private declarations } public { Public declarations } end; var Form1: TForm1; TickCount: DWORD = 0; implementation {$R *.dfm} procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean); var LastInputInfo: TLastInputInfo; begin LastInputInfo.cbSize:=SizeOf(TLastInputInfo); GetLastInputInfo(LastInputInfo); if LastInputInfo.dwTime<>TickCount then TickCount:=Max(TickCount, LastInputInfo.dwTime); if GetTickCount-TickCount>5000 then begin TickCount:=GetTickCount; (* to do *) Memo1.Lines.Add('*'); end; end; end. Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
SKIPtr (03.02.2016)
|
#4
|
||||
|
||||
![]() Цитата:
http://www.delphisources.ru/pages/so...e-monitor.html |
#5
|
|||
|
|||
![]() Цитата:
если меня б меня устраивал тот вариант я бы не искал доругова вот NumLock посоветовал по существу я уже думал о том шо тут нужен промежуточный буфер но пока в голову не лезло как это реализовать а тут пример прям в точку |
#6
|
||||
|
||||
![]() Цитата:
![]() — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#7
|
|||
|
|||
![]() кстате я уже давно не использую Application.Idle
потому шо когда я раньше это использовал заметил шо процес у которого используют Idle сильно грузит систему поэтому я стараюсь Idle заменять на таймер и еще я не проверял но мне кажеться Idle следит за простоем в Application а не в системе(скажите шо это не так) а мне нужен не чистый простой а больше бездействие пользователя потому што програма должна щитать время например отщитывать пол часа простоя а в это время ком должен транслировать ТВ передачи |
#8
|
||||
|
||||
![]() Все в порядке с этим событием, если не считать в нем факториал миллиона
![]() Пишу программы за еду. __________________ |