3

delphi如何用鼠标移动圆圈?

circle:Shape;
4

3 回答 3

6

ClientToScreen请务必使用and将您从 Control 上的 MouseMove 获得的 Mouse X,Y 客户端坐标转换为 Parent 的客户端ScreenToClient

以下过程将 Control 的中心移动到其客户端坐标中的点 (X,Y):

procedure MoveControl(AControl: TControl; const X, Y: Integer);
var
  lPoint: TPoint;
begin
  lPoint := AControl.Parent.ScreenToClient(AControl.ClientToScreen(Point(X, Y)));
  AControl.Left := lPoint.X - AControl.Width div 2;
  AControl.Top := lPoint.Y - AControl.Height div 2;
end;

现在要在单击 TShape 时移动它,您必须提供以下 MouseMove 事件处理程序:

procedure TForm1.ShapeToMoveMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if ssLeft in Shift then // only move it when Left-click is down
    MoveControl(Sender as TControl, X, Y);
end;

要对其进行测试,请使用以下代码在您的表单中放置一个按钮:

procedure TForm1.ButtonTestClick(Sender: TObject);
begin
  with TShape.Create(nil) do
  begin
    Name := Format('ShapeToMove%d',[Self.ControlCount + 1]);
    Parent := Self; // Parent will free it
    Shape := stCircle;
    Width := 65;
    Height := 65;
    OnMouseMove := ShapeToMoveMouseMove;
  end;
end;

现在,这是一个极简主义的例子,但它应该让你开始。
为了好玩,只需使用此 MouseMove 事件处理程序挂钩其他控件... :-)

于 2010-03-05T02:04:23.310 回答
5

如果您访问我的网页,您可以找到一些示例(全部包含代码),可以帮助您解决这个问题。 “带有图形和平面图的视觉作品样本”;使用两个组件直观地管理、移动、调整大小和保存元素;一个用于选择,移动,调整大小,...(TSeleccOnRuntime)和其他(TSaveComps)用于保存状态(位置,大小,...)。 替代文字 http://neftali-mirror.site11.com/images/imagen_ej_restaurante.png

直观地选择形状;示例用于解释选择视觉形状和图像的两种模式。

在运行时创建、移动和更改控件(如 IDE);TSeleccOnRuntime 组件的另一个示例。模拟和IDE。

替代文字 http://neftali-mirror.site11.com/images/image_ej_form_designer.png

最后是另一个在运行时创建/销毁组件并使用鼠标移动的示例;该样品不含组件。示例中的所有代码。

替代文字 http://neftali-mirror.site11.com/images/imagen_ej_mover_mouse.png

我希望这对你有用。
问候

PD:请原谅我的英语不好。

于 2010-03-05T09:20:29.270 回答
0

好吧,我没有太多事情要做,但是让一些东西跟随鼠标移动通常是这样的:

在某处有一个“IsFollowingMouse”标志。当您应该跟随鼠标时打开它。在窗体的 MouseMove 事件中,执行如下操作:

procedure TMyForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if FIsFollowingMouse then
  begin
    myCircle.left := x + fShapeOffsetX;
    myCircle.top := y + fShapeOffsetY;
  end;
end;

偏移量是您使用的变量,它给出了鼠标指针位置和 TShape 左上角之间的差异。

于 2010-03-04T23:46:55.007 回答