استخدام جهاز الباركود في لغة سي شارب

في درس اليوم من سلسلة شذرات برمجية سوف نتعرف على كيفية استخدام جهاز قارئ الباركود Barcode Scanner / Reader في الدوت نيت، وستكون اللغة المستخدمة هي سي شارب C# علما أن نفس العمل يمكن تطبيقه كذلك على لغة فيجوال بيسك دون أية مشاكل.
سنشتغل على مثال يقوم بإضافة المنتجات إلى قاعدة البيانات، بحيث تتم قراءة الباركود تلقائيا بواسطة القارئ ثم يتم إدخال باقي تفاصيل المنتوج، وعند البيع يكفي تمرير ملصق الباركود المطبوع على المنتج أمام جهاز الباركود ليتم جلب معلوماته وصورته.
أيضا يحتوي الدرس على مجموعة من المعلومات البرمجية المفيدة كطريقة التعامل مع الصور واستخدام البرامترات مع SQL Command من أجل منع حقن SQL Injection وغير ذلك من المعارف النافعة.
نسأل الله عز وجل أن يجعل هذا العمل خالصا لوجهه الكريم وأن يتقبل منا ومنك صالح الأعمال.
مع متمنياتي لكم بالتوفيق والسداد، ودام لكم البشر و.............الفرح :)

رابط الدرس:


أيهما أفضل وأقوى PHP أم ASP.Net ؟ وبماذا أبدأ ؟


السلام عليكم ورحمة الله وبركاته، أحبتي في الله حياكم الله، وأهلا وسهلا بكم جميعا في مقالة جديدة من مقالات أكاديمية المبرمجين العرب.
سؤال اليوم سؤال مثير للجدل، غالبا ما يطرحه مبرمج أنهكته تطبيقات سطح المكتب فأقبل على أبواب تعلم برمجة الويب الديناميكية Dynamic Web Development، أو مبرمج بصدد البدء في مشروع من نوع Web project إما Website أو Web application قهرته الحيرة والتردد.
سؤال اليوم: أيهما أفضل وأقوى PHP أم ASP.Net ؟ وبماذا أبدأ ؟
للإجابة على هذا السؤال علينا إسقاطه على ثلاث نقاط أساسية لنخلص بعدها إلى جواب علمي مرتكز على معايير واقعية وليس على أهواء وميولات.

النقطة الأولى: التكلفة Cost:

معلوم ان لغة PHP لغة مجانية، ويمكن تشغيلها على مختلف انظمة التشغيل من Windows و Mac و Linux، إضافة إلى أن استضافة المواقع والتطبيقات المبرمجة بها متوفرة ومتاحة بكثرة وسعرها مناسب جدا.
بينما تقنية ASP.Net تابعة لشركة ميكروسوفت، وهي ليست مجانية وإنما مدفوعة، ويا ليت الأمر يتوقف عندها بل إن التكاليف مستمرة، خصوصا أن المواقع والتطبيقات المبرمجة بتقنية ASP.Net لا تشتغل إلا على الويندوز وهو منتج مدفوع، أضف إلى ذلك أن بيئة التطوير الخاصة ب ASP.Net وهي الفيجوال ستوديو مدفوعة أيضا وليست مجانية، إلا في حال أردت أن تشتغل على بيئة Mono Project على نظام Linux و Mac أو تشتغل على النسخ Express من الفيحوال ستوديو وهي مجانية لكنها ليست بمستوى كفاءة وقوة النسخ الكاملة مثل Ultimate و Professional...
ويستمر تفوق PHP على ASP.Net إذا ما تطرقنا إلى موضوع التوافقية Interoperability مع قواعد البيانات، فسوف نجد أن لغة PHP متوافقة بشكل كبير مع نظام إدارة قواعد البيانات MySQL وهو منتوج مجاني متاح للجميع :)
بينما تستمر دواهي وطوام ASP.Net لنجد أنها متوافقة بشكل كامل مع نظام إدارة قواعد البيانات MS SQL Server وهو مدفوع وغير مجاني :) ما عدا النسخة Express طبعا.
إذن من حيث عامل التكاليف فلغة PHP أفضل بمراحل من تقنية ASP.Net

النقطة الثانية: الكفاءة والأداء Performance:

هذه النقطة بالذات لا نستطيع الجزم فيها لأن كلا من لغة PHP وتقنية ASP.Net تشتغلان بكفاءة عالية وبأداء جيد، ويمكنك الاطلاع على سرعة مواقع كبيرة مصممة بهما، فمثلا موقع Facebook وهو أكبر شبكة تواصل اجتماعي مبرمج بلغة PHP، وموقع StackOverFlow أكبر تجمع للمبرمجين حول العالم مبرمج بتقنية ASP.Net بالارتكاز على لغة C# التي أفردنا لها دورات ودروس عدة يمكنك الاستفادة منها من هنا:
ما دمنا نتحدث حول الأداء والكفاءة فدعوني أوجه رسالة لكل أخ مبرمج:
كفاءة البرامج مرتبطة بكفاءة المبرمج، فما دمت تعتمد على الدقة في كتابة الكود Optimize the code، وما دمت تحرص على كتابة استعلامات منسقة ونظيفة Clean and Proper SQL Queries فأنا أضمن لك أن كفاءة برامجك ستزداد.

النقطة الثالثة: مصادر التعلم

مصادر تعلم لغة PHP متوفرة بشكل أكبر من مصادر تعلم تقنية ASP.Net ولعل ذلك راجع إلى مجانية اللغة والعدد الكبير للمبرمجين بها.
كذلك من حيث سهولة التعلم فلغة PHP أسهل، يكفيك أن تتابع دورة أو تقرأ كتابا ثم تبدأ بتطوير برمجيات ب PHP، كما يكفيك أن تطلع على قليل من قواعد PHP لتبدأ تطوير أنظمى إدارة المحتوى Content Managemeny System مثل ووردبريس، والتي أفردنا لها دورة من ثلاثين حلقة يمكنك متابعتها من هنا:
أما تقنية ASP.Net فمصادر تعلمها نادرة قليلا بالقياس مع وفرة مصادر PHP، لكنها سهلة التعلم إن كان لك سابق عهد بإحدى لغات الدوت نيت (فيجوال بزيك أو سي شارب) إضافة إلى دعمها للعديد من تقنيات الويب بشكل بسيط نذكر على سبيل المثال تقنية Ajax التي ستستطيع استخدام مجموعة من الأدوات الجاهزة، كل ما عليك سوى سحبها داخل Source Code والاستمتاع بها، وقد أفردنا لها بضعة دروس يمكنك الاطلاع عليها من هنا:
أيضا تقنية ASP.net غنية جدا على مستوى تقارير الطباعة Reporting لأنها تدعم الكريستال ريبورت و Report Document بشكل قوي جدا، الشيء الذي سيجعل شعرك يشيب في PHP لأنها عقيمة على مستوى التقارير.

في الختام أحب أن أشير إلى أن الاختيار بين لغة PHP وتقنية ASP.Net يحكمه توجهك الخاص أخي المبرمج، فلو كنت من رواد الدوت نيت فالتحق بركب ASP.Net ولا تلتفت لكل ما يشاع فإنك على صواب.
أما إن كنت جديدا وليس لك دراية بإحدى لغات الدوت نيت، فلا تتردد بخوض غمار لغة PHP ورأسك مرفوع، وإن سألوك عن السبب قل لهم: أوصاني بها رجل من بلاد المغرب الأقصى.

كيف أغير لون أو صورة خلفية فورم من نوع MDI في الدوت نيت ؟

البرامج من نوع MDI هي برامج تحتوي على واجهة رئيسية تشمل كل شاشات البرنامج وتمكننا من عرض أكثر من شاشة في وقت واحد والتحكم فيها جميعا بأمر واحد، كأن نغلق جميع الشاشات الفرعية من قائمة موجودة في الشاشة الرئيسية وما إلى ذلك.
في الدوت نيت (فيجوال بزيك و سي شارب) إذا أردنا أن نجعل واجهة معينة رئيسية لمجموعة من الواجهات الأخرى فلا بد لنا من تغيير الخاصية IsMdiContainer من القيمة الافتراضية False إلى القيمة الافتراضية True.
لكن المشكلة التي ستواجهها أن لون خلفية الواجهة سيصبح رماديا داكنا لا يتغير حتى وإن استبدلته بلون آخر، بل ولا يعرض حتى الصورة التي نحددها له كخلفية سواء فعلنا ذلك يدويا من نافذة الخصائص Properties Window أو كتابة بالكود.
كل ما ستراه هو ذلك اللون البائس أعلاه :(
توجد أكثر من طريقة لحل المشكلة، إما أن نضع شرطا يتحقق من نوع الفورم فإن كان من نوع MDI Client نضع له صورة أو نغير لون خلفيته وهذه هي الطريقة الأسهل والأفضل على الإطلاق والتي سنستعرضها بإذن الله.
أو نقوم برسم صورة الخلفية بواسطة مستطيل Rectangle في الحدث Paint الخاص بالفورم الرئيسي.
الآن تعال معي لنستعرض الحلول.

تغيير لون الخلفية (بلغة Visual Basic.Net):

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        For Each ctl As Control In Me.Controls
            If TypeOf ctl Is MdiClient Then
                ctl.BackColor = Color.Aquamarine
            End If
        Next ctl
    End Sub

تغيير لون الخلفية (بلغة  C sharp.Net):

        private void Form1_Load(object sender, EventArgs e)
        {
                    foreach (Control ctl  in this.Controls)
                    {
                        if (ctl.GetType() ==typeof(MdiClient))
                        {
                            ctl.BackColor = Color.Aquamarine;
                        }
                    }
}

تغيير صورة الخلفية (بلغة Visual Basic.Net):


    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        For Each ctl As Control In Me.Controls
            If TypeOf ctl Is MdiClient Then
                ctl.BackgroundImage = Image.FromFile("c://myPic.jpeg")
            End If
        Next ctl
    End Sub

تغيير صورة الخلفية (بلغة  C sharp.Net):

        private void Form1_Load(object sender, EventArgs e)
        {
                    foreach (Control ctl  in this.Controls)
                    {
                        if (ctl.GetType() ==typeof(MdiClient))
                        {
                            ctl.BackgroundImage = Image.FromFile("c://myPic.jpeg");
                        }
                    }
        }
هذه بعض الطرق السريعة لإنجاز المطلوب وكما ذكرنا آنفا، يوجد لدينا طرق أخرى للقيام بنفس العمل.
نكتفي بهذا القدر ونلتقي في تدوينة قادمة إن شاء الله.
دام لكم البشر والفرح.