الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن أداة الاختيار

مغلق
بدأه ابو هادي في 3 يونيو 2005 · 2 رد · 524 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

في الحقيقة أبارك للقائمين على هذا المنتدى جهدهم المبذول وتواصل الأعضاء وتفاعلهم الرائع في هذا المنتدى ..

عندي طلب لو ممكن أحد يساعدني فيه ..

وهو كيف يمكنني عمل أداة لتحديد جزء من الصورة (Selection Tool) (Rubber-band Tool) مثل الأداة الموجودة في برامج الرسم ..

في الحقيقة لي بعض المحاولات وذلك باستخدام الـMouse Events .. ولكن للأسف لم استطع أن اطبقها على صورة موجودة في الـpictureBox ..!!

وهذه هي محاولتي :

public void MyMouseDown( Object sender, MouseEventArgs e )
  {
 	 selected = true;
 	 
 	 ptOriginal.X = e.X;
 	 ptOriginal.Y = e.Y;
 	 
 	 ptLast.X = -1;
 	 ptLast.Y = -1;
  }
  
  private void MyDrawReversibleRectangle( Point p1, Point p2 )
  {
 	 Rectangle rc = new Rectangle();

 	 p1 = PointToScreen( p1 );
 	 p2 = PointToScreen( p2 );
 	 
 	 if( p1.X < p2.X )
 	 {
    rc.X = p1.X;
    rc.Width = p2.X - p1.X;
 	 }
 	 else
 	 {
    rc.X = p2.X;
    rc.Width = p1.X - p2.X;
 	 }
 	 if( p1.Y < p2.Y )
 	 {
    rc.Y = p1.Y;
    rc.Height = p2.Y - p1.Y;
 	 }
 	 else
 	 {
    rc.Y = p2.Y;
    rc.Height = p1.Y - p2.Y;
 	 }
 	 
 	 ControlPaint.DrawReversibleFrame( rc,
    Color.Black, FrameStyle.Dashed);

 	 Graphics gr = this.CreateGraphics();
 	 Graphics gm = this.tbThreshold.CreateGraphics();
 	 Graphics ga = this.pictureBox2.CreateGraphics();

 	 Pen p = new Pen(Color.Black);

 	 gm.DrawRectangle(p,ptOriginal.X,ptOriginal.Y,ptOriginal.X-ptLast.X,ptOriginal.Y-ptOriginal.Y);
 	 gr.DrawRectangle(p,ptOriginal.X,ptOriginal.Y,ptOriginal.X-ptLast.X,ptOriginal.Y-ptOriginal.Y);
 	 ga.DrawRectangle(p,ptOriginal.X,ptOriginal.Y,ptOriginal.X-ptLast.X,ptOriginal.Y-ptOriginal.Y);
 	 
 	 Image image = this.pictureBox1.Image;
 	 Graphics g = Graphics.FromImage(pictureBox1.Image);
 	 
 	 g.DrawRectangle(p,ptOriginal.X ,ptOriginal.Y,ptOriginal.X-ptLast.X,ptOriginal.Y-ptOriginal.Y);
 	 
 	 p.Dispose();
 	 g.Dispose();

 	 pictureBox1.Image=image;
  }
  
  public void MyMouseUp( Object sender, MouseEventArgs e )
  {
 	 selected = false;
 	 
 	 if( ptLast.X != -1 )
 	 {
    Point ptCurrent = new Point( e.X, e.Y );
    MyDrawReversibleRectangle( ptOriginal, ptLast );
    MessageBox.Show(ptOriginal.ToString()+" and "+ ptLast.ToString());
 	 }
 	 
 	 ptLast.X = -1;
 	 ptLast.Y = -1;
 	 ptOriginal.X = -1;
 	 ptOriginal.Y = -1;   
  }
  
  public void MyMouseMove( Object sender, MouseEventArgs e )
  {
 	 Point ptCurrent = new Point( e.X, e.Y );
 	 
 	 if( selected)
 	 {
    if( ptLast.X != -1 )
    {
   	 MyDrawReversibleRectangle( ptOriginal, ptLast );
    }
    
    ptLast = ptCurrent;
    
    MyDrawReversibleRectangle( ptOriginal, ptCurrent );
 	 }
  }
  
  protected override void OnLoad(System.EventArgs e)
  {
 	 MouseDown += new MouseEventHandler(MyMouseDown );
 	 MouseUp += new MouseEventHandler( MyMouseUp );
 	 MouseMove += new MouseEventHandler( MyMouseMove );
 	 selected = false;
  }

فهل من معين يساعدني على هذه المشكلة ؟!

مع سابق شكري :)

طور نفسك ولا تقف عند حد

#2

ohh.. come on guys !!!

where are you?!!

تم تعديل هذه المشاركة بواسطة ابو هادي في 3 يونيو 2005 في 16:05

طور نفسك ولا تقف عند حد

#3

يعني إلى الدرجة دي سؤالي صعب ؟! ومحدش آدر يساعدني ولو بملاحظة !!!

يا أخوان ما اتصور الامر صعب للمستوى ده

انتظركم بفارغ الصبر

طور نفسك ولا تقف عند حد

هذا الموضوع مغلق.

مواضيع مشابهة