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

سؤال عن طريقة الرسم باستخدام الفأرة

بدأه abdalhady في 29 ديسمبر 2008 · 5 رد · 680 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

سؤال

لقد تعلمت كيف ان اقوم بالرسم على لغة السي شارب

و لكن مثلا لو اردت ان ارسم مستطيل : فيجب ان احدد موقعه و طوله و عرضه بالارقام

و السؤال هو هل يمكنني ان انقوم بالرسم عند الضغط بالفأرة و عند الافلات عند نقطة معين يكون قد حدد الموقع و الحجم

اي الرسم باستخدام الضغط ثم السحب ثم الافلات

اي اقصد تحديد النقاط للموقع و الحجم عن طريق الفأرة

و شكرا

#2

انا ممكن اقلك الفكره كيف (ازاي) و عاد انت ترجمها ...

ممكن ان تضع Picturebox ... على الفورم وبعدين تحط event mouse click (يعني الاشي امناسب ...) تاخد احداثي الـ X , Y و تحطهم :

graphics tg;
tg=picturebox.creatgraphics();
tg.drawrigtangle(pens.Red , X1,Y1,X2,Y2)

x1,y1 = الاحداثيات عند الضغط اول مرة

x2,y2 = الاحداثيات ثاني مرة ...

وبهيك رسمت المستطيل ...

------

نفس الكود الاول ولكن طريقة احضار الاحداثيات اخرى ,

تاخد احداثيات X1 . Y1 عند بدء الضغط على الفأرة

واحداثيات X2 . Y2 عند ازالة اصبعك عن الفأرة ...

كيف هاي بقدرش اساعدك فيها لأنه انا ما بعرف ... معرفتي قليله ههه بس بعطيك افكار

ان شاء الله اكون افدتك

Chaos is rejecting all you have learned, chaos is being YOURSELF
 

#3

شكرا اخي الكريم

المشكلة ليس في الحدث لكن المشكلة هي كيف يمكنيي تمثيل الاحداث على الصورة اي

X1,X2,y1,y2

يعني ما هي القيمة التي سوف تنسب لهم هاد ما اقصد فلم استطيع ايجادها

فمثلا لو قمت بكتابة هذا الكود

g.DrawEllipse(Pens.Red, x1, xy1, x2, y2)

عند التنفيذ سوف يعطيني خطئ لانه لم انسب قيم ل X,Y

و سؤالي كيف نسب القيم حتى يأخذهم بالشكل الصحيح

#4

والله معرفش بالضبط , لعل الخبراء واللي بيعرفوا بيفيدونا

أو حتى نتعلم ونلاقي طريقة :lol:

Chaos is rejecting all you have learned, chaos is being YOURSELF
 

#5

جرب هذا الكود

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Drawing;

namespace ATS.Temp.Paint
{
	class frmPaint : Form
	{
		bool inMouseDown = false;
		Point startPoint;
		List<Rectangle> list = new List<Rectangle>();

		public frmPaint()
		{
			this.BackColor = SystemColors.Window;
		}

		protected override void OnMouseDown(MouseEventArgs e)
		{
			base.OnMouseDown(e);
			inMouseDown = true;
			startPoint = e.Location;

		}

		protected override void OnMouseMove(MouseEventArgs e)
		{
			base.OnMouseMove(e);
			if (!inMouseDown)
				return;
			Invalidate();
		}

		protected override void OnMouseUp(MouseEventArgs e)
		{
			base.OnMouseUp(e);
			if (!inMouseDown)
				return;

			inMouseDown = false;
			Point endPoint = e.Location;

			Rectangle rect = NormalizRectangle(startPoint, endPoint);
			list.Add(rect);
			this.Invalidate();
		}

		protected override void OnPaint(PaintEventArgs e)
		{
			base.OnPaint(e);

			using (Pen p = new Pen(Color.Black))
			{
				foreach (Rectangle x in list)
				{
					e.Graphics.DrawRectangle(p, x);
				}

				if (inMouseDown)
				{
					Point endPont = PointToClient(Control.MousePosition);
					Rectangle rect = NormalizRectangle(startPoint, endPont);
					e.Graphics.DrawRectangle(p, rect);
				}
			}
		}

		Rectangle NormalizRectangle(Point startPoint, Point endPoint)
		{
			Size rectSize = new Size(Math.Abs(endPoint.X - startPoint.X), Math.Abs(endPoint.Y - startPoint.Y));
			Point rectLocation = new Point(Math.Min(endPoint.X, startPoint.X), Math.Min(endPoint.Y, startPoint.Y));
			Rectangle rect = new Rectangle(rectLocation, rectSize);
			return rect;
		}
	}
}

[وسط]لا اله الا انت سبحانك انى كنت من الظالمين

[/وسط]

#6

مشكور أخي على الكود

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