تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مقال- تطوير الفورم رسم الفورم باستخدام +GDI وتحريكه Moving و تغيير أبعاده Resize
#2
الأن وتحت الحدث WndProc نقوم بإضافة شرط أنه سيتم تنفيذه هذه الرسائل Messages في مرحلة التشغيل فقط ويتم ذلك عن طريق DesignMode Property ثم نقوم بتحديد أو تعريف نقطة Point وهذه النقطة ستعبر عن مكان الماوس في المستطيلات التي قمنا بتعريفها في الحدث OnPaint وهذه المستطيلات سنقوم بتعريفها ثانية في هذا الحدث طبعا من الممكن تقليل حجم الكود عن طريق تعريف هذه المستطيلات مرة واحدة باستخدام Structure مثلا ولكني قمت بتعريفها ثانية بغرض توضيح الأمر للقارئ ليس إلا بعد ذلك وباستخدام Select Case سوف نحدد Window Message ونضع بعض الجمل الشرطية باستخدام If ….End If للحصول علي نتائج الحدث في حالاته المختلفة والكود التالي يوضح شكل الكود


كود :
<System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.LinkDemand, Flags:=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)> _
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)

If Not DesignMode Then

Dim m_Point As Point

' Define Hit Test Imaginary Rectangles
Dim CaptionRect As New Rectangle(5, 5, ClientSize.Width - 10, 24)

Dim TopRect As New Rectangle(6, 0, ClientSize.Width - 12, 5)
Dim TopLeftRect As New Rectangle(0, 0, 6, 6)
Dim TopRightRect As New Rectangle(ClientSize.Width - 6, 0, 6, 6)

Dim LeftRect As New Rectangle(0, 6, 5, ClientSize.Height - 12)
Dim RightRect As New Rectangle(ClientSize.Width - 5, 6, 5, ClientSize.Height - 12)

Dim BottomRect As New Rectangle(6, ClientSize.Height - 5, ClientSize.Width - 12, 5)
Dim BottomLeftRect As New Rectangle(0, ClientSize.Height - 6, 6, 6)
Dim BottomRightRect As New Rectangle(ClientSize.Width - 6, ClientSize.Height - 6, 6, 6)

Select Case m.Msg

Case WM_NCHITTEST
m_Point = PointToClient(New Point(m.LParam.ToInt32()))

If CaptionRect.Contains(m_Point) Then

m.Result = CType(HTCAPTION, IntPtr)
Return

ElseIf TopRect.Contains(m_Point) Then

m.Result = CType(HTTOP, IntPtr)
Return

ElseIf LeftRect.Contains(m_Point) Then

m.Result = CType(HTLEFT, IntPtr)
Return

ElseIf RightRect.Contains(m_Point) Then

m.Result = CType(HTRIGHT, IntPtr)
Return

ElseIf TopLeftRect.Contains(m_Point) Then

m.Result = CType(HTTOPLEFT, IntPtr)
Return

ElseIf TopRightRect.Contains(m_Point) Then

m.Result = CType(HTTOPRIGHT, IntPtr)
Return

ElseIf BottomRect.Contains(m_Point) Then

m.Result = CType(HTBOTTOM, IntPtr)
Return

ElseIf BottomLeftRect.Contains(m_Point) Then

m.Result = CType(HTBOTTOMLEFT, IntPtr)
Return

ElseIf BottomRightRect.Contains(m_Point) Then

m.Result = CType(HTBOTTOMRIGHT, IntPtr)
Return

End If

Exit Select

End Select

End If

MyBase.WndProc(m)


End Sub
طبعا ممكن التعامل مع Mouse Events واستخدامها أيضا في تحريك الفورم وتغيير أبعاده في أثناء التشغيل والأمر ببساطة ينحصر في اننا نحدد نقطة ما ونربطها بالماوس وعندما توجد هذه النقطة داخل أحد المستطيلات التي قمنا بتعريفها فان الفورم يتحرك أو تتغير أبعاده مثلا أيضا من الممكن رسم أي شئ وربطه بحركة الماوس مثل الباتون في اعلي يمين الفورم وهي Close و Maximize و Minimize

شئ أخير لمن يريد عمل Skin للفورم يمكنه مراجعة المقال المنشور تحت تطوير الكونترول Skin Control وتنفيذه مع الفورم سيحصل علي فورم له Skin

إضافة أخيرة يمكن أن تستخدم الوراثة وتقوم بعمل Inherits للفورم وهناك تقوم بعمل Overrides للكثير من الصفات و الطرق كما سبق وناقشنا ذلك تحت المقالات الخاصة بتطوير الكونترول بل أيضا يمكنك أن تبني Designer خاص بك للفورم ولكن الأمر يختلف قليلا عن الكونترول فالفورم عبارة عن حالة خاصة جدا من الكونترول وأرجو أن لا تنسوا دائما أن الفورم أصله كونترول

النسخة المستخدمة : الفيجوال استوديو 2008
اللغة المستخدمة: الفيجوال بيسك دوت نت
يمكنك إنزال الكود المرفق من الرابط التالي

http://vb4arb.com/vb/uploaded/18_01349449210.zip

أتمني لكم التوفيق
أخوكم عمر
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
مقال- تطوير الفورم رسم الفورم باستخدام +GDI وتحريكه Moving و تغيير أبعاده Resize - بواسطة Raggi Tech - 05-10-12, 07:00 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Rainbow [VB.NET] كلاس ResizeControls وطريقة جديد ومميزة لتكبير وتصغير ادوات الفورم تلقائيا الماجيك مسعد 9 10,542 19-07-25, 05:59 PM
آخر رد: Mostafa25
Video [درس فيديو] حل مشكلة تغيير مسار قاعدة البيانات مع تقارير كريستال ريبورت رمضان272 1 2,476 25-10-24, 04:53 AM
آخر رد: رمضان272
  حساب مكان الفورم علي شاشة الكمبيوتر silverlight 2 3,617 18-06-23, 03:26 PM
آخر رد: kebboud
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 3 6,341 30-07-21, 05:14 PM
آخر رد: kebboud
  مقال: الكومبو بوكس ComboBox كيف تضيف أيقونات Blue Sky 1 3,452 30-06-19, 10:41 AM
آخر رد: invocker
  [VB.NET] كود يجعل الفورم فى المقدمة دائماً [ بناءاً لطلب احد الاخوة وحتى سيتفاد منه الجميع ] elgokr 5 3,276 16-06-19, 08:32 AM
آخر رد: sendbad100
  اصنع محرر أكواد خاص بك باستخدام الأداة RichTextBox السكر المغرور 13 8,176 19-08-18, 09:27 AM
آخر رد: elgokr
  الفورم بخاصية none محمود صالح 1 2,274 30-12-17, 03:52 AM
آخر رد: طالب برمجة
  رسم الفورم و طباعته silverlight 1 2,667 19-06-17, 05:44 PM
آخر رد: silverlight
  [كود] تغيير دقة الشاشة Basil Abdallah 1 2,853 25-02-17, 05:39 AM
آخر رد: محمد محمود الغرياني

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم