在Delphi中模拟鼠标拖动

在Delphi中模拟鼠标拖动,delphi,mouse,Delphi,Mouse,我有一个Delphi表单,上面有一个带谷歌地图的TWebbroser。我想模拟鼠标拖动。左克利克,将鼠标移动到另一个位置,释放鼠标。它应该从左向右拖动地图。 我已经试过了,但是地图不会拖 procedure MoveMouse (X,Y,Speed: Integer); var Maus : TPoint; mx, my, nx, ny, len : double; begin mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); if Speed &l

我有一个Delphi表单,上面有一个带谷歌地图的TWebbroser。我想模拟鼠标拖动。左克利克,将鼠标移动到另一个位置,释放鼠标。它应该从左向右拖动地图。 我已经试过了,但是地图不会拖

procedure MoveMouse (X,Y,Speed: Integer);
var
Maus : TPoint;
mx, my, nx, ny, len : double;
begin
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);

if Speed < 1 then Speed := 1;

GetCursorPos(Maus);
mx := maus.x;
my := maus.y;

While (mx<>x)OR(my<>y) Do begin
nx := x-mx;
ny := y-my;
len := sqrt(nx*nx + ny*ny);

if(len<=1)Then begin
  mx:=x;
  my:=y;
end
else begin
  nx := nx / (len*0.5);
  ny := ny / (len*0.5);
  mx := mx + nx;
  my := my + ny;
end;
Mouse_Event(MOUSEEVENTF_ABSOLUTE, Round(mx)+50,Round(my), 0, GetMessageExtraInfo);
//    SetCursorPos(Round(mx),Round(my));
Sleep(Speed);
end;
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

end;    
过程移动鼠标(X,Y,速度:整数);
变量
Maus:TPoint;
mx,my,nx,ny,len:double;
开始
鼠标事件(MOUSEEVENTF_LEFTDOWN,0,0,0);
如果速度小于1,则速度:=1;
GetCursorPos(Maus);
mx:=maus.x;
my:=maus.y;
当(mxx)或(myy)开始时
nx:=x-mx;
ny:=y-my;
len:=sqrt(nx*nx+ny*ny);

if(Len)使用一些JavaScript API而不是这种丑陋的方法。你可以抓取OpenLayers JavaScript库的实例。它支持许多具有相同脚本的提供程序。你在
Sleep()之前是否尝试过使用
Application.ProcessMessages;
call?这是一个一般性问题,不是地图的问题。当我尝试在web浏览器(flash游戏或类似游戏)中拖动其他内容时,也是一个问题。Application.ProcessMessages;问题是相同的:(请尝试一下OpenLayers;它是一个很好的库。您只需将它加载到您的
TWebBrowser
中并使用一个代码即可。您可以在应用程序中使用许多其他有用的函数。而且,它不需要GoogleMaps API密钥。非常感谢您对OpenLayers的建议。我已经为我的其他项目保存了您的代码片段。对于我的current项目我使用这个解决方案:过程TForm1.MoveLeft;变量p2:Tpoint;开始p2:=clienttoscreen(point(20100));设置游标(p2.x,p2.y);鼠标事件(MouseEventF_LeftDown,p2.x,p2.y,0,0);睡眠(200);鼠标事件(MouseEventF_LeftUp或MouseEventF_Move,600,0,0),结束;