问一个关于测试鼠标的问题!(100分)

  • 主题发起人 主题发起人 sh9
  • 开始时间 开始时间
S

sh9

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个窗口里,当鼠标或键盘在1分钟内没有任何动作的时候执行某一操作!
请问如何编写!最好有源码!
 
放一个Timer控件,间隔设为1分钟,1分钟内不动鼠标或键盘,鼠标就自动隐藏。

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
procedure FormKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
MouseHide: Boolean;

implementation

{$R *.DFM}

procedure DoMouse;
begin
if MouseHide then
begin
Screen.Cursor:=crDefault; { 恢复鼠标 }
MouseHide:=False;
end
else Form1.Timer1.Enabled:=True;
end;

procedure TForm1.FormMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
DoMouse;
end;

procedure TForm1.FormMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
DoMouse;
end;

procedure TForm1.FormKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
DoMouse;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
MouseHide:=True; { 初始化 }
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
MouseHide:=True;
Screen.Cursor:=crNone; { 隐藏鼠标 }
{ 以下这一行可以不要,但会使程序效率降低 }
Timer1.Enabled:=False;
end;

end.
 
另一个方法是使用Application.OnMessage,监控所有消息。
有动作的时候置上标志,一分钟之内没有变化,执行别的操作。
 
毛虎林能否举例?
 
是不是还要考虑到当前窗口是否是活动窗口!
 
好象有个事件是说程序闲置时会触发,
另,Fyx 的代码基本可以
 
毛虎林的方式是不行的
win的信息能透过Application.OnMessage直接发到Form上的
 
用键盘钩子和鼠标钩子,再放置一个timer控件比较好。当窗口激活时挂上钩子,同时激活
timer,当有键盘输入和鼠标动作的时候重置timer就可以了(如果不想窗口处于非激活状态
也执行相应的代码就在窗口进入后台时释放钩子,同时关闭timer)。
timer的ontimer事件中写你需要的代码。
 
sh9:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子
 
接受答案了.
 
后退
顶部