تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مقال- تطوير الفورم رسم الفورم باستخدام +GDI وتحريكه Moving و تغيير أبعاده Resize
#1
كاتب الموضوع : silverlight

تطوير الفورم : كيفية رسم الفورم وتحريكه وتغيير أبعاده
اللغة المستخدمة: الفيجوال بيسك
التطبيق: فيجوال استوديو 2005 و 2008
المستوي: التقييم متروك للقارئ
إعداد: مهندس / عمر أمين إبراهيم

السبب الرئيسي لكتابة هذا الموضوع هو سؤال لأحد الأخوة في المنتدى عن كيفية رسم الفورم باستخدام +GDI

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

أفترض أن من سيقوم بتنفيذ الكود المكتوب تحت هذا المقال لدية خلفية مناسبة عن كيفية التعامل مع +GDI

أولا: لرسم الفورم نحتاج أن نقوم بتعريف بعض المستطيلات Rectangles وهذه المستطيلات نقوم برسمها باستخدام +GDI داخل الفورم وعملية الرسم تتم كلها داخل الحدث Paint الخاص بالفورم أو الأفضل أن يتم ذلك عن طريق عمل Overrides للحدث OnPaint الذي يخص الفورم ومن الممكن أن تتم عملية الرسم أيضا عن طريق عمل Overrides للحدث OnPaintBackGround و الكود التالي يعطي شكل الحدث لكل من هذه Events الأحداث

الحدث Paint يكون شكل الكود كالأتي


كود :
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

End Sub
الحدث OnPaint يكون شكل الكود كالأتي


كود :
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)

End Sub
الحدث OnPaintBackGround يكون شكل الكود كالأتي


كود :
Protected Overrides Sub OnPaintBackground(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaintBackground(e)

End Sub
ثانيا: نقوم بعمل Invalidate للمستطيلات المرسومة في الحدث Resize الذي يخص الفورم أو أيضا عن طريق عمل Overrides للحدث OnResize والهدف هنا من استخدام Invalidate من داخل هذا الحدث هو إجبار الفورم علي إعادة رسم نفسه مرة أخري طبقا للكود الموجود في الحدث Paint أو الحدث OnPaint

الحدث OnResize سيكون شكل الكود كالأتي


كود :
Protected Overrides Sub OnResize(ByVal e As System.EventArgs)
MyBase.OnResize(e)

End Sub
الحدث Resize سيكون شكل الكود كالأتي


كود :
Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize

End Sub
ثالثا: نقوم بعمل Overrides للحدث WndProc وهو الحدث المسئول عن Window Messages والتعامل معها وهذا الحدث وطبقا لتوصيات مايكروسوفت يجب أن نضيف إليه Security Permission Attribute كما موضح بالكود أدناه
الحدث WndProc سيكون شكل الكود كالأتي


كود :
<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)

MyBase.WndProc(m)

End Sub
طريقة رسم الفورم

طبعا نفتح مشروع جديد ونطلق عليه أي اسم نريد ثم نقوم بتغيير بعض Properties الصفات التي تخص الفورم في مرحلة التصميم أو مرحلة Design وهي كالأتي:

DoubleBuffered = True والهدف هنا هو تقليل Flicker أثناء عملية الرسم في الفورم بشكل عام
FormBorderSyle = None الهدف منها إلغاء Borders المعتادة
MinimumSise = (200, 200) والهدف كما تعلمون هو تحديد أقل أو أصغر أبعاد للفورم

طبعا ممكن تغيير هذه الصفات برمجيا أي بكتابتها مثلا داخل الحدث Load الخاص بالفورم
الأن لنذهب معا إلي منطقة الكود التي تخص الفورم

وسنري الكود بالشكل الأتي


كود :
Public Class Form1

End Class
الأن لنقوم بعمل Overrides للحدث OnPaint وهو يكتب يدويا أي أننا سنكتب Protected Overrides Sub وطبعا IntelliSense سيساعدنا أثناء عملية الكتابة وهنا من الممكن أن نختار الحدث الذي نريده وهو OnPaint

تحت هذا الحدث سوف نقوم بتعريف مجموعة من المستطيلات بحيث تكون أبعادها وخصوصا العرض Width و الارتفاع Height مرتبطين بصفة موجودة بالفورم وهي ClientSize.Width وأيضا ClientSize.Height

الأن نقوم بتعريف المستطيلات ثم نقوم برسمها داخل الفورم وهنا يمكننا أن نقوك بتعريف كل مستطيل علي حده وترسمه أو كما فعلت أنا بالمثال المرفق قمت بتغطية المستطيلات بأحد الألوان طبعا نستطيع أن نفعل الكثير هنا مثلا ممكن نستخدم LinearGradientBrushes أو SolidBrush أو PathGradienBrush ونستخدمها جميعها أو بعضها في تلوين المستطيلات

أيضا قمت برسم Text في وسط الفورم باستخدام ControlPaint Class وهذا الكلاس تحدثت عنه أيضا في أحد المقالات السابقة تحت عنوان الكلاس التائه بين +GDI & System Windows Form
طبعا من يحتاج أن يعطي أو يلون أو يبدع كما يريد يمكنه استخدام نفس الأفكار الموجودة تحت سلسلة المقالات الخاصة بتطوير الكونترول أو يفعل هو ما يريد إذا كان لدية الخبرة الكافية في استخدام +GDI

علي العموم لن أركز كثيرا علي طريقة الرسم نفسها لأنه وكما قلت من يقوم بتنفيذ هذا الكود يجب أن يكون لدية معلومات مناسبة عن كيفية التعامل مع +GDI

الكود الكامل للحدث OnPaint سيكون كالأتي


كود :
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
'
' First let us Draw the Background of the form
Dim winBounds As New Rectangle(0, 0, Me.Width, Me.Height)
Using brush As New System.Drawing.Drawing2D.LinearGradientBrush(winBounds, Color.LightCoral, Color.Red, 90, True)

e.Graphics.FillRectangle(brush, winBounds)

End Using

' Let us Paint the Other Rectangles
Dim NC_Rectangles As Rectangle() = {New Rectangle(5, 5, ClientSize.Width - 10, 24), _
New Rectangle(6, 0, ClientSize.Width - 12, 5), _
New Rectangle(0, 0, 6, 6), _
New Rectangle(ClientSize.Width - 6, 0, 6, 6), _
New Rectangle(0, 6, 5, ClientSize.Height - 12), _
New Rectangle(ClientSize.Width - 5, 6, 5, ClientSize.Height - 12), _
New Rectangle(6, ClientSize.Height - 5, ClientSize.Width - 12, 5), _
New Rectangle(0, ClientSize.Height - 6, 6, 6), _
New Rectangle(ClientSize.Width - 6, ClientSize.Height - 6, 6, 6)}

Using NC_Brush As New SolidBrush(Color.FromArgb(255, Color.DarkBlue))

e.Graphics.FillRectangles(NC_Brush, NC_Rectangles)

End Using


' Draw some Text too
Dim r As Rectangle = Me.ClientRectangle
Dim sf As New StringFormat
sf.Alignment = StringAlignment.Center
sf.LineAlignment = StringAlignment.Center

Dim DrawFont As New Font(Font.FontFamily, 40, FontStyle.Regular, GraphicsUnit.Pixel)
ControlPaint.DrawStringDisabled(e.Graphics, "Hello World", DrawFont, BackColor, RectangleF.op_Implicit(r), sf)

End Sub
الأن سنقوم بعمل Overrides للحدث OnResize وسنضيف له جملة واحدة فقط وهي Invalidate وسيكون الكود كالأتي


كود :
Protected Overrides Sub OnResize(ByVal e As System.EventArgs)
MyBase.OnResize(e)

Invalidate()

End Sub
الأن نأتي الي كيفية عمل Overrides للحدث WndProc وكما أسلفنا فهو الحدث المسئول Window Messages أو عن إرسال الرسائل المختلفة التي يتم إرسالها الي الفورم
ومن بعض هذه الرسائل مثلا

WM_NCHITTEST وهذه الرسالة تفسيرها Window Message Non Client Hit Test أي انها المسئولة عن ارسال ارسائل تخض Mouse Click علي الفورم وفي مناطق معينة

WM_NCMOUSEMOVE وهي عبارة عن Window Message Non Client Mouse Move وهي المسئولة عن حركة الماوس في منطقة Non Client وهي المنطقة المحددة بيمين ويسار الفورم و اسفل وأعلي الفورم والمنطقة التي بها Minimize و Maximize و Close باتون

WM_ACTIVATEAPP وهي عبارة عن Window Message Active Form وهي تقوم بتحديد حالة الفورم إذا كان Active أم لا
وهناك الكثير والكثير من الرسائل بعضها ولقد أضفت الي الملف المرفق ملف به تقريبا معظم هذه الثوابت التي تخص الفورم والكونترول المختلفة

مرحليا ما يهمنا الأن هو مجموعة من الرسائل Window Messages التي تختص بعملية تحريك الفورم Form Move وتكبير أو تصغير الفورم form Resize في مرحلة التشغيل تحديدا أو ما يطلق عليها Non Design Mode وجميعها تستخدم مع WM_NCHITTEST و هذه الرسائل تعريفها كالأتي

HTCAPTION وهي رسالة تحدد ماذا سوف يفعل الفورم عندما يتم الضغط بالماوس علي منطقة Caption وهي المنطقة التي توجد في أعلي الفورم ويتواجد بها Form.Text والأيقونة المخصصة للفورم وهي شريحة بعرض الفورم بالكامل

HTLEFT وهي تحدد حركة الماوس في يسار الفورم وهي المنطقة التي يقوم الماوس فيها بتكبير أو تصغير الفورم أفقيا من ناحية يسار الفورم

HTRIGHT وهي تحدد حركة الماوس في يمين الفورم وهي المنطقة التي يقوم الماوس فيها بتكبير أو تصغير الفورم أفقيا من ناحية يمين الفورم

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

HTBOTTOM وهي المنطقة السفلية من الفورم وفيها يقوم الماوس بتكبير الفورم رأسيا من ناحية أسفل الفورم

HTBOTTOMLEFT و HTBOTTOMRIGHT هما يعبران عن أقصي يسار ويمين الفورم من الناحية السفلية حيث يتم تصغير وتكبير الفورم بزاوية ميل 45 علي الفورم أي في الاتجاه Diagonal علي الفورم من أسفل نقطة في أقصي اليمين وأقصي اليسار

HTTOPLEFT و HTTOPRIGHT وهما يعبران عن أقصي يسار ويمين الفورم من الناحية العلوية حيث يتم تصغير وتكبير الفورم بزاوية ميل 45 علي الفورم أي في اتجاه Diagonal علي الفورم من أعلي نقطة في أقصي اليمين أو أقصي اليسار

عموما كل هذه الرسائل هي عبارة عن أرقام وتستخدم كثوابت في البرنامج وكل هذه الرسائل يمكن أن تجدها في ملف موجود في الويندوز اسمه window.h أو كما يطلق علي هذا النوع من الملفات Header Files وهي ملفات مكتوبة بلغة Pure C

الأن وقبل أن نقوم بعمل Overrides الي الحدث WndProc سنقوم بإضافة مجموعة من الثوابت الي الفورم كود وكل هذه الثوابت سوف نستخدمها في التعامل مع الفورم وهذه الثوابت ممكن إضافتها علي سبيل المثال كأنها Public Constants أو Friend Constantsوهذه الثوابت سيتم إضافتها الي في أول الفورم كالأتي


كود :
#Region "Constants"

' Define Hit Test Constants refer to "windows.h" header file
' Non Client Area Hit Test
Friend Const WM_NCHITTEST As Integer = &H84

' Hit Test in Caption Rectangle
Friend Const HTCAPTION As Integer = &H2

' Hit Test in Left Rectangle
Friend Const HTLEFT As Integer = &HA

' Hit Test in Right Rectangle
Friend Const HTRIGHT As Integer = &HB

' Hit Test in Top Rectangle
Friend Const HTTOP As Integer = &HC

' Hit Test in Top Left Rectangle
Friend Const HTTOPLEFT As Integer = &HD

' Hit Test in Top Right Rectangle
Friend Const HTTOPRIGHT As Integer = &HE

' Hit Test in Bottom Rectangle
Friend Const HTBOTTOM As Integer = &HF

' Hit Test in Bottom Left Rectangle
Friend Const HTBOTTOMLEFT As Integer = &H10

' Hit Test in Bottom right Rectangle
Friend Const HTBOTTOMRIGHT As Integer = &H11

#End Region
}}}
تم الشكر بواسطة:
#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

أتمني لكم التوفيق
أخوكم عمر
}}}
تم الشكر بواسطة:
#3
بالنسبة لمستخدمي نسخة الفيجوال استوديو 2005 يمكنهم فتح فورم وفي الفورم كود يمكنهم نسخ الكود الأتي ووضعه في الفورم رقم واحد
وسيحصلون علي نفس النتائج


كود :
'
'
' By Omar amin
' Greetings from Egypt
' e-mail (silverlight1212@yahoo.com)
'
'
Public Class Form1

#Region "Constants"

' Define Hit Test Constants refer to "windows.h" header file
' Non Client Area Hit Test
Friend Const WM_NCHITTEST As Integer = &H84

' Hit Test in Caption Rectangle
Friend Const HTCAPTION As Integer = &H2

' Hit Test in Left Rectangle
Friend Const HTLEFT As Integer = &HA

' Hit Test in Right Rectangle
Friend Const HTRIGHT As Integer = &HB

' Hit Test in Top Rectangle
Friend Const HTTOP As Integer = &HC

' Hit Test in Top Left Rectangle
Friend Const HTTOPLEFT As Integer = &HD

' Hit Test in Top Right Rectangle
Friend Const HTTOPRIGHT As Integer = &HE

' Hit Test in Bottom Rectangle
Friend Const HTBOTTOM As Integer = &HF

' Hit Test in Bottom Left Rectangle
Friend Const HTBOTTOMLEFT As Integer = &H10

' Hit Test in Bottom right Rectangle
Friend Const HTBOTTOMRIGHT As Integer = &H11

#End Region

#Region "Methods"

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
'
' First let us Draw the Background of the form
Dim winBounds As New Rectangle(0, 0, Me.Width, Me.Height)
Using brush As New System.Drawing.Drawing2D.LinearGradientBrush(winBounds, Color.LightCoral, Color.Red, 90, True)

e.Graphics.FillRectangle(brush, winBounds)

End Using

' Let us Paint the Other Rectangles
Dim NC_Rectangles As Rectangle() = {New Rectangle(5, 5, ClientSize.Width - 10, 24), _
New Rectangle(6, 0, ClientSize.Width - 12, 5), _
New Rectangle(0, 0, 6, 6), _
New Rectangle(ClientSize.Width - 6, 0, 6, 6), _
New Rectangle(0, 6, 5, ClientSize.Height - 12), _
New Rectangle(ClientSize.Width - 5, 6, 5, ClientSize.Height - 12), _
New Rectangle(6, ClientSize.Height - 5, ClientSize.Width - 12, 5), _
New Rectangle(0, ClientSize.Height - 6, 6, 6), _
New Rectangle(ClientSize.Width - 6, ClientSize.Height - 6, 6, 6)}

Using NC_Brush As New SolidBrush(Color.FromArgb(255, Color.DarkBlue))

e.Graphics.FillRectangles(NC_Brush, NC_Rectangles)

End Using


' Draw some Text too
Dim r As Rectangle = Me.ClientRectangle
Dim sf As New StringFormat
sf.Alignment = StringAlignment.Center
sf.LineAlignment = StringAlignment.Center

Dim DrawFont As New Font(Font.FontFamily, 40, FontStyle.Regular, GraphicsUnit.Pixel)
ControlPaint.DrawStringDisabled(e.Graphics, "Hello World", DrawFont, BackColor, RectangleF.op_Implicit(r), sf)

End Sub

Protected Overrides Sub OnResize(ByVal e As System.EventArgs)
MyBase.OnResize(e)

Invalidate()

End Sub

<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


#End Region



End Class



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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  حساب مكان الفورم علي شاشة الكمبيوتر silverlight 2 3,158 18-06-23, 03:26 PM
آخر رد: kebboud
Video [درس فيديو] حل مشكلة تغيير مسار قاعدة البيانات مع تقارير كريستال ريبورت رمضان272 0 1,680 23-04-22, 05:56 AM
آخر رد: رمضان272
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 3 5,856 30-07-21, 05:14 PM
آخر رد: kebboud
  مقال: الكومبو بوكس ComboBox كيف تضيف أيقونات Blue Sky 1 3,158 30-06-19, 10:41 AM
آخر رد: invocker
  [VB.NET] كود يجعل الفورم فى المقدمة دائماً [ بناءاً لطلب احد الاخوة وحتى سيتفاد منه الجميع ] elgokr 5 2,900 16-06-19, 08:32 AM
آخر رد: sendbad100
Rainbow [VB.NET] كلاس ResizeControls وطريقة جديد ومميزة لتكبير وتصغير ادوات الفورم تلقائيا الماجيك مسعد 8 8,730 01-10-18, 03:03 AM
آخر رد: LEO
  اصنع محرر أكواد خاص بك باستخدام الأداة RichTextBox السكر المغرور 13 7,504 19-08-18, 09:27 AM
آخر رد: elgokr
  الفورم بخاصية none محمود صالح 1 2,048 30-12-17, 03:52 AM
آخر رد: طالب برمجة
  رسم الفورم و طباعته silverlight 1 2,398 19-06-17, 05:44 PM
آخر رد: silverlight
  [كود] تغيير دقة الشاشة Basil Abdallah 1 2,636 25-02-17, 05:39 AM
آخر رد: محمد محمود الغرياني

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


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