lazarus/lcl/include/idletimer.inc

101 lines
2.7 KiB
PHP

{%MainUnit ../extctrls.pp}
{******************************************************************************
TIdleTimer
******************************************************************************
*****************************************************************************
This file is part of the Lazarus Component Library (LCL)
See the file COPYING.modifiedLGPL.txt, included in this distribution,
for details about the license.
*****************************************************************************
}
{ TIdleTimer }
procedure TCustomIdleTimer.SetAutoEnabled(const AValue: boolean);
begin
if FAutoEnabled=AValue then exit;
FAutoEnabled:=AValue;
UpdateHandlers;
end;
procedure TCustomIdleTimer.DoOnIdle(Sender: TObject; var Done: Boolean);
begin
if FFireOnIdle then begin
DoOnTimer;
Done:=not FFireOnIdle;
end;
if not AutoEnabled then exit;
// automatic start, stop or restart
if AutoEndEvent=itaOnIdle then
Enabled:=false;
if AutoStartEvent=itaOnIdle then
Enabled:=true;
end;
procedure TCustomIdleTimer.DoOnIdleEnd(Sender: TObject);
begin
if not AutoEnabled then exit;
// automatic start, stop or restart
if AutoEndEvent=itaOnIdleEnd then
Enabled:=false;
if AutoStartEvent=itaOnIdleEnd then
Enabled:=true;
end;
procedure TCustomIdleTimer.DoOnUserInput(Sender: TObject; Msg: Cardinal);
begin
FireOnIdle:=false;
if not AutoEnabled then exit;
// automatic start, stop or restart
if AutoEndEvent=itaOnUserInput then
Enabled:=false;
if AutoStartEvent=itaOnUserInput then
Enabled:=true;
end;
procedure TCustomIdleTimer.Loaded;
begin
inherited Loaded;
UpdateHandlers;
end;
constructor TCustomIdleTimer.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
FAutoEnabled := False;
FAutoStartEvent := itaOnIdle;
FAutoEndEvent := itaOnUserInput;
end;
destructor TCustomIdleTimer.Destroy;
begin
AutoEnabled := False;
inherited Destroy;
end;
procedure TCustomIdleTimer.UpdateHandlers;
begin
if FAutoEnabled
and ([csDesigning,csLoading,csDestroying]*ComponentState=[]) then begin
// connect handlers
if FHandlersConnected or (Application=nil) then exit;
Application.AddOnIdleHandler(@DoOnIdle,true);
Application.AddOnIdleEndHandler(@DoOnIdleEnd,true);
Application.AddOnUserInputHandler(@DoOnUserInput,true);
FHandlersConnected:=true;
end else begin
// disconnect handlers
if (not FHandlersConnected) or (Application=nil) then exit;
Application.RemoveOnIdleHandler(@DoOnIdle);
Application.RemoveOnIdleEndHandler(@DoOnIdleEnd);
Application.RemoveOnUserInputHandler(@DoOnUserInput);
FHandlersConnected:=false;
end;
end;
// included by extctrls.pp