![]() |
|
كيف تصنع كونترول شفاف - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : الأقسام التعليمية - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=90) +--- قسم : مكتبة أدوات الأعضاء (http://vb4arb.com/vb/forumdisplay.php?fid=115) +--- الموضوع : كيف تصنع كونترول شفاف (/showthread.php?tid=5182) |
كيف تصنع كونترول شفاف - RaggiTech - 05-10-12 كاتب الموضوع : silverlight
أعتقد ان الحصول علي الشفافية للكونترول أمر يفكر به الجميع وهو أيضا موضوع يشغل بال مطوري الكونترول بشكل خاص وكما نعلم جميعا أن خاصية الشفافية أو Opacity Property متاحة فقط مع الفورم والسؤال هو كيف نفعل ذلك مع الكونترول الفكرة تنحصر في الخطوات التالية: 1- استخدام الوراثة مع الكونترول 2- في Constructor نستخدم SetStyle ونجعل الكونترول يدعم شفافية اللون بأن نجعل القيمة SupportsTransparentBackColor تساوي True 3- عمل Overrides للخاصية CreateParams 4- إضافة Property للكونترول نطلق عليها Opacity 5- عمل Overrides للحدث OnPaintBackground حيث هنا علينا أن نملأ ClientRectangle الخاص بالكونترول بلون شفاف وذلك باستخدام +GDI وباستخدام OPacity ولتنفيذ اللأفكار اعلاه نقوم بإتباع التالي 1- افتح مشروع 2- من قائمة Project اختار Add Class ثم لنطلق عليه TransparentControl وهنا ستحصل علي الكود بالشكل التالي كود : Public Class TransparentControl3- باستخدام الوراثة نقوم بإضافة كونترول وذلك باستخدام جملة Inherits وهنا سنحصل علي الكود بالشكل التالي كود : Public Class TransparentControlويكون الكود بالشكل التالي كود : Public Class TransparentControl5- الأن لنضيف بعض الكود الي الكلاس بأن نقوم بتعريف متغير يعبر عن الشفافية وهذا المتغير قيمته عبارة عن Double ثم في Constructor الخاص يالكلاس نفوم باستخدام SetStyle ونجعل الكونترول يدعم الشفافية الخاصة باللون وبالتالي سنحصل علي الكود بالشكل التالي كود : Public Class TransparentControl6- الأن نضيف صفة Property للكلاس تعبر عن الشفافية وأيضا نقوم بعمل Overrides للصفه CreateParams كما تلاحظون في الخاصية Opacity أن قيمتها عبارة عن Double الأن وتحديدا مع هذه الخاصية علينا أن نستخدم الكلاس OpacityConverter ومن ثم وبإستخدام Attributes نوضح لهذه الخاصية أنها سوف تستخدم هذا الكلاس والهدف هنا من ذلك هو تحويل القيمة من Double لكي تظهر للمستخدم بالصورة %xx حيث القيمة xx عبارة عن رقم يترواح بين الصفر و 100 أيضا الصفة CreateParams هامة جدا حيث هنا نحدد ExStyle للكونترول وهذه القيمة هي التي سوف تجعل الكونترول شفافا كود : #Region " Property "كود : #Region " Event "الأن عليك بعمل Build للكونترول من قائمة Build وهنا سيظهر الكونترول في نافذة الأدوات حيث يمكننا أن نتعامل معه مثلما نتعامل مع اي كونترول أخر موجود في نافذة الأدوات بالطبع ولكي تتأكد أن الكونترول يعمل بشكل جيد ومناسب عليك ان تضع بالفورم اي صورة باستخدام الصقة BackgroundImage ثم أضف الكونترول الي الفورم وقم بالتعامل مع الصفة Opacity الخاصة بالكونترول ولنجعلها 50% مثلا وهنا ستجد ان أنك تري الصورة الموجودة علي الفورم من خلال الكونترول وهذا يؤكد أنك قد حصلت علي كونترول شفاف هناك شئ أخير هام جدا حاول أن تضيف اي كونترول أخر الي الكونترول الذي صممناه مثل الباتون علي سبيل المثال وبعد ذلك عليك تغيير مكان الكونترول الشفاف داخل الفورم ستكتشف أن الكونترول يتحرك بشكل عادي لكن الباتون الذي أضفناه الي الكونترول الشفاف سيبقي في مكانه ولكي نتفادي هذه المكشلة علينا بإضافة Designer Attributes للكلاس الذي صممناه وعموما وبدون الدخول في متاهة كتابة كلاس Designer للكونترول الشفاف سنكتب بعض Attributes فقط لاغير في اعلي الكلاس الشفاف نخبره فيها أن عليه أن يستخدم ParentControl Designer Class وبالتالي سيكون الكود النهائي للكلاس الشفاف هو كالأتي كود : <System.ComponentModel.Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", GetType(System.ComponentModel.Design.IDesigner))> _الأن عليك ببناء الكونترول الشفاف من قائمة Build وستحصل علي الكونترول الشفاف الذي تريده حاول تغيير لون الخلفية وتغيير القيمة Opacity لأي قيمة تراها مناسبة شئ أخير حاول أن تستخدام نفس الأسلوب أعلاه مع Panel مثلا اي بدلا من توريث الكونترول استخد Panel بدلا منه اي عليك تغيير السطر Inherits Control الي Inherits Panel بالتاكيد ستحصل علي بانل شفاف لكن يتبقي السؤال هل هذا الأسلوب نستطيع استخدامه مع بقية الكونترول الأخري أم لا ؟ أعتقد أن هذا أول سؤال ستسأله لنفسك بعد أنتهائك من قراءة الموضوع أعلاه حاول تجرب بنفسك ولنري بعض من أفكاركم بخصوص الشفافية و للحديث بقية ................. بالتوفيق أخوكم عمر كيف تصنع كونترول شفاف - RaggiTech - 05-10-12 كاتب المشاركة : Islam Ibrahim
جزاك الله خيراًلكن ليس كل الكونترول ستتأثر بهذا التغيير فمثلا أنا قمت بتوريث الفئة الجديدة من الكونترول Button ولم يتأثر بالشفافية كما هو موضح في الصورة
كيف تصنع كونترول شفاف - RaggiTech - 05-10-12 كاتب المشاركة : أبو يعقوب
السلام عليكمفي ادوات طيبة مؤمنة وفي ادوات يهودية صهيونية متعصبة ضد الشفافية ![]() انا اظن ان السبب : الاداة تطلب من الويندوز ان يرسمها مثل button -- هل هذا هو السبب؟ ===== بخصوص الشفافية هناك موضوع اخر وهو يتعلق بتحديد شكل سطح الادة مثلا كيف نجعل الادة على شكل دائرة او مربع مقوس الزوايا لك موضوع استاذي العزيز يتحدث عن تدوير شكل الادوات وذلك عن طريق استخدام الخاصية region لكن هذه الطريقة تعطي الاداة حواف كريهة ذات نتوءات مزعجة انا والحمد لله اعرف طريقة اطبقها دائما وهي ناجحة لحد الآن وهي تتلخص في التالي: 1- تضليل (shadows ) الخاصية BackColor للاداة الام 2- جعل BackColor تبع الاداة الام = Color.Transparent هكذا يكون هناك خاصية BackColor للاداة الام وخاصية جديدة ولن يستطيع المستخدم تغيير لون الخلفية الحقيقي ( لون خلفية الام) هكذا كود : [color=#000000][COLOR=#0000bb][/color][color=#007700]Public Class [/color][COLOR=#0000bb]ExControl ماتعليقك على هذه الطريقة؟ كيف تصنع كونترول شفاف - RaggiTech - 05-10-12 كاتب المشاركة : silverlight
الأخ الفاضل إسلامكما تعلم أن الباتون لم يتم توريثه مباشرة من الكونترول ولكنه جاء من كونترول أخر وتم استخدام Implements IButtonControl وبالتالي هذا الكلاس سيعمل كحاجز وبالتأكيد لن تري اي شفافية لذلك ولكي تبني باتون شفاف إما أن تقوم ببناؤه مباشرة من الكونترول وتستخدم+GDI لكي ترسم ButtonState Enum في حالاتها المختلفة أو عليك أن تبني الكونترول الأصلي وتستخدم Implements IButtonControl كلاس معه كيف تصنع كونترول شفاف - RaggiTech - 05-10-12 كاتب المشاركة : Islam Ibrahim
وصلت الفكرةقد غاب ذلك عن ذهني كيف تصنع كونترول شفاف - RaggiTech - 05-10-12 كاتب المشاركة : silverlight
الأخ الفاضل أبو يعقوبتستطيع أيضا أن تقوم بعمل Overrides للصفة BackColor وتجعل قيمتها تساوي Color.Transparent كود : Public Class ExControlأما بخصوص Region والرسم بشكل عام يجب أن لا ننسي أين نرسم الشكل المطلوب رسمه فإن كان الهدف هو رسم مستطيل مثلا علي Region يجب أن نراعي أن Pen thickness أثناء عملية الرسم بالإضافة الي AntiAliasing لو راعينا ذلك لن يحدث أي تشوه |