بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
انا بصراحة الموضوع عجبنى جدا وحبيت انى اكتبه فى المنتدى لعله يستفيد منه اعضاء المنتدى ولاسيما المبتدئين مثلى.
كل الكلام النهادره او معظمه هيدور حول خاصية من خصائص النموذج
Form
وهى حاصية
Opacity
وايضا خاصية اخرى وهى
TransparencyKey
والخاصيتين تتعلقان بطريقة عرض النموذج والحقيقة انهم عجبونى جدا جدا واتمنى انهم يعجبوكم انتو كمان الاولى كما هو واضح من اسمها تتعلق بشفافية النموذج .
يعنى بامكانك انك تقلل شفافية النموذج مما يعطيك شكل ممتاز قد تحتاجه فى بعض البرامج
حيث تزداد شفافية النموذج حتى يبدا ما تحتها من نوافذ فى الظهور.
يمكنك ان تجرب ذلك بمنتهى البساطة افتح مشروع جديد وغير لون خليفة النموذج الى اى لون تريده وغير الاتى
this.Opacity=.7;
شغل البرنامج وسترى ان النموذج قد ذادت شفافيته واصبح يظهر ما تحته من نوافذ واكواد.
كما تلرى ان خاصية الشفافية تاخذ قيمة رقيمة ما بين ال 0 وال 1
والقيمة الافتراضية لهذه الخاصية 1 وفيها يكون النموذج غير شفاف نهائيا.
اما عندما تاخد هذه الخاصية القيمة 0 فان النموذج يصبح غير مرئى مع
ملاحظة انه غير مرئى نعم ولكن موجود ومنفذ وهو النافذة النشطة فعلا.
اما اذا جئت للخاصية
TransparencyKey
لها شكل عام كالتالى
this.TransparencyKey = Color.Red;
هذه الخاصية تمحو الجزء الذى ياخد هذا اللون من النموذج محو تام ليظهر ما خلفه تماما وكانه غير موجود ولا يظهر من النموذج سوى الاطار الخارجى فقط.
هذه الخاصية ليست فقط تمحو الجزء الذى ياخذ هذا اللون فقط ولكنها تجعله غير موجود فعلا - وهذا بعكس الخاصية السابقة - فعندما تضغط بالماوس على الجزء الممحى من النموذج فالحدث يقع على النافذة التى تقع اسفله.
هذه الخاصية تعطى شكل رائع فعلا - هذا من وجهة نظرى - يمكن ان تستخدمها فى اى برنامج حسب ما ترى على تجعلها النافذة النشطة دائما.
مع ملاحظة ان اية ازرار موضوعة على النموذج تظهر بكل لونها وتستقبل احداث الماوس وغيرها طالما ان لونها مخالف للون المحدد فى الخاصية.
هذا عن هذه الخصائص وانا عندما كنت اعد الدرس لم يكن هذا هو كل ما ريد ان اعرضه بالضبط بل احببت ان القى بعض الضوء على موضوع هام وهو:-
Subclassing
ومعانها ان انشى كلاس جديدة تعتمد على كلاس موجودة ترث الكلاس الجديدة كل ما للكلاس القديمةوما عليها واضافة على ذلك بعض الوظائف والخصائص الجديدة.
فنحن باذن سنتمرن على هذا الموضوع حيث سنبنى نموذج يرث كل الكلاس
System.Windows.Forms.Form
وسنضيف اليها بعض التاثيرات كمثلا ان تتلاشى الشاشة تدريجيا عند اغلاقها وتعرض تدريجيا.
Fade in and fade Out
وسنقوم بعمل ما يسمى قالب
Template
لنقوم باستدامه وقتما نشاء واينما نشاء وذلك باستخدام
Subclassing
بالامكان ان تضيف للقالب اية اعدادات تريدها ان تصبح كقييم افتراضية تطبق بمجرد ان تنشىء النموذج كان نضع خلفية مثلا او لون معين فى الخليفة وكذلك اذا كنانفضل خط معين وتنسيقه بطريق معينة من حجم ولون وغيرة...
وعندما نستخدم هذا القالب تطبق كل هذه الاعدادت اوتوماتيكا
والا لنبدا وسنتتج هذا القالب فى شكل ملف من النوع
.DLL
نفتح مشروع جديد ونختار مشروع من نوع
Class library
تفتح نافذة المشروع وبها كلاس احذفها فلسنا فى حاجة اليها اضغط عليها بالزر الايمن للماوس واختار حزف وقم باضافة نموذج جديد الى المشروع من قائمة
Project
وسمى هذا النموذج
Standard.cs
افتح نافذة الكود ستجد هذه الجملة التى تجدها فى اول كل نموذج
public class Standard :System.Windows.Forms.Form
وهى تعنى ان هذا النموذج المنشا سيرث هذه الكلاس
قم بضبط اية اعدادت تريدها مثل
Font , Text ,Forecolor , Backcolor
لتطبق هذه الاعدادت كقيم افتراضية عند استخدامك هذا النموذج
وضع اى صورة تريدها فى الخلفية كشعار شركة مثلا او غيرها
والان لنقوم ببرمجة التاثيرات التى سبق واشرنا اليها
بداية ضع مؤقت على النموذج وسمه
formTimer
واجعل
Interval=50
سنضيف الان الدالة التى ستنفذ عند بداية تحميل النموذج وهى التى ستظهره تدريجيا
وليكن اسمها
fadein
هذه الدالة ببساطة ستقوم بزيادة قيمة الخاصية
Opacity
بمقدار
0.1
حتى تصل قيمة الخاصية الى 1 لتكون النافذة ظاهرة تماما.
مع العلم باننا سنجعلها تساوى 0 عند بدء التحميل.
ويكون شكل هذه الدالة كالتالى
private void fadein(object sender, EventArgs args)
{
if (this.Opacity <1.0)
{
this.Opacity +=0.1;
formTimer.Enabled =true;
}
else
{
formTimer.Tick -=loading;
}
}كما ترى ان هذا الكود سينفذ مادامت قيمة الخاصية اقل من 1 وستتكرر كل 50 ملى ثانية (عن طريق الموقت) وخاصية الانترفال حتى تصل الى القيمة 1 فيقف عمل المؤقت.
نحن نريد ان يحدث هذاعند بدء التحميل لذلك سنقوم باضافة هذا الحدث كالتالى
private EventHandler loading;
وذلك فى قمة الكود ثم نضيف الدالة الخاصة بهذا الحدث كالتالى
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.Opacity =0;
loading =new EventHandler(this.fadein);
formTimer.Tick +=loading;
formTimer.Enabled =true;
}Overload قمنا هنا بعمل
لهذا الحدث
وهو يجعل قيمة خاصية الشفافية تساوى 0 ثم يفجر هذا الحدث وينفذ الدالة
fadein
fadeout والخطوة التالية هى كتابة الدالة
وهى ستقوم بعكس عمل الدالة السابق تماما
private void fadeOut(object sender,EventArgs e)
{
if (this.Opacity >0)
{
this.Opacity -=0.1;
formTimer.Enabled =true;
}
else
{
formTimer.Tick -=closing;
this.Close();
}
}يقوم هذا الكود بنقص مة تلك الخاصية بمقدار0.1 حتى تصل الى 0 وتختفى النافذة ثم يتم اغلاقها.
ثم نضيف حدث الاغلاق كالتالى
private EventHandler closing;
ثم نضيف دالة هذا الحدث كالتالى بعكس الطريق السابقة تماما.
protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
if (this.Opacity >0)
{
closing =new EventHandler(this.fadeOut);
formTimer.Tick +=closing;
formTimer.Enabled =true;
e.Cancel =true;
}
}بهذا نكون قد انتهينا من اعداد هذا القالب قم بنتفيذ المشروع وبالطبع لن تظهر لك اية نوافذ ولكنك ستجد ملف اسمه
ٍStandered.Dll
ستجده فى المجلد
binDebug
والان لنقوم بتجربة هذا القالب فى مثال فلتقم بفتح مشروع جديد من نوع
Windows Application
Form1 ستجد نموذج مضاف باسم
ولتطبيق القالب غلى هذا النموذج اتبع الاتى
Project من قائمة
Add Reference اختار
.NET تاكد ان التبويب النشط هو
Browse اضغط
وحدد الملف المنتج وستجده باسم المشروع فى المجلد
binDebug
Companyform بفرض ان اسم المشروع هو
ستجد ملف
Companyform.DLL
حدده واضغط موافق
افتح نافذة الكود واضف الجملة التالية فى اول الكود
using CompanyForm;
ثم غير الجملة التالية
public class Form1 :System.Windows.Forms.Form
ويتم تغييره ليرث النموذج الحالى النموذج السابق اعداده كالتالى
public class Form1 :Standard
جرب هذا وستجده رائعا ان شاء
ويمكن ان تؤدى نفس العمل ولكن بطريقة اخرى عن طريق
Project >> Add Inherited Form
حدد الملف ونفذ البرنامج وستجده رائعا ان شاء الله
اتمنى ان اكون قد وفقت فى عرض هذا الموضوع وان يكون احدا قد استفاد من هذا الموضوع
بالرغم من بساطته الشديدة الا انه يقدم مثالاعلى استخدام الوارثة فى انشاء كائنات خاصة نضيف
اليها التاثيرات والاعدادت التى نفضلها او المطلوبه لهذا البرنامج مرة واحدة لتنفذ فور انشاء
النموذج الجديد وتطبيق عملية الوراثة.
وهذه الطريقة ممتازة حينما تريد ان تطبق خاصية المراءة مثلا على مشروع يحتوى على
عدد كبير من النماذج فاننا نبرمج المراءة فى نموذج واحد ومعها كل ما نريد من اعدادت فى
نفس النموذج ثم ترث بقية النماذج فى المشروعهذا النموذج وفى ذلك توفيرا كبير للوقت والجهد
وتقليل احتمال الاخطاء فضلا عن الشكل الاحترافى.
امنياتى لكم بالتوفيق
ايمن مصطفى