تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
SoftWare Screen Resolution
#3
الجزء الأول

هناك مجموعة من الدوال من النوع Shared و التي تم توزيعها علي بعض الكلاسات في الدوت نت وجميع هذه الدوال تشترك في شئ واحد ألا وهو إن مررت لها  IntPtr أو Handle الخاص بالفورم او بالكونترول بشكل صحيح هنا سوف تحصل علي بعض المعلومات الهامة  التي يمكن الاستفادة منها بأشكال عديدة.

وهذه الدوال كالتالي:
1- Control.FromHandle
و هي دالة حين تمرر لها IntPtr أو Handle الخاص بأي كونترول هنا سوف تحصل علي الكونترول الذي يمتلك هذا IntPtr او Handle
2- Screen.FromHandle
وهي دالة حين تمرر لها IntPtr أو Handle الخاص بأي كونترول هنا سوف تحصل علي Screen التي يوجد بها هذا الكونترول
3- NativeWindow.FromHandle
وهي أيضا دالة حين تمرر لها IntPtr أو Handle الخاص بأي كونترول هنا سوف تحصل علي NativeWindow المتصلة بهذا الكونترول

بشكل عام جميع هذه الدوال موجودة في فضاء الاسماء   System.Windows.Forms
ولكنها موزعة علي ثلاثة كلاسات هي الكلاس Control و الكلاس Screen و الكلاس NativeWindow

للأسف موقع مايكروسوفت لم يعطي أمثلة توضح كيفية استخدام الدوال أعلاه
لذلك المثال التالي سيوضح كيفية التعامل مع هذه الدوال
وهنا انا استخدم Handle الخاص بالفورم مع جميع الأكواد أدناه
ولتحاول عزيزي القارئ أن تضع باتون علي الفورم و تستخدم Handle الخاص بهذا الباتون بدلا من الفورم و لتري ماذا سيحدث معك

1- الكود التالي يوضح كيفية الحصول علي أي كونترول من Handle الخاص به
يمكن  كتابة الكود بالشكل التالي:
PHP كود :
Dim hwnd As IntPtr Me.Handle
Dim f 
As Form TryCast(Control.FromHandle(hwnd), Form
2- الكود التالي يوضح كيفية الحصول علي Screen التي تحتوي الكونترول او الفورم
PHP كود :
Dim hwnd As IntPtr Me.Handle
Dim scr 
As Screen TryCast(Screen.FromHandle(hwnd), Screen
 3- وبالمثل الكود التالي يوضح كيفية الحصول علي NativeWindow المرتبطة بأي كونترول
PHP كود :
Dim hwnd As IntPtr Me.Handle
Dim f 
As Form TryCast(Control.FromHandle(hwnd), Form
4- الكودالتالي يوضح كيفية الحصول علي الفورم عن طريق تمرير Handle الخاص به الي مصفوفة Application.OpenForms
فقط تأكد ان تمرر Index الخاص بالفورم بشكل صحيح

PHP كود :
Dim hwnd As IntPtr Me.Handle
Dim anyOpenform 
As Form TryCast(Control.FromHandle(Application.OpenForms(0).Handle), Form

أعتقد أنه و بعد الحصول علي Form او الكونترول أو Screen او NativeWindow بهذا الاسلوب سيكون الأمر يسيرا علي القارئ لكي يتعامل مع هذه المتغيرات كما يحلو له وذلك بهدف الحصول علي معلومات اضافية من كل متغير

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

و الكود التالي يوضح شكل هذا الكلاس و لقد كتبته علي هيئة Structure
والأمر متروك للقاري لكي يطور الكلاس و يضيف له بعض السمات الإضافية طبقا لرؤية القارئ


PHP كود :
Public Structure WindowPointer
    Private _handle 
As IntPtr

    Public Sub 
New(handle As IntPtr)
 
       _handle handle
    End Sub

    Public ReadOnly Property Handle 
As IntPtr
        Get
            Return _handle
        End Get
    End Property

    Public 
Function FindWindow() As System.Windows.Forms.Form
        If _handle 
<> IntPtr.Zero Then
            Return FindWindow
(_handle)
 
       End If
 
       Return Nothing
    End 
Function

 
   Public Function FindScreen() As System.Windows.Forms.Screen
        If _handle 
<> IntPtr.Zero Then
            Return FindScreen
(_handle)
 
       End If
 
       Return Nothing
    End 
Function

 
   Private Function FindWindow(hwnd As IntPtr) As System.Windows.Forms.Form
        Return 
(Function()
 
                   Return TryCast(System.Windows.Forms.Control.FromHandle(hwnd), System.Windows.Forms.Form)
 
               End Function)()
 
   End Function

 
   Private Function FindScreen(hwnd As IntPtr) As System.Windows.Forms.Screen
        Return TryCast
(System.Windows.Forms.Screen.FromHandle(hwnd), System.Windows.Forms.Screen)
 
   End Function

End Structure 

الكود التالي يوضح كيف تستخدم الكلاس كبديلا عن الأمثلة التي كتبنا أكوادها أعلاه
PHP كود :
       Dim hwnd As IntPtr Me.Handle
        Dim wp 
As WindowPointer = New WindowPointer(hwnd)

 
       Dim scr As Screen wp.FindScreen()
 
       Dim f As Form wp.FindWindow()

 
       Me.Text f.Name " -" "Test"

 
       Dim screenBounds As Rectangle scr.Bounds
        Dim scrWorkingAre 
As Rectangle scr.WorkingArea 

لمزيد من التفاصيل يمكن للقارئ الإطلاع علي الروابط  الروابط التالية
Control.FromHandle 
Screen.FromHandle
NativeWindow.FromHandle
IntPtr Structure
الرد }}}
تم الشكر بواسطة: ابو ليلى , محمد كريّم


الردود في هذا الموضوع
SoftWare Screen Resolution - بواسطة silverlight - 13-04-17, 08:32 PM
RE: SoftWare Screen Resolution - بواسطة sendbad100 - 13-04-17, 09:22 PM
RE: SoftWare Screen Resolution - بواسطة silverlight - 14-04-17, 03:34 AM
RE: SoftWare Screen Resolution - بواسطة silverlight - 14-04-17, 09:01 PM
RE: SoftWare Screen Resolution - بواسطة silverlight - 15-04-17, 12:18 AM
RE: SoftWare Screen Resolution - بواسطة HASAN6.0 - 20-06-18, 10:14 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  Detect Display Screen DPI silverlight 2 3,257 11-06-16, 12:07 PM
آخر رد: Sajad
  Introduction To Screen Capture silverlight 2 3,318 09-10-15, 05:22 PM
آخر رد: silverlight
  معلومة ::: How to resize Windows form to fit Windows screen ::: RaggiTech 0 2,284 06-10-12, 09:53 PM
آخر رد: RaggiTech
  درس- كيفية عمل شاشة البدء splash Screen RaggiTech 0 4,772 05-10-12, 10:36 AM
آخر رد: RaggiTech
  مثال Screen Server RaggiTech 0 2,357 05-10-12, 01:13 AM
آخر رد: RaggiTech
  إعمل Splash Screen في دقيقة! RaggiTech 0 2,401 02-10-12, 01:01 AM
آخر رد: RaggiTech
  MultiPoint Software Development RaggiTech 1 2,177 01-10-12, 06:11 PM
آخر رد: RaggiTech

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


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