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

مشاركة الافكار في كيفية رسم وتحريك الاشكال :)

بدأه Dr.Pain في 27 أكتوبر 2009 · 10 رد · 1,757 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته ..........

على ضوء الاجابة التي طرحها أخي رغيد هنـــــــــــــــا

فأني قمت بتطوير الفئة Rectangle واصبحت قابلة للحركة .. ولكن هناك مشكلة الا وهي انه عند اعادة الرسم تظهر تكسرات على الـ Form !!

فان كانت لدى احدكم اي فكرة عن كيفية التخلص من تلك التكسرات او اية افكار اخرى حول كيفية رسم الاشكال وتحريكها , فارجوا ان نتشارك بها :)

Dr.Pain

Draw.zip

#2

و عليكم السلام و رحمة الله تعالى و بركاته...

أبسط طريقة هي أن تعمل Invalidate(curRect) للمكان المرسوم فيه Rectangle حاليا قبل رسمه في المكان التالي. الدالة Invalidate تقوم بزيادة مساحة محددة في مستطيل على نافذة ما كانت مربعا أو نموذج إلى لائحة المساحات الواجب مسحها أو إعادة رسمها مع إرسال رسالة بالأمر إلى الكنترول المعني بالأمر.

يمكنك أيضا عمل Invalidate() بدون معاملات لتظمين كامل المساحة الداخلية للنموذج أو المربع.

تحياتي...

تم تعديل هذه المشاركة بواسطة محمد رضى في 27 أكتوبر 2009 في 19:30

#3

السلام عليكــم ورحمـة الله وبركاتــه ،،

كيفك يا محمد , إن شاء الله تكون بخير حبيبي :happy:

لقد قمت بتجربة ما قلته من قبل لكن دون فائدة ,, انا فقط استخدمت ()Invalidate فقط لقدح الحدث Paint الخاص بالـ Form !

الرجاء الإطلاع على المثال :lol:

#4

بخير و الحمد لله أخي العزيز Dr. Pain :)

فقط غير كود الدالة :

	Sub Draw(ByVal x As Integer, ByVal y As Integer, ByVal w As Integer, ByVal h As Integer)
		Me.Rect.X = x
		Me.Rect.Y = y
		Me.Rect.Width = w
		Me.Rect.Height = h
		Me.parent.Invalidate()
	End Sub

بالكود الجديد كما شرحت لك في ردي السابق. Invalidate(curRect) يجب أن تكون قبل عملية الرسم التالية :

	Sub Draw(ByVal x As Integer, ByVal y As Integer, ByVal w As Integer, ByVal h As Integer)
		Me.Rect.Width = Me.Rect.Width + 1
		Me.Rect.Height = Me.Rect.Height + 1
		Me.parent.Invalidate(Me.Rect)

		Me.Rect.X = x
		Me.Rect.Y = y
		Me.Rect.Width = w
		Me.Rect.Height = h
	End Sub

تحياتي...

#5

السلام عليكــم ورحمـة الله وبركاتــه ،،

كيفك يا محمد :happy:

لقد بتجربة الكود الذي وضعته أنت ولكن ظل الـ Flicker موجوداً :angry:

لقد قمت بتعديل الاسلوب المستخدم في الرسم .. فبدلاً من ان كان يتم الرسم مباشرة على الـ Form اصبح يتم الرسم على Bitmap ومن ثم يتم الرسم على الـ Form !

ارجوا ممن لديه افكار اخرى وضعها هنا لتعم الفائدة :lol:

Drawing.zip

#6

مرحباً أخي الكريم :)

يمكننا الاعتماد على ( BufferedGraphics Class ) لن ترى أي ( Flicker ) بين عملية الرسم والمسح .

بالتوفيق :)

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#7

السلام عليكم ورحمة الله و بركاته

اخي العزيز نزار .... الموضوع جميل ويبدو انك تنوي الإيغال فيه ... وبالمناسبة فإن اسلوب الرسم على مخزن مؤقت في الذاكرة off-screen buffer والمتمثل في الرسم على صورة في الذاكرة ثم قلبها على السطح الرسومي (الفورم مثلا) هو اسلوب متبع في التخلص من التقطعات الناتجة عن عمليات الرسم المتكررة و المتداخلة على السطح الرسومي وامام عيني المستخدم.

على العموم لم يتسنى لي الاطلاع على المثال الاخير الذي وضعته كوني قد كتبت مشاركتي هذه وماسيأتي فيها من كود بعيدا عن الانترنت ... وربما لنا نقاش حوله بعد الاطلاع عليه بإذن الله تعالى.

على العموم دعني اعقد المسئلة قليلاً وربما انحني بالموضوع قليلا وازيد من التعقيد .. خاصة واننا نناقش حالياً في المنتدى موضوع عن الـ OOP موجه للمبتدئين و الهواه الذي يعرفون عنها القليل ولايستخدمونها في برامجهم عملياً.

وقد استغل موضوعك في وقت لاحق كخطوة ثانية لنقل النقاش اليه وتطوير مهاراتنا سويا بإذن الله تعالى.

----------------------------------------------------------------

والان بشكل سريع .... وقبل الخوض السريع في الحديث ... يمكن إلقاء نظرة سريعة على الصورة التالية :

post-40889-1256858429_thumb.png

كوننا ننوي جعل البرنامج يسمح بالتحكم بأكثر من شكل (مستطيل, دائرة , مثلث ... او اي اشكال اخرى هندسية او حتى صور اخرى .. ) فقد قمت بتضمين فئة اساسية من النوع Abstract او MustInherit والتي تقتضي عدم استخدامها مباشرة وانما الوارثة منها ... وتحتوي الفئة على الخصائص و الاحداث و الطرق المشتركة بين جميع الاشكال بإختلافها ... كالـخاصية Bounds و التي تحتوي على حدود الشكل المطلوب ... كما توجد احداث مثل Click و MouseMove ويمكن اضافة المزيد بالطبع ... وكذلك بعض الطرق المشتركة مثل Draw وهي الأهم والتي ينبغي ان يقوم المبرمج بعمل Overrides لها ليرسم الشكل المطلوب.

على العموم بكلام آخر قمت بعمل ثلاث فئات مستطيل gfxRectangle و دائرة gfxCircle و اخير مثلث gfxTriangle (لم اقم بتطبيقه لمن يريد ان يتسلى به بنفس اسلوب الدائرة و المستطيل).

ويظهر بوضوح من الرسمة اعلاه كون الفئات الثلاث ترث من الفئة الرئيسية Shape.

على الجانب الآخر .... اضفت فئة اساسية(بإسم MainBoard) من النوع Panel او لوحة ستحتوي على الاشكال جميعا و تقوم بإدارتها وعرضها و التحكم فيها ... بحيث انه اذا اردنا ان نستخدم اكوادنا في اي برنامج آخر نقوم بإضافة هذه الاداه الى الفورم وعليها نضيف ايا من الاشكال التي نريدها وهي ستتولى مسئلة ادارتها .. وبدورها تحتوي هذه الفئة على خصائص معينة و طرق يمكن استغلالها لإدارة رسوماتنا.

مثلا توجد خاصية بإسم Shapes وفيها جميع الاشكال على اللوحة الأم .... ويمكن مثلا استغلالها لإعادة رسم جميع الاشكال على اللوحة .... مثلا :

		Dim Board As New MainBoard

		For Each Item As Shape In Board.Shapes
			Item.Draw()
		Next

في الكود السابق اذا افترضنا كون المتغير Board يحتوي على اي اشكال مختلفة فبدوران بسيط خلال الخاصية Shapes يمكن استدعاء الدالة Draw و التي ستقوم بدورها بإستدعاء الكود المسئول على كل Shape بإختلاف نوعه.

لن اطيل كون الموضوع لايخلو من الإبهام ويمكن ان تكون لنا جلسة اخرى في حال غموض اي جزء من اجزاء المثال المرفق.

تحياتي

السلام عليكم و رحمة الله و بركاته

rtaMovableObjects.zip

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#8

السلام عليكــم ورحمـة الله وبركاتــه ،،

جزاك الله خيراً أخي Bashar Rabat سوف أطلع على الموضوع :lol:

اخي وحبيبي رغود .. كلامك سليم مليون المائة ,, وذلك بالضبط ما كنت اود فعله :wink: ,, ولكنني فضلت التاني في الموضوع وذلك حتى يتسنى لي ولغيري فهم الية العمل ومن ثم وضع تصميم مناسب للفئات مثلما تفضلت انت :happy:

#9

يبدو انني قد استعجلت قليلاً ... :blush:

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#10

السلام عليكــم ورحمـة الله وبركاتــه ،،

لا استعجلت ولا حاجة يا عم رغيد , المثال الذي وضعته انت كان اكثر من رائع يا رغود :wink:

أدينا اليوم أضفنا المقابض للمستطيل , باقي نضيف خاصية عمل الـ Resize :lol:

Drawing.zip

#11

السلام عليكـم ورحمـة الله وبركاتــه ،،

اليوم إضافة جديدة .. وهي تغيير شكل الماوس بما يناسب كل مقبض :lol:

Drawing.zip

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…