gpt4 book ai didi

delphi - delphi中如何用鼠标移动圆圈?

转载 作者:行者123 更新时间:2023-12-03 15:41:39 34 4
gpt4 key购买 nike

delphi中如何用鼠标移动圆圈?

circle:Shape;

最佳答案

请务必使用 ClientToScreenScreenToClient 将从 Control 上的 MouseMove 获取的鼠标 X,Y 客户端坐标转换为父级客户端。

以下过程将控件的中心移动到其客户端坐标中的点 (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 时移动 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 事件处理程序 Hook 其他控件...:-)

关于delphi - delphi中如何用鼠标移动圆圈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2382981/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com