تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيف تتحكم في أبعاد الفورم بإستخدام الماوس
#1
كاتب الموضوع : silverlight

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


كود :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None

End Sub
كيف نفعل ذلك ؟

الكود التالي يوضح كيفية عمل ذلك باستخدام بعض دوال API التي هي معروفة للجميع تقريبا
والفكرة ببساطة تعتمد علي إستخدام الدالتان SendMessage و ReleaseCapture بالإضافة الي بعض الثوابت Constants التي يعتمد عليها نظام التشغيل والتي يتم إرسالها الي الفورم من داخل أحداث الماوس مع الوضع في الاعتبار تغيير شكل Cusor طبقا لمكان الماوس علي الفورم

والمثال التالي يوضح الفكرة

ولتنفيذ المثال افتح فورم ثم أكتب الكود بالشكل التالي


كود :
Imports System.Runtime.InteropServices

Public Class Form1

Private rect As Rectangle
Private m_mode As Modes = Modes.None

#Region " Enum & Constants "

Private Const WM_SYSCOMMAND As Integer = &H112
Private Const SC_DRAGMOVE As Integer = &HF012
Private Const SC_DRAGSIZE_N As Integer = &HF003
Private Const SC_DRAGSIZE_S As Integer = &HF006
Private Const SC_DRAGSIZE_E As Integer = &HF002
Private Const SC_DRAGSIZE_W As Integer = &HF001
Private Const SC_DRAGSIZE_NW As Integer = &HF004
Private Const SC_DRAGSIZE_NE As Integer = &HF005
Private Const SC_DRAGSIZE_SW As Integer = &HF007
Private Const SC_DRAGSIZE_SE As Integer = &HF008

Private Enum Modes

None
Bottom
BottomLeft
BottomRight
Left
Right
Top
TopLeft
TopRight

End Enum

#End Region

#Region " Methods "

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None

End Sub

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
Dim rect As New Rectangle(0, 0, Me.Width, 29)

Using lgb As New Drawing2D.LinearGradientBrush(rect, Color.Cyan, Color.Blue, 90, True)

e.Graphics.FillRectangle(lgb, rect)

lgb.Dispose()

End Using

End Sub

Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
'MyBase.OnMouseDown(e)

Dim hwnd As IntPtr = Me.Handle

Select Case m_mode

Case Modes.Bottom
NativeAPI.ReleaseCapture(hwnd)
NativeAPI.SendMessage(hwnd, WM_SYSCOMMAND, SC_DRAGSIZE_S, 0)
Exit Select

Case Modes.Right
NativeAPI.ReleaseCapture(hwnd)
NativeAPI.SendMessage(hwnd, WM_SYSCOMMAND, SC_DRAGSIZE_E, 0)
Exit Select

Case Modes.BottomRight
NativeAPI.ReleaseCapture(hwnd)
NativeAPI.SendMessage(hwnd, WM_SYSCOMMAND, SC_DRAGSIZE_SE, 0)
Exit Select

Case Modes.TopRight
NativeAPI.ReleaseCapture(hwnd)
NativeAPI.SendMessage(hwnd, WM_SYSCOMMAND, SC_DRAGSIZE_NE, 0)
Exit Select

Case Modes.Top
NativeAPI.ReleaseCapture(hwnd)
NativeAPI.SendMessage(hwnd, WM_SYSCOMMAND, SC_DRAGSIZE_N, 0)
Exit Select

Case Modes.TopLeft
NativeAPI.ReleaseCapture(hwnd)
NativeAPI.SendMessage(hwnd, WM_SYSCOMMAND, SC_DRAGSIZE_NW, 0)
Exit Select
Case Modes.Left
NativeAPI.ReleaseCapture(hwnd)
NativeAPI.SendMessage(hwnd, WM_SYSCOMMAND, SC_DRAGSIZE_W, 0)
Exit Select

Case Modes.BottomLeft
NativeAPI.ReleaseCapture(hwnd)
NativeAPI.SendMessage(hwnd, WM_SYSCOMMAND, SC_DRAGSIZE_SW, 0)
Exit Select

Case Modes.None
NativeAPI.ReleaseCapture(hwnd)
NativeAPI.SendMessage(hwnd, WM_SYSCOMMAND, SC_DRAGMOVE, 0)
Exit Select

End Select

End Sub

Protected Overrides Sub OnMouseLeave(ByVal e As System.EventArgs)
MyBase.OnMouseLeave(e)
Me.Cursor = Cursors.[Default]
End Sub

Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseMove(e)

If (e.X < 5) AndAlso (e.Y < 5) Then
Me.Cursor = Cursors.SizeNWSE
m_mode = Modes.TopLeft

ElseIf (e.X < 5) AndAlso Math.Abs(e.Y - Me.ClientSize.Height) < 5 Then
Me.Cursor = Cursors.SizeNESW
m_mode = Modes.BottomLeft

ElseIf e.X < 5 Then
Me.Cursor = Cursors.SizeWE
m_mode = Modes.Left

ElseIf Math.Abs(e.X - Me.Width) < 5 AndAlso (e.Y < 5) Then
Me.Cursor = Cursors.SizeNESW
m_mode = Modes.TopRight

ElseIf Math.Abs(e.X - Me.Width) < 5 AndAlso Math.Abs(e.Y - Me.ClientSize.Height) < 5 Then
Me.Cursor = Cursors.SizeNWSE
m_mode = Modes.BottomRight

ElseIf Math.Abs(e.X - Me.Width) < 5 Then
Me.Cursor = Cursors.SizeWE
m_mode = Modes.Right

ElseIf Math.Abs(e.Y - Me.ClientSize.Height) < 5 Then
Me.Cursor = Cursors.SizeNS
m_mode = Modes.Bottom

ElseIf e.Y < 5 Then
Me.Cursor = Cursors.SizeNS
m_mode = Modes.Top

Else

Me.Cursor = Cursors.Default
m_mode = Modes.None

End If
End Sub

#End Region

#Region " Internal Class "

Private Class NativeAPI

<DllImport("USER32.DLL", EntryPoint:="SendMessage")> _
Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As Integer, ByRef lParam As Integer) As Integer
End Function

<DllImport("USER32.DLL")> _
Public Shared Function ReleaseCapture(ByVal hwnd As IntPtr) As Integer
End Function

End Class

#End Region

End Class

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Star [مقال] كيفية تحويل اسعار العملات بإستخدام Yahoo Exchange Rates Web Service Programmation 8 2,493 26-08-16, 10:21 AM
آخر رد: tryold
  من المنتدى القديم - تحريك الفورم من اي مكان ( للاخ omar2205 ) المبرمج علي نوري 2 741 16-08-15, 05:09 PM
آخر رد: otman_bel
  إيجاد جميع الكونترول الموجودة في الفورم Recursively Find All Controls in Form silverlight 0 512 26-05-15, 12:31 AM
آخر رد: silverlight
  طريقة تغيير الوان الفورم من ListView 3booody 4 1,339 19-08-13, 05:01 PM
آخر رد: 3booody
  طريقة من أجمل الطرق لجعل الفورم على شكل صورة عندك أسامة أحمد 63 7,430 12-05-13, 10:39 PM
آخر رد: APP
  خطوات بسيطه لجعل الفورم على شكل صورة معينه و بشكل اكثر احترافية - بدون أدوات خارجية السكر المغرور 4 1,729 08-05-13, 01:20 AM
آخر رد: السكر المغرور
  غير شكل الفورم مع الــ gdi+ RaggiTech 0 668 06-10-12, 12:53 AM
آخر رد: RaggiTech
  مقال- تطوير الفورم رسم الفورم باستخدام +GDI وتحريكه Moving و تغيير أبعاده Resize RaggiTech 2 891 05-10-12, 07:00 PM
آخر رد: RaggiTech
  كيف تجعل كل شئ مستديرا داخل الفورم RaggiTech 0 710 05-10-12, 03:11 PM
آخر رد: RaggiTech
  نبضه 1 - إضافه الاداوات علي الفورم بالاكواد RaggiTech 0 336 05-10-12, 04:12 AM
آخر رد: RaggiTech

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


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