05-10-12, 07:00 PM
الأن وتحت الحدث WndProc نقوم بإضافة شرط أنه سيتم تنفيذه هذه الرسائل Messages في مرحلة التشغيل فقط ويتم ذلك عن طريق DesignMode Property ثم نقوم بتحديد أو تعريف نقطة Point وهذه النقطة ستعبر عن مكان الماوس في المستطيلات التي قمنا بتعريفها في الحدث OnPaint وهذه المستطيلات سنقوم بتعريفها ثانية في هذا الحدث طبعا من الممكن تقليل حجم الكود عن طريق تعريف هذه المستطيلات مرة واحدة باستخدام Structure مثلا ولكني قمت بتعريفها ثانية بغرض توضيح الأمر للقارئ ليس إلا بعد ذلك وباستخدام Select Case سوف نحدد Window Message ونضع بعض الجمل الشرطية باستخدام If ….End If للحصول علي نتائج الحدث في حالاته المختلفة والكود التالي يوضح شكل الكود
طبعا ممكن التعامل مع Mouse Events واستخدامها أيضا في تحريك الفورم وتغيير أبعاده في أثناء التشغيل والأمر ببساطة ينحصر في اننا نحدد نقطة ما ونربطها بالماوس وعندما توجد هذه النقطة داخل أحد المستطيلات التي قمنا بتعريفها فان الفورم يتحرك أو تتغير أبعاده مثلا أيضا من الممكن رسم أي شئ وربطه بحركة الماوس مثل الباتون في اعلي يمين الفورم وهي Close و Maximize و Minimize
شئ أخير لمن يريد عمل Skin للفورم يمكنه مراجعة المقال المنشور تحت تطوير الكونترول Skin Control وتنفيذه مع الفورم سيحصل علي فورم له Skin
إضافة أخيرة يمكن أن تستخدم الوراثة وتقوم بعمل Inherits للفورم وهناك تقوم بعمل Overrides للكثير من الصفات و الطرق كما سبق وناقشنا ذلك تحت المقالات الخاصة بتطوير الكونترول بل أيضا يمكنك أن تبني Designer خاص بك للفورم ولكن الأمر يختلف قليلا عن الكونترول فالفورم عبارة عن حالة خاصة جدا من الكونترول وأرجو أن لا تنسوا دائما أن الفورم أصله كونترول
النسخة المستخدمة : الفيجوال استوديو 2008
اللغة المستخدمة: الفيجوال بيسك دوت نت
يمكنك إنزال الكود المرفق من الرابط التالي
http://vb4arb.com/vb/uploaded/18_01349449210.zip
أتمني لكم التوفيق
أخوكم عمر
كود :
<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شئ أخير لمن يريد عمل Skin للفورم يمكنه مراجعة المقال المنشور تحت تطوير الكونترول Skin Control وتنفيذه مع الفورم سيحصل علي فورم له Skin
إضافة أخيرة يمكن أن تستخدم الوراثة وتقوم بعمل Inherits للفورم وهناك تقوم بعمل Overrides للكثير من الصفات و الطرق كما سبق وناقشنا ذلك تحت المقالات الخاصة بتطوير الكونترول بل أيضا يمكنك أن تبني Designer خاص بك للفورم ولكن الأمر يختلف قليلا عن الكونترول فالفورم عبارة عن حالة خاصة جدا من الكونترول وأرجو أن لا تنسوا دائما أن الفورم أصله كونترول
النسخة المستخدمة : الفيجوال استوديو 2008
اللغة المستخدمة: الفيجوال بيسك دوت نت
يمكنك إنزال الكود المرفق من الرابط التالي
http://vb4arb.com/vb/uploaded/18_01349449210.zip
أتمني لكم التوفيق
أخوكم عمر
