protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); if (Locked || Designer.ActiveReport != Report) { return; } FEventArgs.X = e.X - Offset.X; FEventArgs.Y = e.Y - Offset.Y; FEventArgs.Button = FMode1 == WorkspaceMode1.Insert ? MouseButtons.Left : e.Button; FEventArgs.Delta = new PointF(FEventArgs.X - FLastMousePoint.X, FEventArgs.Y - FLastMousePoint.Y); if (e.Button == MouseButtons.None && FMode1 == WorkspaceMode1.Select) { Cursor = Cursors.Default; FMode2 = WorkspaceMode2.None; FEventArgs.Cursor = Cursor; FEventArgs.Mode = FMode2; FEventArgs.ActiveObject = null; FEventArgs.Handled = false; // check object's sizing points for (int i = Designer.Objects.Count - 1; i >= 0; i--) { ComponentBase c = Designer.Objects[i] as ComponentBase; if (c != null) { c.HandleMouseMove(FEventArgs); if (FEventArgs.Handled) { Cursor = FEventArgs.Cursor; FMode2 = FEventArgs.Mode; FEventArgs.ActiveObject = c; break; } } } // no sizing points found, check hover if (!FEventArgs.Handled) { for (int i = Designer.Objects.Count - 1; i >= 0; i--) { ComponentBase c = Designer.Objects[i] as ComponentBase; if (c != null) { c.HandleMouseHover(FEventArgs); if (FEventArgs.Handled) { Cursor = FEventArgs.Cursor; break; } } } } } else if (FMode2 == WorkspaceMode2.Move || FMode2 == WorkspaceMode2.Size) { if (!CheckGridStep()) { return; } // if insert is on and user press the mouse button and move the mouse, resize selected objects if (FMode1 == WorkspaceMode1.Insert && e.Button == MouseButtons.Left && !FMouseMoved) { FMode2 = WorkspaceMode2.Size; foreach (Base c in Designer.SelectedObjects) { if (c is ComponentBase) { (c as ComponentBase).Width = 0; (c as ComponentBase).Height = 0; } } FEventArgs.SizingPoint = SizingPoint.RightBottom; } // ctrl was pressed, clone selected objects if (FMode1 == WorkspaceMode1.Select && ModifierKeys == Keys.Control && !FMouseMoved) { CloneSelectedObjects(); } FMouseMoved = true; FEventArgs.Mode = FMode2; FEventArgs.Handled = false; // first serve the active object if (FEventArgs.ActiveObject != null) { FEventArgs.ActiveObject.HandleMouseMove(FEventArgs); } // if active object does not reset the handled flag, serve other objects if (!FEventArgs.Handled) { foreach (Base c in Designer.Objects) { if (c is ComponentBase) { if (c != FEventArgs.ActiveObject) { (c as ComponentBase).HandleMouseMove(FEventArgs); } } } } FLastMousePoint.X += FEventArgs.Delta.X; FLastMousePoint.Y += FEventArgs.Delta.Y; FGuides.CheckVirtualGuides(); // show tooltip with object's location/size string s = ""; RectangleF selectedRect = GetSelectedRect(); if (FMode2 == WorkspaceMode2.Move) { s = selectedRect.Left.ToString() + "; " + selectedRect.Top.ToString(); } else if (FMode2 == WorkspaceMode2.Size) { s = selectedRect.Width.ToString() + "; " + selectedRect.Height.ToString(); } ShowToolTip(s, e.X + 20, e.Y + 20); Refresh(); } else if (FMode2 == WorkspaceMode2.SelectionRect) { FSelectionRect = new RectangleF(FSelectionRect.Left, FSelectionRect.Top, FEventArgs.X - FSelectionRect.Left, FEventArgs.Y - FSelectionRect.Top); Refresh(); } else if (FMode2 == WorkspaceMode2.Custom) { if (!CheckGridStep()) { return; } FMouseMoved = true; FEventArgs.Mode = FMode2; if (FEventArgs.ActiveObject != null) { FEventArgs.ActiveObject.HandleMouseMove(FEventArgs); } FLastMousePoint.X += FEventArgs.Delta.X; FLastMousePoint.Y += FEventArgs.Delta.Y; Refresh(); } }