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

الدالة


PHP كود :
   Private Function TryGetWindowRect(ByRef rect) As Boolean
        If rect 
<> Rectangle.Empty Then
            Dim screenRect 
As Rectangle Nothing
            Dim allScreens 
As Screen() = Screen.AllScreens
            For i 
As Integer 0 To allScreens.Length 1
                Dim scr 
As Screen allScreens(i)
 
               screenRect Rectangle.Union(screenRectscr.Bounds)
 
           Next
            Dim ht 
As Integer screenRect.Height
            Dim w 
As Integer screenRect.Width
            Dim x 
As Integer screenRect.X
            Dim y 
As Integer screenRect.Y

            Dim topleft 
As Point = New Point(Math.Max(rect.Leftx), Math.Max(rect.Topy))
 
           Dim bottomRight As Point = New Point(Math.Min(rect.Rightw), Math.Min(rect.Bottomht))
 
           rect.Location topleft
            rect
.Height Math.Abs(bottomRight.rect.Top)
 
           rect.Width Math.Abs(bottomRight.rect.Left)
 
           Return True
        End 
If
 
       rect Rectangle.Empty
 
       Return False
    End 
Function 

الدالة لها استخدامات كثيرة و الأمر متروك لكم

مثال توضيحي
المثال يوضح كيفية الحصول علي مكان الفورم و عرض قيمته علي شكل String في Label
وذلك عندما ياغير مكان الفور او عندما تتغير أبعاد الفورم

PHP كود :
Public Class Form1

    Private 
Function TryGetWindowRect(ByRef rect) As Boolean
        If rect 
<> Rectangle.Empty Then
            Dim screenRect 
As Rectangle Nothing
            Dim allScreens 
As Screen() = Screen.AllScreens
            For i 
As Integer 0 To allScreens.Length 1
                Dim scr 
As Screen allScreens(i)
 
               screenRect Rectangle.Union(screenRectscr.Bounds)
 
           Next
            Dim ht 
As Integer screenRect.Height
            Dim w 
As Integer screenRect.Width
            Dim x 
As Integer screenRect.X
            Dim y 
As Integer screenRect.Y

            Dim topleft 
As Point = New Point(Math.Max(rect.Leftx), Math.Max(rect.Topy))
 
           Dim bottomRight As Point = New Point(Math.Min(rect.Rightw), Math.Min(rect.Bottomht))
 
           rect.Location topleft
            rect
.Height Math.Abs(bottomRight.rect.Top)
 
           rect.Width Math.Abs(bottomRight.rect.Left)
 
           Return True
        End 
If
 
       rect Rectangle.Empty
 
       Return False
    End 
Function


 
   Private Sub Form1_LocationChanged(sender As ObjectAs EventArgsHandles MyBase.LocationChanged
        Dim r 
As Rectangle Me.Bounds
        If TryGetWindowRect
(rThen
            Label1
.Text r.ToString
        End 
If
 
   End Sub

    Private Sub Form1_SizeChanged
(sender As ObjectAs EventArgsHandles MyBase.SizeChanged
        Dim r 
As Rectangle Me.Bounds
        If TryGetWindowRect
(rThen
            Label1
.Text r.ToString
        End 
If
 
   End Sub
End 
Class 
أيضا الدالة يمكن إعادة صياغتها بالشكل التالي

PHP كود :
   Private Function BoundsToScreen(ByRef rect) As Rectangle
        Dim screenRect 
As Rectangle Nothing
        Dim allScreens 
As Screen() = Screen.AllScreens
        For i 
As Integer 0 To allScreens.Length 1
            Dim scr 
As Screen allScreens(i)
 
           screenRect Rectangle.Union(screenRectscr.Bounds)
 
       Next
        Dim ht 
As Integer screenRect.Height
        Dim w 
As Integer screenRect.Width
        Dim x 
As Integer screenRect.X
        Dim y 
As Integer screenRect.Y

        Dim topleft 
As Point = New Point(Math.Max(rect.Leftx), Math.Max(rect.Topy))
 
       Dim bottomRight As Point = New Point(Math.Min(rect.Rightw), Math.Min(rect.Bottomht))
 
       rect.Location topleft
        rect
.Height Math.Abs(bottomRight.rect.Top)
 
       rect.Width Math.Abs(bottomRight.rect.Left)
 
       Return rect
    End 
Function 

الإستخدام مع الفورم


PHP كود :
Dim windowBounds As Rectangle BoundsToScreen(Me.Bounds

أتمني ان يكون الكود مفيدا للبعض منكم
تقبلوا تحياتي

مثال أخر

افتح مشروع 
أضف للمشروع فورم ثاني

و في الفورم الأول اكتب الكود بالشكل التالي


PHP كود :
Public Class Form1

    Private seconfForm 
As Form = New Form2

    Private 
Function TryGetWindowRect(ByRef rect) As Boolean
        If rect 
<> Rectangle.Empty Then
            Dim screenRect 
As Rectangle Nothing
            Dim allScreens 
As Screen() = Screen.AllScreens
            For i 
As Integer 0 To allScreens.Length 1
                Dim scr 
As Screen allScreens(i)
 
               screenRect Rectangle.Union(screenRectscr.Bounds)
 
           Next
            Dim ht 
As Integer screenRect.Height
            Dim w 
As Integer screenRect.Width
            Dim x 
As Integer screenRect.X
            Dim y 
As Integer screenRect.Y

            Dim topleft 
As Point = New Point(Math.Max(rect.Leftx), Math.Max(rect.Topy))
 
           Dim bottomRight As Point = New Point(Math.Min(rect.Rightw), Math.Min(rect.Bottomht))
 
           rect.Location topleft
            rect
.Height Math.Abs(bottomRight.rect.Top)
 
           rect.Width Math.Abs(bottomRight.rect.Left)
 
           Return True
        End 
If
 
       rect Rectangle.Empty
 
       Return False
    End 
Function

 
   Private Sub Form1_LocationChanged(sender As ObjectAs EventArgsHandles MyBase.LocationChanged
        Dim windowBounds 
As Rectangle BoundsToScreen(Me.Bounds)
 
       Dim pt As Point = New Point(windowBounds.Left windowBounds.WidthwindowBounds.Top)
 
       If seconfForm IsNot Nothing Then
            seconfForm
.Location pt
            seconfForm
.Bounds = New Rectangle(pt, New Size(windowBounds.Size.Width 8windowBounds.Size.Height 8))

 
       End If
 
   End Sub

    Private Sub Form1_SizeChanged
(sender As ObjectAs EventArgsHandles MyBase.SizeChanged
        Dim windowBounds 
As Rectangle BoundsToScreen(Me.Bounds)
 
       Dim pt As Point = New Point(windowBounds.Left windowBounds.WidthwindowBounds.Top)
 
       If seconfForm IsNot Nothing Then
            seconfForm
.Location pt
            seconfForm
.Bounds = New Rectangle(pt, New Size(windowBounds.Size.Width 8windowBounds.Size.Height 8))
 
       End If
 
   End Sub

    Private Sub Form1_Load
(sender As ObjectAs EventArgsHandles MyBase.Load
        seconfForm
.FormBorderStyle FormBorderStyle.None
        seconfForm
.Show()
 
       Dim windowBounds As Rectangle BoundsToScreen(Me.Bounds)

 
       Dim pt As Point = New Point(windowBounds.Left windowBounds.WidthwindowBounds.Top)
 
       If seconfForm IsNot Nothing Then
            seconfForm
.Location pt
            seconfForm
.Bounds = New Rectangle(pt, New Size(windowBounds.Size.Width 8windowBounds.Size.Height 8))
 
       End If
 
   End Sub

    Private 
Function BoundsToScreen(ByRef rect) As Rectangle
        Dim screenRect 
As Rectangle Nothing
        Dim allScreens 
As Screen() = Screen.AllScreens
        For i 
As Integer 0 To allScreens.Length 1
            Dim scr 
As Screen allScreens(i)
 
           screenRect Rectangle.Union(screenRectscr.Bounds)
 
       Next
        Dim ht 
As Integer screenRect.Height
        Dim w 
As Integer screenRect.Width
        Dim x 
As Integer screenRect.X
        Dim y 
As Integer screenRect.Y

        Dim topleft 
As Point = New Point(Math.Max(rect.Leftx), Math.Max(rect.Topy))
 
       Dim bottomRight As Point = New Point(Math.Min(rect.Rightw), Math.Min(rect.Bottomht))
 
       rect.Location topleft
        rect
.Height Math.Abs(bottomRight.rect.Top)
 
       rect.Width Math.Abs(bottomRight.rect.Left)
 
       Return rect
    End 
Function

End Class 


ملحوظة اخيرة الحسابات قد تحتلف طبقا لنسخة الويندوز
لأن الفورم يرسم نفسه علي شاشة الكمبيوتر بأساليب مختلفة حسب نسخة الويندوز نفسه
Retired
الرد }}}
تم الشكر بواسطة: sendbad100 , الوايلي , tryold , asmarsou
#2
يعطيك العافية شرح رائع بإنتظار المزيد
الرد }}}
تم الشكر بواسطة:
#3
فيه الكثير من الأخطاء


    Heart ربي زدني علما  Heart

الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Rainbow [VB.NET] كلاس ResizeControls وطريقة جديد ومميزة لتكبير وتصغير ادوات الفورم تلقائيا الماجيك مسعد 9 10,527 19-07-25, 05:59 PM
آخر رد: Mostafa25
  طريقة إضافة اختصار للصنف في شاشة المبيعات ملهمـ 5 6,412 14-07-20, 12:24 PM
آخر رد: ابراهيم ايبو
  شرح طريقة حساب الكمية والبيع بأكثر من وحدة ملهمـ 7 6,373 30-08-19, 03:38 AM
آخر رد: atefkhalf2004
  [VB.NET] كود يجعل الفورم فى المقدمة دائماً [ بناءاً لطلب احد الاخوة وحتى سيتفاد منه الجميع ] elgokr 5 3,264 16-06-19, 08:32 AM
آخر رد: sendbad100
  حساب قيمة معادلة(اقصد صيغة دون مجاهيل) مكتوبة بالتكست : الجزء الخامس والاخير محمد شريقي 4 4,822 23-02-18, 10:44 PM
آخر رد: العواد الصغير
  الفورم بخاصية none محمود صالح 1 2,270 30-12-17, 03:52 AM
آخر رد: طالب برمجة
  درس: كيفية حساب عدد الأسطر في نص المبرمج الطموح vb6 5 7,856 26-12-17, 09:46 PM
آخر رد: abo.alaa315
  رسم الفورم و طباعته silverlight 1 2,662 19-06-17, 05:44 PM
آخر رد: silverlight
Tongue تصوير شاشة الحاسوب بطريقة مميزة بسطرين فقط ! Basil Abdallah 5 3,513 05-01-17, 05:26 PM
آخر رد: Basil Abdallah
  تصوير شاشة الكمبيوتر في سطور قليلة و بسرعة silverlight 9 4,668 30-12-16, 10:22 PM
آخر رد: ابو روضة

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


يقوم بقرائة الموضوع: