⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucidle.pas

📁 delphi 控件有需要的可以下载看看,可以用的,希望对你用 帮助
💻 PAS
字号:
unit UCIdle;

interface

uses Classes, UCBase, Dialogs, Windows, Forms, ExtCtrls, Messages; //WM_TIMER ;

type

  TUCIdle = class(TComponent)
  private
    FTimeOut: Integer;
    FOnIdle: TNotifyEvent;
    FUCComp: TUserControl;
    FOnAppMessage : TMessageEvent;
    FInternalTimer : TTimer;
    FChanged : Boolean;
    procedure UCAppMessage(var Msg: TMsg; var Handled: Boolean);
    procedure OnInternalTimer(Sender : TObject);
  protected

    procedure Loaded; override;
  public
    constructor Create(AOwner: TComponent); override;
    procedure DoIdle;
//    procedure Create(AOwner: TComponent);override;
  published
    property UserControl : TUserControl read FUCComp write FUCComp;
    property OnIdle : TNotifyEvent read FOnIdle write FOnIdle;
    property Timeout : Integer read FTimeOut write FTimeOut;
  end;


implementation

{ TUCIdle }

constructor TUCIdle.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
end;

procedure TUCIdle.DoIdle;
begin
  if Assigned(UserControl) and (UserControl.CurrentUser.UserID <> 0 ) then
    UserControl.Logoff;
  if Assigned(OnIdle) then OnIdle(Self);
end;

procedure TUCIdle.Loaded;
begin
  inherited;
  if not (csDesigning in ComponentState) then
    if (Assigned(UserControl)) or (Assigned(OnIdle))then
    begin
      if Assigned(Application.OnMessage) then FOnAppMessage := Application.OnMessage;
      Application.OnMessage := UCAppMessage;
      FInternalTimer := TTimer.Create(self);
      FInternalTimer.Enabled := False;
      FInternalTimer.Interval := Timeout;
      FInternalTimer.OnTimer := OnInternalTimer;
      FInternalTimer.Enabled := True;
    end;
end;

procedure TUCIdle.OnInternalTimer(Sender: TObject);
begin
  if not FChanged then DoIdle
  else FChanged := False;
end;

procedure TUCIdle.UCAppMessage(var Msg: TMsg; var Handled: Boolean);
begin
  if (msg.message = wm_mousemove) or (msg.message = wm_keydown) then FChanged := True;
//  FChanged := (msg.message = wm_mousemove) or (msg.message = wm_keydown);
  if Assigned(FOnAppMessage) then FOnAppMessage(Msg, Handled);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -