![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день! Подскажите пожалуйста, как реализовать следующее условие. Если не нажимать на кнопки клавиатуры и мыши в течении 5 минут, то чтобы запускалась форма.
|
|
#2
|
||||
|
||||
|
компонент TApplicationEvents событие OnIdle
|
| Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение: | ||
demon-sheff (04.07.2013)
| ||
|
#3
|
|||
|
|||
|
чего-то я может не понимаю? делаю все так
Код:
procedure TForm1.IdleEventHandler(Sender: TObject; var Done: Boolean); begin Form1.Show; end; procedure TForm1.FormCreate(Sender: TObject); begin Application.OnIdle := IdleEventHandler; end; procedure TForm1.IdleProc(sender:TObject; var Done: Boolean); begin Timer1.:= TimeToStr(Time); done:=false; end; не проходит ![]() |
|
#4
|
|||
|
|||
|
вроде разобрался работает так:
Код:
private
{ Private declarations }
procedure IdleEventHandler(Sender: TObject; var Done: Boolean);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.IdleEventHandler(Sender: TObject; var Done: Boolean);
begin
if timer1.Interval=10000 then
Form1.WindowState:=wsMaximized;
Done := false;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnIdle := IdleEventHandler;
form1.WindowState:=wsMinimized;
end; |
|
#5
|
||||
|
||||
|
Код:
procedure TForm2.ApplicationIdle(Sender: TObject; var Done: Boolean);
Var
CurrentTime: Extended;
begin
Done := False;
CurrentTime := GetTickCount;
if CurrentTime - ApplicationStartTime > 1000 * 60 * 5
then begin
ApplicationStartTime := CurrentTime;
ShowMessage('Другая форма');
Done := True;
end;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
ApplicationStartTime := GetTickCount;
Application.OnIdle := ApplicationIdle;
end; |
| Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
demon-sheff (04.07.2013)
| ||
|
#6
|
|||
|
|||
|
Цитата:
|
|
#7
|
||||
|
||||
|
Удобнее использовать Now.
Код:
var
isDone : Boolean;
ApplicationStartTime : TDateTime;
procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
Var
CurrentTime : TDateTime;
begin
CurrentTime := Now;
if not isDone and (CurrentTime >= ApplicationStartTime) then
begin
isDone := True;
ShowMessage('Другая форма');
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
isDone := False;
ApplicationStartTime := Now;
ApplicationStartTime := incMinute(ApplicationStartTime, 5);
Application.OnIdle := ApplicationEvents1Idle;
end; |
|
#8
|
|||
|
|||
|
Цитата:
|
|
#9
|
||||
|
||||
|
В uses подключить DateUtils.
|
|
#10
|
|||
|
|||
|
странно, но почему-то ничего не происходит?
|
|
#11
|
||||
|
||||
|
Смотри где напутал. Для более быстрой проверки поставь такую строку.
Код:
ApplicationStartTime := incSecond(ApplicationStartTime, 10); |
|
#12
|
|||
|
|||
|
все равно ничего не происходит.
вот тут все правильно вы написали? Код:
Application.OnIdle := ApplicationEvents1Idle; Код:
Application.OnIdle := ApplicationEvents1.OnIdle; |
|
#13
|
||||
|
||||
|
У меня правильно написано, так как эту строчку Дельфи сформировал автоматически при создании события OnIdle в Инсректоре.
|
|
#14
|
||||
|
||||
|
Че-то вы не то делаете. У меня все точно работает с первоначальным кодом. В форму добавили переменную и заголовок события?
Код:
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure ApplicationIdle(Sender: TObject; var Done: Boolean);
private
ApplicationStartTime: Extended;
public
{ Public declarations }
end; |
|
#15
|
||||
|
||||
|
У тебя не может работать правильно, так как переменная Done служит несколько для других целей нежели применённая в коде.
|