![]() |
|
SoftWare Screen Resolution - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : SoftWare Screen Resolution (/showthread.php?tid=19996) |
SoftWare Screen Resolution - silverlight - 13-04-17 بسم الله الرحمن الرحيم مقدمـــــــة : هذا الموضوع أكتبه إكراما لرجل لما أقابله في الدنيا و عسي الله أن يجمعنا به جميعا في جنات النعيم و الموضوع بمثابة صدقة جارية علي روح هذا الرجل لذلك أدعوكم جميعا أن تقرأو له الفاتحة و تترحموا عليه و تدعو له بالرحمة هذا الرجل هو المغفور له أبوليث رحمة الله عليه الهدف : الهدف من هذا الموضوع هو توضيح كيفية حساب Resolution الخاصة بشاشة الكمبييوتر ثم استخدام تلك الحسابات في ضبط أبعاد الفورم و أيضا ضبط أبعاد كل شئ موجود علي الفورم مثل الكونترول و الصور و الفونت ليتناسب مع أبعاد شاشة الكمبيوتر هذا الموضوع يصلح للإستخدام مع كل من الويندوز فورم و أيضا ربما يصلح للإستخدام مع WPF أولا عزيزي القارئ عليك ان تعلم أن كل شئ يظهر علي شاشة الكمبيوتر يتأثر كليا بشاشة الكمبيوتر و السبب في ذلك هو أن كل شئ علي سطح الكمبيوتر عبارة عن مجموعة من الرسومات التي تم رسمها علي سطح شاشة الكمبيوتر والقائمة التالية تحتوي علي الأشياء التي تتأثر بشاشة الكمبيوتر 1- الفونت - Font 2- الابعاد , والمقصد هنا Size و SizeF و RectangleF و Rectangle 3- أماكن الصور و الكونترول و ما شابه - و المقصد هنا Point و PointF 4- الصور - Images أو Icons او Bitmap 5- الفورم - Form 6- الكونترول - Control مثل PictureBox او ListBox او أشياء من هذا القبيل بنظرة سريعة علي القائمة أعلاه ستجد أن جميع هذه الأشياء لها صلة وثيقة و مرتبطة مع بعضها البعض تماما توضيح : 1- في هذا الموضوع سوف أعتمد بشكل رئيسي و تام علي IntPtr ليكون بمثابة الرابط بين جميع العناصر الموجودة في القائمة أعلاه وكمثال علي ذلك سوف أستخدم IntPtr للحصول علي بيانات عن الفورم و أيضا للحصول علي عدد و كمية و نوعية الكونترول الموجودة علي الفورم. أيضا سوف أستخدم IntPtr للحصول علي معلومات عن شاشة الكمبيوتر Screen Class و أيضا NativeWindow Class 2- هذا الموضوع عبارة عن تجميع لمجموعة من الموضوعات كنت قد كتبتها علي مراحل متفرقة ولكن مع بعض التعديلات و الإضافات وهذه الموضوعات ستجدونها في قسم المقالات هنا بالموقع 3- سوف أحاول جاهدا و بقدر الإمكان أن اضع جميع الروابط لأي مصادر قد تفيدكم لتوضيح الموضوع بشكل افضل 4- سوف أحاول أن أضع الكثير من الأمثلة لتوضيح الفكرة 5- هذا الموضوع سيتم كتابته علي أجزاء منفصلة لأنه موضوع قد لا ينتهي كلية 6- توضيح اخير ليس الهدف من الموضوع هو صياغة الكود نيابة عن القارئ لكن الهدف هو توضيح بعض المشاكل البرمجية و محاولة إيجاد حلولا لها و يتبقي علي القارئ إن كان مهتما بهذه النوعية من الموضوعات أن يطور أي كود تم كتابته عن هذا الموضوع لأن الهدف الأهم هو تحسين الكود المكتوب من أجل الحصول علي نوعية جيدة من الكود حتي يستفيد الجميع في النهاية أدعو الله أن يكون الموضوع مفيدا للبعض منكم و لا تنسونا من صالح دعائكم غفر الله لنا و لكم ما تقدم من الذنوب و ما تأخر RE: SoftWare Screen Resolution - sendbad100 - 13-04-17 السلام عليكم تقبل الله منك الله يرحمه ويغفر له ويسكنه فسيح جناتة وجزاك الله الف خير RE: SoftWare Screen Resolution - silverlight - 14-04-17 الجزء الأول هناك مجموعة من الدوال من النوع 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.HandlePHP كود : Dim hwnd As IntPtr = Me.HandlePHP كود : Dim hwnd As IntPtr = Me.Handleفقط تأكد ان تمرر Index الخاص بالفورم بشكل صحيح PHP كود : Dim hwnd As IntPtr = Me.Handleأعتقد أنه و بعد الحصول علي Form او الكونترول أو Screen او NativeWindow بهذا الاسلوب سيكون الأمر يسيرا علي القارئ لكي يتعامل مع هذه المتغيرات كما يحلو له وذلك بهدف الحصول علي معلومات اضافية من كل متغير قد يتساءل البعض و ما الفائدة من كل هذا الكود و الاجابة علي هذا التساؤل هي أننا نبني مكتبة بسيطة للتعامل مع الفورم و الكونترول و شاشة الكمبيوتر و بالتالي سوف نحتاج الي تلك المعلومات لكي نستفيد منها لاحقا و لأننا نبني مكتبة لذلك من الأفضل كتابة كلاس بسيط بحيث حين نمرر له IntPtr أو Handle نستطيع أن نحصل علي المعلومات التي نحتاجها و الكود التالي يوضح شكل هذا الكلاس و لقد كتبته علي هيئة Structure والأمر متروك للقاري لكي يطور الكلاس و يضيف له بعض السمات الإضافية طبقا لرؤية القارئ PHP كود : Public Structure WindowPointerالكود التالي يوضح كيف تستخدم الكلاس كبديلا عن الأمثلة التي كتبنا أكوادها أعلاه PHP كود : Dim hwnd As IntPtr = Me.Handleلمزيد من التفاصيل يمكن للقارئ الإطلاع علي الروابط الروابط التالية Control.FromHandle Screen.FromHandle NativeWindow.FromHandle IntPtr Structure RE: SoftWare Screen Resolution - silverlight - 14-04-17 الجزء الثاني ضبط الفورم و الكونترول ليتنسابا مع أبعاد اي شاشة كمبيوتر يتلخص في الخطوات التالية: 1- تحديد مقياس الرسم الذي نراه مناسبا و افضل مقياس رسم هو القيمة = 1 2- معرفة الفورم الي سنقوم بضبط أبعاده 3- معرفة جميع الكونترول الموجودة علي الفورم 4- معرفة DPI الخاص بأي شاشة عرض وهذا يتم باستخدام الجرافكس 5- ثم بناء علي حسابات DPI نحسب مقياس الرسم الحقيقي الذي يتناسب مع ابعاد شاشة الكمبيوتر الأن نأتي لكيفية كتابة الأكواد لتنفيذ الخطوات أعلاه و هي خطوات بسيطة جدا في الحدث Load الخاص بالفورم ضع الكود التالي PHP كود : ' تحديد مقياس الرسممثلا أن أردت تغيير الفونت قم بإضافة الأسطر التالية من الكود الي الأكواد اعلاه PHP كود : ' مثال لكيفية ضبط الفونت مع مقياس الرسمحاول تغير في مقياس الرسم و أقصد هنا المتغير scale و لتري ما سيحدث معك أخيرا و بما أننا نصنع كلاس او نبني مكتبة بسيطة لضبط الفورم ليكون مناسبا مع ابعاد الشاشة فإن الكود سيكون مختلف قليلا لكن ستظل الخطوات واحدة وإن أردت أن تفعل نفس الشي مع جميع الكونترول الموجودة علي الفورم فقط ستحتاج الي حلقة تكرارية و تقوم بضبط ابعاد كل كونترول في الجزء الثالث و الأخير سأضع لكم الكلاس الذي يمكنكم استخدامه مع اي فورم RE: SoftWare Screen Resolution - silverlight - 15-04-17 الجزء الثالث و الأخير الكود التالي يوضح شكل الكلاس الذي من الممكن استخدامه لضبط ابعاد الفورم لتتناسب مع شاشة الكمبيوتر الكلاس يمكن اعتباره أساس معقول لبعض المبرمجين لكي يطوروا فيه بشكل أفضل PHP كود : Public Structure WindowResolutionالكود التالي يوضح بعضا من الأفكار البسيطة لكيفية استخدام الكلاس PHP كود : Dim res As New WindowResolution(Me.Handle, 1.4)أتمني ان تكون الفكرة قد اتضحت للقارئ RE: SoftWare Screen Resolution - HASAN6.0 - 20-06-18 شكرا لك استاذ silverlight رحمه الله عليك يا ابا الليث ,, التقيته ذات حين , وهو من ارقى الناس الذين عرفتهم . رحمه الله رحمه واسعة. |