Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Вниз

Как узнать что пользователь не работает с программой уже...   Найти похожие ветки 

 
laok   (2006-10-02 12:37) [0]

... n-ое время? это нужно для обновления данных из файлов, но не очень удобно делать это в процессе работы - чуточку подтормаживает. Хотелось бы, чтобы если пользователь не работает скажем 1 минуту, происходил бы запуск задачи... где-то видел, найти не могу...


 
Игорь Шевченко ©   (2006-10-02 12:51) [1]

GetLastInputInfo

Пример в http://kladovka.net.ru/download.cgi?id=19


 
laok   (2006-10-02 12:54) [2]

Не совсем то. Мне нужно, чтобы это распространялось только на десктоп программы, а когда пользователь вне её и так обновление происходит - прога висит в значке.


 
X9 ©   (2006-10-02 12:54) [3]

У объекта Application есть событие OnIdle, можно запускать таймер в его обработчике.


 
Игорь Шевченко ©   (2006-10-02 13:00) [4]

X9 ©   (02.10.06 12:54) [3]

И что это даст ? У TApplication нету события "Idle закончился", на котором при твоем способе этот таймер должен сбрасываться.

laok   (02.10.06 12:54) [2]

Кроме идеи поставить хук WH_MOUSE + WH_KEYBOARD в твоем приложении больше никаких идей в голову не приходит.


 
SergP.   (2006-10-02 13:08) [5]

> laok   (02.10.06 12:37)
> ... n-ое время? это нужно для обновления данных из файлов,
> но не очень удобно делать это в процессе работы - чуточку
> подтормаживает. Хотелось бы, чтобы если пользователь не
> работает скажем 1 минуту, происходил бы запуск задачи...
> где-то видел, найти не могу...


Хм. А если запускать обновление с низким приоритетом?


 
laok   (2006-10-02 13:10) [6]

SergP. ты думаешь я зря сюда написал? я не умею запускать отдельные процедуры с низким приоритетом :-[


 
Игорь Шевченко ©   (2006-10-02 13:40) [7]

Пример работает:

object fMain: TfMain
 Left = 192
 Top = 107
 Width = 696
 Height = 480
 Caption = "fMain"
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "MS Sans Serif"
 Font.Style = []
 OldCreateOrder = False
 OnCreate = FormCreate
 PixelsPerInch = 96
 TextHeight = 13
 object ApplicationEvents: TApplicationEvents
   OnIdle = ApplicationEventsIdle
   Left = 20
   Top = 24
 end
 object Timer: TTimer
   Enabled = False
   Interval = 60000
   OnTimer = TimerTimer
   Left = 20
   Top = 60
 end
end


unit main;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 AppEvnts, ExtCtrls;

type
 TfMain = class(TForm)
   ApplicationEvents: TApplicationEvents;
   Timer: TTimer;
   procedure ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
   procedure FormCreate(Sender: TObject);
   procedure TimerTimer(Sender: TObject);
 end;

var
 fMain: TfMain;

implementation

{$R *.DFM}

procedure TfMain.ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
begin
 Timer.Enabled := true;
end;

function MouseHookProc (code: Integer; wParam: WPARAM;
 lParam: LPARAM): LRESULT; stdcall;
begin
 if code >= 0 then
   fMain.Timer.Enabled := false;
 Result := CallNextHookEx(WH_MOUSE, code, wParam, lParam);
end;

function KbdHookProc (code: Integer; wParam: WPARAM;
 lParam: LPARAM): LRESULT; stdcall;
begin
 if code >= 0 then
   fMain.Timer.Enabled := false;
 Result := CallNextHookEx(WH_KEYBOARD, code, wParam, lParam);
end;

procedure TfMain.FormCreate(Sender: TObject);
begin
 SetWindowsHookEx(WH_KEYBOARD, KbdHookProc, 0, GetCurrentThreadId);
 SetWindowsHookEx(WH_MOUSE, MouseHookProc, 0, GetCurrentThreadId);
end;

procedure TfMain.TimerTimer(Sender: TObject);
begin
 ShowMessage ("Процесс запущен");
end;

end.


 
Ketmar ©   (2006-10-02 14:20) [8]

>[6] laok 2-Oct-2006, 13:10
>я не умею запускать отдельные процедуры с низким
>приоритетом :-[
более того: это даже ОС не умеет. только потоки.


 
X9 ©   (2006-10-02 17:17) [9]


> Игорь Шевченко ©   (02.10.06 13:00) [4]
>
> X9 ©   (02.10.06 12:54) [3]
>
> И что это даст ? У TApplication нету события "Idle закончился",
>  на котором при твоем способе этот таймер должен сбрасываться.
>

Ловить сообщения ввода, что Вы и сделали в [7].



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.032 c
2-1160297204
WoW
2006-10-08 12:46
2006.10.22
Нужен толковой пример по работе с интерфейсами...


3-1156174631
DBE
2006-08-21 19:37
2006.10.22
table.Filter наличие подстроки в ячейки


2-1159792772
BiS
2006-10-02 16:39
2006.10.22
Мигание строки в DBGride


1-1158231300
простак
2006-09-14 14:55
2006.10.22
связность графа....


15-1159279755
Oldman
2006-09-26 18:09
2006.10.22
Вернемся таки к "Дозорам"...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский