private void InitPoignees(I2iObjetGraphique obj) { if (!obj.NoPoignees) { for (int n = 0; n < 8; n++) { CPoignee p = new CPoignee(this, obj, Editeur); switch (n) { case 0: p.Alignement = ContentAlignment.TopLeft; break; case 1: p.Alignement = ContentAlignment.TopCenter; break; case 2: p.Alignement = ContentAlignment.TopRight; break; case 3: p.Alignement = ContentAlignment.MiddleLeft; break; case 4: p.Alignement = ContentAlignment.MiddleRight; break; case 5: p.Alignement = ContentAlignment.BottomLeft; break; case 6: p.Alignement = ContentAlignment.BottomCenter; break; case 7: p.Alignement = ContentAlignment.BottomRight; break; } p.RecalcPosition(CUtilRect.Normalise(obj.RectangleAbsolu)); m_poignees.Add(p); } } }
public virtual void MouseMove(Point ptLogique) { try { if (EnRedimentionnement) { DateTime dtStart = DateTime.Now; Graphics g = Editeur.CreateGraphics(); Bitmap bmp = CacheScreenShot; CPoignee poigneeRef = m_poigneesEnCour[0]; foreach (CPoignee p in m_poigneesEnCour) { //Redessine le fond Rectangle rctPoignee = p.DerniereZoneDisplayPourResize; g.DrawImage(bmp, rctPoignee, rctPoignee, GraphicsUnit.Pixel); //Déplace la poignée int nDecalX = p.PointDebutDrag.X - poigneeRef.PointDebutDrag.X; int nDecalY = p.PointDebutDrag.Y - poigneeRef.PointDebutDrag.Y; Point ptMove = new Point(ptLogique.X + nDecalX, ptLogique.Y + nDecalY); p.MouseMove(ptMove); //Dessine la poignée (et la zone de redimensionnement) p.Draw(g); } g.Dispose(); } else if (EnSelection) { //Redessine la sélection dans une image //Redessiner fond Bitmap bmp = CacheScreenShot; Graphics g = Editeur.CreateGraphics(); g.DrawImage(bmp, m_lastZoneDisplayDessinee, m_lastZoneDisplayDessinee, GraphicsUnit.Pixel); Rectangle rct = GetRectangleSelection(ptLogique); rct = CUtilRect.Normalise(new Rectangle(Editeur.GetDisplayPointFromLogical(rct.Location), Editeur.GetDisplaySizeFromLogical(rct.Size))); m_lastZoneDisplayDessinee = new Rectangle(rct.Location, new Size(rct.Width + 1, rct.Height + 1)); g.DrawRectangle(Pens.Blue, rct); Brush bb = new SolidBrush(Color.FromArgb(50, Color.YellowGreen)); g.FillRectangle(bb, rct); g.Dispose(); bb.Dispose(); } //DEPLACEMENT else if (Control.MouseButtons == MouseButtons.Left && m_bMouseDownDansCetteFenetre && !m_bBlocageMove && (Math.Abs(m_ptStartDrag.X - ptLogique.X) > 3 || Math.Abs(m_ptStartDrag.Y - ptLogique.Y) > 3)) { m_bIsStartDragging = true; if (m_waitSelection != null && m_waitSelection.Count > 0 && this.Contains(m_waitSelection[0])) { ControlReference = m_waitSelection[0]; } m_waitSelection = null; try { List <CDonneeDragDropObjetGraphique> datasDrag = new List <CDonneeDragDropObjetGraphique>(); bool bDrag = false; foreach (I2iObjetGraphique obj in this) { if (obj.IsLock) { continue; } Point ptOffset = new Point(m_ptStartDrag.X - obj.RectangleAbsolu.Left, m_ptStartDrag.Y - obj.RectangleAbsolu.Top); datasDrag.Add(new CDonneeDragDropObjetGraphique(Editeur.OrigineDragDropId, obj, ptOffset)); bDrag = true; } DataObject dataObj = new DataObject(datasDrag); Editeur.CompleteDragDropData(dataObj, ToArray()); if (bDrag) { Editeur.DoDragDrop(dataObj, System.Windows.Forms.DragDropEffects.Move | System.Windows.Forms.DragDropEffects.Copy | DragDropEffects.Link); } m_bMouseDownDansCetteFenetre = false; } catch { } m_bIsStartDragging = false; } else if (Control.MouseButtons != MouseButtons.Left) { if (!Editeur.LockEdition) { bool bOnElementSelectione = false; foreach (I2iObjetGraphique ele in this) { if (!ele.IsLock && CUtilRect.Normalise(ele.RectangleAbsolu).Contains(ptLogique)) { bOnElementSelectione = true; break; } } if (bOnElementSelectione) { Cursor.Current = Cursors.SizeAll; } foreach (CPoignee poignee in ToutesLesPoignees) { if (!poignee.ObjetLie.IsLock && poignee.IsPointIn(ptLogique)) { Cursor.Current = poignee.Cursor; break; } } } } } catch { } }