怎么给鼠标发消一个按下左键的消息啊
怎么给鼠标发消一个按下左键的消息啊。就是当鼠标停留在某个控件上一会儿后时,自动执行:mousedown事件啊。
[解决办法]
是这个意思不?
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage( 'Clicked! ');
end;
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); //当时间未到, 鼠标却在Button上移动了, 并不触发Timer1Timer
begin
Timer1.Enabled := False;
Timer1.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
H : HWND;
begin
H := WindowFromPoint(Mouse.CursorPos);
if H <> 0 then SendMessage(H, BM_Click, 0, 0);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval := 1000; //停留此时间后发消息
Timer1.Enabled := True;
end;
[解决办法]
使用keybd_event函数, VK_LBUTTON
[解决办法]
改一下, 可以向本程序窗口外的其他一些控件发消息:
var
OldX, OldY : integer;
procedure TForm1.Timer1Timer(Sender: TObject);
var
H : HWND;
begin
if (Mouse.CursorPos.X = OldX) and (Mouse.CursorPos.Y = OldY) then
begin
H := WindowFromPoint(Mouse.CursorPos);
if H <> 0 then
begin
SendMessage(H, WM_LButtonDown, 0, 0);
SendMessage(H, WM_LButtonUp, 0, 0);
end;
end
else
begin
OldX := Mouse.CursorPos.X;
OldY := Mouse.CursorPos.Y;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval := 1000; //停留此时间后发消息
Timer1.Enabled := True;
OldX := Mouse.CursorPos.X;
OldY := Mouse.CursorPos.Y;
end;