05-07-19, 05:00 PM
تحدثنا فى الموضوع السابق عن كيفية تهيئة وتحديد مسار التثبيت وكذلك خيارت الاختصارات
ومن خلال الدرس السابق تمكنا من عمل اكواد تحديد المساحة الكلية للدريف
وكذلك المساحة المطلوبة ان تكون متاحة لاتمام تثبيت البرنامج وكذلك المساحة المحببة لعمل البرنامج
وقمنا بانشاء بانشاء خيارات فى Settings لاتمام تسجيل حالة خيارات اختصار سطح المكتب وكذلك قائمة ابداء
وكان يوجد خيار الثالث وهو تخطى شاشة خيارات التثبيت لاتمام تحديد البرامج
التى سيتم اختيارها من عدمه لاتمام تثبيتها مع البرنامج ولكن فى هذا الدرس
سيتم شرح هذه الشاشة حيث اذا لم يتم تخطيها الى ان يتم شرح فى درس قادم
كيفية عند اتمام تخطي هذه الشاشة اتمام التثبيت بالبرامج المختارة افتراضياً
الان صورة من الدرس السابق لتوضيح المطلوب اتمامه فى تلك الشاشة
لاتمام عرض الشاشة المطلوبة خاصة هذه المرحلة من الدرس اليك صورة توضيحية
عند اتمام الامر سيتم عرض هذه الشاشة والتى من وظيفة هذا الدرس
اتمام تصميمها وشرح كيفية العمل عليها ولكن فى البداية احب ان اوضح نقطة مهمة
وهو الخيارات من البرامج المدرجة فى هذه الشاشة ليس الزامي ولكن فكرياً وكل الامر علك
هو تحديد البرامج التى تتطلب برنامجك تثبيتها على جهاز العميل حتى يعمل بدون ادنى مشكلة
اذا كان من مكتبات او برامج او ما شبه من هذا الامر هنا انت من تقوم بتحديد البرامج الازامية التى يتطلب جهاز المستخدم
تواجد تلك البرامج الزامياً لاتمام عمل برنامجك بدون ادنى مشكلة طيب ياتى هنا سؤال مهم جداً !!!
سؤال: بما ان البرامج فى هذه الشاشة الزامية تثبيتها فلماذا اتيح للمستخدم حرية الاختيار فى تثبيت هذه البرامج او لا ؟
جواب: الاجابة بسيطة جداً احياناً يكون الجهاز مثبت مسبقً كل من تلك البرامج المطلوبة فهنا يقوم المستخدم بتجنب تثبيتها
وهنا سيساعد فى تقليل الوقت بسبب تثبيت البرامج وكذلك لعدم تسبب مساكل فى الاعدادات او التراخيص وما شبه للبرامج التى تطلب التفعيل
طيب ناتى الان الى الشاشة هذا الدرس لنطلع عليها
ومن ثم يتم شرح كل جزء بها والاكواد التى سيتم استخدامها بهذه الشاشة
صورة شاشة درس اليوم
لو نلاحظ هنا تم عمل عدد 6 خيارات من تحديد البرامج
وتم تنشيط عدد 3 برامج متطلب عملية التثبيت ولكن
البرامج التى تم درجها هنا فى هذه الشاشة للشرح ما هى الا عملية تمثل عن الفكرة
بمعنى لا تقوم بتطبيق والزام نفسك بعمل بمقل ما اقوم به فى الشرح
ولكوني لم اقوم بعمل برنامج لدي رئيسي واعلم ما هى متطلباته لذلك
قمت بعمل هذا كمثال لتوضيح كامل الفكرة وليس اكثر
طيب تعال مع بعض اقول انا عملت برنامج لنقول عليه ضخماً نوعاً ما
حيث جعلت البرنامج يدعم اكثر من نوع من قاعدة البيانات حيث يعمل على
Access و Sql Server وكذلك Mysql Server .. الخ
وكذلك جعلت البرنامج يدعم اكثر من نوع من التقارير منها التقارير الافتراضية
وهو Microsoft Report View و ايضاً الـ Crystal Reports
فهنا هذه الشاشة مطلوب تثبيت جميع البرامج التى بها
كما ذكرت اننى جعلت البرنامج الذى لدي يدعم كل شئ داخل البرنامج
ولكن السؤال هنا انا كا مستخدم عند تحديد نوع قاعدة البيانات
فهنا سيكون البرنامج يعمل على نوع واحد بالنهاية والتحديد هنا
يرجع لسبب حالة وامكانيات الجهاز المستخدم عليه البرنامج
وكذلك حجم العمل والكيان وعدد المستخدمين على البرنامج
فانا الان سامثل نفس العميل الذى قمت بشراء البرنامج
ولكن انا فقط من سيقوم باستخدام هذا البرنامج وليس متعدد المستخدمين
وكذلك حجم البيانات التى سيتم ادخالها فى قاعدة البيانات بسيطة وليس بحجم كبير
طيب الان بما اننى بهذا الامر فهنا ساسهل الحال على نفسى واقوم باختيار قاعدة بيانات الـ access
ناتى الان الى المرحلة الثانية وهو تحديد نوع التقارير التى اريد استخدامها
فانا كعميل ليس لدي فكرة عن ايهم الافضل وايهم يجب عليا استخدامه فساقوم باقوم باختيار كلاهما للتثبيت
فعند عرض التقرير ساقوم بتحديد النوع عند العرض والطباعة ومن ثم اري ايهم افضل لى
بينما اذا كنت اعلم ايهم الافضل فانا عنا ساقلل من حجم مساحة البرامج لتثبيته
الان يبقي معى الخيار الاخير وهو مكتبة الـ .net
الامر هنا سيتطلب على المبرمج عمل نقاط مهما سيتم شرحها نظرياً فى هذا الدرس
حتى يتم عمل موضوع لها مخصص وتوضيح الشرح بالاكواد وتفاصيل اتمام الامر
الان انا كا مستخدم حتى يعمل لدي البرنامج
وخصوصاً اذا كان البرنامج يستخدم هذه المكتبة بشكل كبير واساسى فى البرنامج
وان البرنامج ليس على بيئة الاصدار 2 فهنا سيكون هذا الخيار اجبارى
حتى اذا قام المستخدم بعدم تنشيطة لاتمام التثبيت فهنا تظهر له رسالة بعدم تمكنه من عدم تنشيط هذا البرنامج
طيب امتى بضبط اجعل هذا الخيار بامكانه عدم تنشيطه سيكن فى حالة واحدة فقط وهو عمل كود تحقق
بان الجهاز عليه بالفعل هذا البرنامج مثبت مسبقاً وهل الاصدار المثبت هو نفس الاصدار المطلوب وما اعلى ام لا
فهنا يمكنك ان تتيح للمستخدم من تنشيط وعدم تنشيط تثبت البرنامج
طيب تعال نشوف كدة شكل الشاشة بعد اتمام
اختيارات الخيارات التى تم ذكرها بالاعلى كونى كا مستخدم
صورة توضيحية للشاشة
سنلاحظ بان اى برنامج غير محدد يحول لونه الى اللون الفضي
بينما اى برنامج يتم تحديده يتم تحديد اللون الافتراضي المخصص له
الى هذا الجزء سيتم شرحه فى الاسطر القادمة اكواداً وعدد الادوات التى تم استخدامها فى هذه الشاشة
الى ان يتم شرح فى درس قادم الخطوات التالية بامر الله
صورة الشاشة هذا الدرس مجدداً
الادوات التى تم استخدامها فى هذه الشاشة:
1- عدد 11 من اداء CheckBox.
2- عدد 28 من اداء Label.
3- عدد 13 من اداء Panel.
4- عدد 1 من اداء PictureBox.
5- عدد 9 من اداء TableLayoutPanel.
ناتى الان الى الجزء الرئيسي يتطلب التركيز عليها حيث سيتم اضافة Setting
تابعة وخاصة لهذا الشاشة كما تم فى الدرس السابق للشاشة السابقة
سبق فى الدرس السبق وتم اضافة كما فى الصورة التالية
كل الامر سيتم اضافة حاجة من الاثنين
اما هو اضافة عمود واحد فقط يشمل كل البرامج التى سيتم تذكرها فى هذه الشاشة
أو ان اجعل عن كل برنامج عمود خاص به فلست اعلم ايهم اختار لكم لكونى اريد تبسيط وتسهيل فهم الامر
وحتى لا يتم تشتيت الامر المطلوب ساقوم بعمل شرح لكل برنامج عمود
ولعل فى الدروس القادمة فى تطوير وتسحين هذه الدورة اوضح كيفية جعلها فى عمود واحد
وكيفية تحسين وتقليل الاكواد بصورة كبيرة بقدر المستطاع
الان متطلبات الاضافة التى سيتم اضافتها فى Settings ستكون كالتالي
1- اضافة عمود باسم NetFW من نوع Integer بقيمة افتراضية 0.
2- اضافة عمود باسم SqlServer من نوع Integer بقيمة افتراضية 0.
3- اضافة عمود باسم SAPcr من نوع Integer بقيمة افتراضية 0.
4- اضافة عمود باسم ReportView من نوع Integer بقيمة افتراضية 0.
5- اضافة عمود باسم Access من نوع Integer بقيمة افتراضية 0.
6- اضافة عمود باسم MySql من نوع Integer بقيمة افتراضية 0.
صورة توضيحية للشكل بعد اتمام الاضافة
خطوات شرح اضافة ما ذكر فى Settings راجع الدرس السابق
بعد اتمام هذه المرحلة ناتى للخطوات التالية لاستكمال عمل الشاشة
فى البداية كود تحريك الشاشة
طبعاً انا شرحت الفكرة من الكود ووظائفها وكيفية التعامل معها فى الدرس الاول
لذلك سيتم وضع الكود هنا فقط حتى يتم تسهيل نسخ الكود للاستخدام من نفس الموضوع
دون الحاجة الى الرجوع الى الدرس الاول الا اذا كنت لم تعلم كيفية الاستخدام والتعامل مع الكود
فعليك بالعودة للدرس الاول مجدداً لتتمكن من معرفة كيفية استخدام الكود وكيف التعامل معه
الكود المستخدم يتم اضافة كلاً من
كود :
Private MoveForm As Boolean
Private MoveForm_MousePosition As Point
ومن ثم وضع الاكواد التالية كما هو مشار لكل حدث
كود :
Private Sub MoveForm_MouseDown(sender As Object, e As MouseEventArgs) Handles Panel2.MouseDown
If e.Button = MouseButtons.Left Then
MoveForm = True
Me.Cursor = Cursors.SizeAll
MoveForm_MousePosition = e.Location
End If
End Sub
Private Sub MoveForm_MouseMove(sender As Object, e As MouseEventArgs) Handles Panel2.MouseMove
If MoveForm Then
Me.Location = Me.Location + (e.Location - MoveForm_MousePosition)
End If
End Sub
Private Sub MoveForm_MouseUp(sender As Object, e As MouseEventArgs) Handles Panel2.MouseUp
If e.Button = MouseButtons.Left Then
MoveForm = False
Me.Cursor = Cursors.Default
End If
End Sub
بعد الانتهاء لكود تحريك الشاشة
ناتى الان الى الكود الاغلاق لزر X الموجود باعلى الشاشة
كود :
Application.Exit()
الخطوة التالية وهو كود التعامل مع كل اطار / زر لتنشيط تثبيت البرامج
ولعمل هذا الكود عن كل اطار / زر سيتم عمل عدد 3 حدث لاتمام تنفيذ الامر
كما هو موضح بالكود التالى
كود :
Private Sub Panel8_MouseHover(sender As Object, e As EventArgs) Handles Panel8.MouseHover, CheckBox7.MouseHover, Label10.MouseHover, Label11.MouseHover, Label13.MouseHover
Panel8.BackColor = IIf(CheckBox7.Checked, Color.FromArgb(132, 53, 152), Color.Gray)
End Sub
Private Sub Panel8_MouseMouseLeave(sender As Object, e As EventArgs) Handles Panel8.MouseLeave
Panel8.BackColor = IIf(CheckBox7.Checked, Color.FromArgb(104, 33, 122), Color.FromArgb(64, 64, 64))
End Sub
Private Sub Panel8_Click(sender As Object, e As EventArgs) Handles Panel8.Click, CheckBox7.Click, Label10.Click, Label11.Click, Label13.Click
CheckBox7.Checked = Not CheckBox7.Checked
Panel8.BackColor = IIf(CheckBox7.Checked, Color.FromArgb(132, 53, 152), Color.Gray)
End Sub
الحدث الاول وهو لعملية حركة المؤشر الفارة بداخل الاطار
لاتمام تغيير اللون طبقاً لحالة الاطار نشط او غير نشط
الحدث الثاني وهو عكس ما سبق وهو عند خروج المؤشر الفارة من داخل الاطار
ليقوم باعادة اللون الافتراضي الذى كان عليه طبقاً لحالة الاطار
الحدث الثالث وهو عند الضغط على الاطار / الزر
ليقوم بعملية التنشيط وعدم التنشيط لاتمام تثبيت البرنامج المطلوب
الان بعد اتمام شرح كود الاطار الواحد سيتم هنا
ادراج الكود كاملاً لكل الاطارات التى تم استخدامها فى الشاشة
كود :
Private Sub Panel8_MouseHover(sender As Object, e As EventArgs) Handles Panel8.MouseHover, CheckBox7.MouseHover, Label10.MouseHover, Label11.MouseHover, Label13.MouseHover
Panel8.BackColor = IIf(CheckBox7.Checked, Color.FromArgb(132, 53, 152), Color.Gray)
End Sub
Private Sub Panel8_MouseMouseLeave(sender As Object, e As EventArgs) Handles Panel8.MouseLeave
Panel8.BackColor = IIf(CheckBox7.Checked, Color.FromArgb(104, 33, 122), Color.FromArgb(64, 64, 64))
End Sub
Private Sub Panel8_Click(sender As Object, e As EventArgs) Handles Panel8.Click, CheckBox7.Click, Label10.Click, Label11.Click, Label13.Click
CheckBox7.Checked = Not CheckBox7.Checked
Panel8.BackColor = IIf(CheckBox7.Checked, Color.FromArgb(132, 53, 152), Color.Gray)
End Sub
Private Sub Panel9_MouseHover(sender As Object, e As EventArgs) Handles Panel9.MouseHover, CheckBox6.MouseHover, Label14.MouseHover, Label15.MouseHover, Label16.MouseHover
Panel9.BackColor = IIf(CheckBox6.Checked, Color.FromArgb(224, 48, 53), Color.Gray)
End Sub
Private Sub Panel9_MouseMouseLeave(sender As Object, e As EventArgs) Handles Panel9.MouseLeave
Panel9.BackColor = IIf(CheckBox6.Checked, Color.FromArgb(195, 26, 33), Color.FromArgb(64, 64, 64))
End Sub
Private Sub Panel9_Click(sender As Object, e As EventArgs) Handles Panel9.Click, CheckBox6.Click, Label14.Click, Label15.Click, Label16.Click
CheckBox6.Checked = Not CheckBox6.Checked
Panel9.BackColor = IIf(CheckBox6.Checked, Color.FromArgb(224, 48, 53), Color.Gray)
End Sub
Private Sub Panel10_MouseHover(sender As Object, e As EventArgs) Handles Panel10.MouseHover, CheckBox8.MouseHover, Label17.MouseHover, Label18.MouseHover, Label19.MouseHover
Panel10.BackColor = IIf(CheckBox8.Checked, Color.FromArgb(169, 30, 48), Color.Gray)
End Sub
Private Sub Panel10_MouseMouseLeave(sender As Object, e As EventArgs) Handles Panel10.MouseLeave
Panel10.BackColor = IIf(CheckBox8.Checked, Color.FromArgb(131, 19, 32), Color.FromArgb(64, 64, 64))
End Sub
Private Sub Panel10_Click(sender As Object, e As EventArgs) Handles Panel10.Click, CheckBox8.Click, Label17.Click, Label18.Click, Label19.Click
CheckBox8.Checked = Not CheckBox8.Checked
Panel10.BackColor = IIf(CheckBox8.Checked, Color.FromArgb(169, 30, 48), Color.Gray)
End Sub
Private Sub Panel11_MouseHover(sender As Object, e As EventArgs) Handles Panel11.MouseHover, CheckBox9.MouseHover, Label20.MouseHover, Label21.MouseHover, Label22.MouseHover
Panel11.BackColor = IIf(CheckBox9.Checked, Color.FromArgb(0, 136, 48), Color.Gray)
End Sub
Private Sub Panel11_MouseMouseLeave(sender As Object, e As EventArgs) Handles Panel11.MouseLeave
Panel11.BackColor = IIf(CheckBox9.Checked, Color.FromArgb(0, 95, 33), Color.FromArgb(64, 64, 64))
End Sub
Private Sub Panel11_Click(sender As Object, e As EventArgs) Handles Panel11.Click, CheckBox9.Click, Label20.Click, Label21.Click, Label22.Click
CheckBox9.Checked = Not CheckBox9.Checked
Panel11.BackColor = IIf(CheckBox9.Checked, Color.FromArgb(0, 136, 48), Color.Gray)
End Sub
Private Sub Panel12_MouseHover(sender As Object, e As EventArgs) Handles Panel12.MouseHover, CheckBox10.MouseHover, Label23.MouseHover, Label24.MouseHover, Label25.MouseHover
Panel12.BackColor = IIf(CheckBox10.Checked, Color.FromArgb(76, 163, 249), Color.Gray)
End Sub
Private Sub Panel12_MouseMouseLeave(sender As Object, e As EventArgs) Handles Panel12.MouseLeave
Panel12.BackColor = IIf(CheckBox10.Checked, Color.FromArgb(49, 149, 248), Color.FromArgb(64, 64, 64))
End Sub
Private Sub Panel12_Click(sender As Object, e As EventArgs) Handles Panel12.Click, CheckBox10.Click, Label23.Click, Label24.Click, Label25.Click
CheckBox10.Checked = Not CheckBox10.Checked
Panel12.BackColor = IIf(CheckBox10.Checked, Color.FromArgb(76, 163, 249), Color.Gray)
End Sub
Private Sub Panel13_MouseHover(sender As Object, e As EventArgs) Handles Panel13.MouseHover, CheckBox11.MouseHover, Label26.MouseHover, Label27.MouseHover, Label28.MouseHover
Panel13.BackColor = IIf(CheckBox11.Checked, Color.FromArgb(16, 116, 160), Color.Gray)
End Sub
Private Sub Panel13_MouseMouseLeave(sender As Object, e As EventArgs) Handles Panel13.MouseLeave
Panel13.BackColor = IIf(CheckBox11.Checked, Color.FromArgb(0, 101, 139), Color.FromArgb(64, 64, 64))
End Sub
Private Sub Panel13_Click(sender As Object, e As EventArgs) Handles Panel13.Click, CheckBox11.Click, Label26.Click, Label27.Click, Label28.Click
CheckBox11.Checked = Not CheckBox11.Checked
Panel13.BackColor = IIf(CheckBox11.Checked, Color.FromArgb(16, 116, 160), Color.Gray)
End Sub
اذا قمنا بمراجعة الاكواد التى تم ذكرها بالاعلى خاصة الاطارات لحالة تنشيط البرامج
سنجد هذا السطر فى حدث الكلك عن كل اطار
كود :
CheckBox11.Checked = Not CheckBox11.Checked
طيب ايه فطرة هذا الكود بضبط
لتسهيل الامر تعال نشوف الكود التالى
كود :
If CheckBox11.Checked Then
CheckBox11.Checked = False
Else
CheckBox11.Checked = True
End If
لو تلاحظ هذا الكود هو شرط تحقق لقيمة لتنفيذ قيمة
وفى الدرس السابق تحدثنا كيفية التعامل مع مثل هذه الامور فى التحقق
حيث يمكننا تقليل الامر ليصبح بهذا الشكل
كود :
CheckBox11.Checked = IIf(CheckBox11.Checked, False, True)
طيب بما ان الثلاثة هنا المقصود بها واحد
وان الفكرة من الامر هو عمل انعكاس للقيمة / عكس القيمة
فكل الامر تم تجنب امر التحقق ليتم تنفيذها بهذا السطر فقط
كود :
CheckBox11.Checked = Not CheckBox11.Checked
وكلمة Not المستخدمة هنا تعنى الرفض او العكس
فهنا كانى بقوله اجعل قيمة CheckBox11 تساوى عكس كيمته الحالية
بعد اتمام كل ما سبق كل ما سنحتاج اليه
هو كود لحدث زر السابق / Back
كل ما عليك وضع الكود التالى بداخل حدث الزر السابق / Back
كود :
Form3.Show()
Close()
والى درس قادم استودعكم الله الذى لا اله الا هو
واتمنى من الجميع ان يسامحنى اذا قصرت فى الشرح
ولكون هذا الدرس تاخر بعض الايام بسبب بعض ظروفى وضغط الوقت لدي
فاى تقصير فى الشرح او نقص فى توضيح اى جزء
الرجاء ذكره وساقوم بتوضيح اى نقطة واى جزء غير مفهوم بامر الله
ملحوظة: مرفق بهذا الموضوع السورس الكود للمشروع الذى تم شرحه حتى اخر جزء من هذا الشرح
مع نسخة من البرنامج ليعطى تجربة لكيفية المظهر والاداء عند فتح البرنامج وعمل اخر شاشة تم شرحها
كما سيتم ارفاق الصور المستخدمة بهذا الموضوع
صورة متحركة توضح عمل البرنامج ابدتاء من شاشة الرخصة حتى شاشة هذا الدرس ( صورة غير مرفقة )
تحياتى لكم جميعاً
وتمنياتى لكم التوفيق الدائم
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]
ساهم دائماً فى لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله
▼ شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]
ساهم دائماً فى لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله
▼ شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية