Willkommen in der Delphi-PRAXiS, Ronald!
Du könntest für die zu verschiebenden Punkte jeweils ein
TShape nehmen:
Delphi-Quellcode:
type
TForm1 = class(TForm)
[...]
private
FMarker : TShape;
FAnchor : TPoint;
FOrgPos : TPoint;
FPanning : Boolean;
function CreateMarker (aColor: TColor): TShape;
end;
[...]
CONST
SHAPESIZE = 15;
procedure TForm1.Button1Click(Sender: TObject);
begin
FMarker := CreateMarker(clLime);
end;
function TForm1.CreateMarker(aColor: TColor): TShape;
begin
Result := TShape.Create(Self);
with Image1 do
Result.SetBounds(Left + (Width - SHAPESIZE) div 2,
Top + (Height - SHAPESIZE) div 2, SHAPESIZE, SHAPESIZE);
Result.Parent := Self;
Result.Shape := stCircle;
Result.Brush.Color := aColor;
Result.OnMouseDown := ShapeMouseDown;
Result.OnMouseMove := ShapeMouseMove;
Result.OnMouseUp := ShapeMouseUp;
end;
procedure TForm1.ShapeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FAnchor := Mouse.CursorPos;
FOrgPos := TShape(Sender).BoundsRect.TopLeft;
FPanning := True;
end;
procedure TForm1.ShapeMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if FPanning then
begin
TShape(Sender).Top := FOrgPos.Y + (Mouse.CursorPos.Y - FAnchor.Y);
TShape(Sender).Left := FOrgPos.X + (Mouse.CursorPos.X - FAnchor.X);
end;
end;
procedure TForm1.ShapeMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FPanning := False;
end;
Das ist natürlich nur ein Anfang. Die Verwaltung der Shapes (Speichern der Referenzen, Begrenzung der Anzahl, Einfärben beim Anklicken, Löschen) sowie eine eventuelle Einschränkung der Mausbewegung mußt du noch ergänzen.
Gruß Hawkeye