Как перемещать круг с помощью мыши в delphi?
circle:Shape;
Как перемещать круг с помощью мыши в delphi?
circle:Shape;
Обязательно конвертируйте клиентские координаты Mouse X, Y, которые вы получаете от MouseMove на вашем Control, в родительский клиент, используя ClientToScreen
и 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 ... :-)
Если вы перейдете на мою веб-страницу, вы можете найти несколько примеров (все с включенным кодом), которые могут помочь вам в этом вопросе. «Образец для наглядной работы с фигурами и планами»; Используйте два компонента для визуального управления, перемещения, изменения размера и сохранения элементов; Один для выбора, перемещения, изменения размера ... (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
Я надеюсь, что это будет полезно для вас.
С уважением
П.Д .: Извините за мой плохой английский.
Что ж, у меня не так много подробностей, но если что-то движется, чтобы следовать за мышью, обычно работает следующим образом:
Имейте где-нибудь флаг "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.
TShape
компонентом или это что-то, что вы рисуете для себя на более крупном объекте холста? - person Rob Kennedy   schedule 05.03.2010