الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

قراء الباركود داخل البرنامج

بدأه hadi2005 في 23 أبريل 2013 · 5 رد · 3,300 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

 

السلام عليكم ورحمة الله وبركاته ،،،،

 

عندي استفسار بخصوص قراءة الباركود ...

 

في برنامجي ... قدرت اطبع الباركود عن طريق الكريستال ريبورت ...

ولكن المشكلة في القراءة ...

 

الان ... الباركود يعمل مثله مثل الكيبورد .... 

مشكلتي اني اريد عندما يقرا الباركود ... يتم تحويله بشكل تلقائي الى textbox معين "مثلا" .

 

بحثت كثيرا ولقيت طريقة بس ماني عارف كيف استخدمها ... باستنخدام ال prefix وال suffix  . وقدرت اضيف prefix معين للباركود الخاص بي .. 

 

 

المفروض انه عندما يقرا الباركود ... اذا وجد رمز معين ولنقل [FQ] يبدا بقراءة ما بعده على انه رمز قادم من جهاز باركود ويحوله على TEXTBOX معين خاص به ...

 

بس ماني عارف ايش الكود اللي يسوي هادا الشي ..

 

اتمنى الاقي عندكم حلول ... :)

 

 

شكرا جزيلا 

تم تعديل هذه المشاركة بواسطة hadi2005 في 23 أبريل 2013 في 17:09

#2

السلام عليكم ...

  1. الــ barcode reader  يعمل مثل لوحة المفاتيح تماما , يولد نفس الــ Events  الخاصة بلوحة المفاتيح ...
  2. غالبا أجهزة الــ barcode reader  تولد مجموعة من الأحرف منتهية بالمحرف المسمى carriage return  الذي كوده 13 يقابل الزر Enter  في لوحة المفاتيح .
  3. أفهم من كلامك أنك قمت بإعداد الــ barcode reader  ليضع لك هذه الــ prefix  و الــ suffix  .؟؟ هذا جيد ...
  4. المشكلة انه لا يمكننا التمييز بين الأحداث القادمة من لوحة المفاتيح الفعلية و الاحداث القادمة من الــ barcode reader  و لحل ذلك سنقارن الزمن بين ضغطات المفاتيح فالباركود ريدر يولد النقرات بسرعة.
  5. استخدم هذا الكود إذا و أخبرنا بالنتائج ..
    DateTime _lastKeystroke = new DateTime(0);
    List<char> _barcode = new List<char>(10);
    
    private void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {
        // check timing (keystrokes within 100 ms)
        TimeSpan elapsed = (DateTime.Now - _lastKeystroke);
        if (elapsed.TotalMilliseconds > 100)
            _barcode.Clear();
    
        // record keystroke & timestamp
        _barcode.Add(e.KeyChar);
        _lastKeystroke = DateTime.Now;
    
        // process barcode
        if (e.KeyChar == 13 && _barcode.Count > 0) {
            string msg = new String(_barcode.ToArray());
            MessageBox.Show(msg);
            _barcode.Clear();
        }
    }

     

  6. ضع الخاصية Form.KeyPreview بالقيمة True  و عالج حدث الــ KeyPress للفورم ..

  7. الكود السابق يفترض أن نهاية الباركود هي الــ Carriage return   في حالة لديك بادئة و لاحقة سيكون الكود شبيها بمايلي :

    DateTime _lastKeystroke = new DateTime(0);
            List<char> _barcode = new List<char>(10);
            char prefix = 'a';
            char suffix = 'b';
            bool isprefixPressed = false;
    
            private void Form1_KeyPress(object sender, KeyPressEventArgs e)
            {
                // check timing (keystrokes within 100 ms)
    
    
                TimeSpan elapsed = (DateTime.Now - _lastKeystroke);
                if (elapsed.TotalMilliseconds > 100)
                    _barcode.Clear();
    
                if (e.KeyChar == prefix)
                {
                    _barcode.Clear();
                    isprefixPressed = true;
                    return;
                }
                else if (!isprefixPressed)
                    return;
                else if (isprefixPressed && e.KeyChar == suffix && _barcode.Count > 0)
                {
                    string msg = new String(_barcode.ToArray());
                    MessageBox.Show(msg);
                    _barcode.Clear();
                    isprefixPressed = false;
                    return;
                }
    
    
                _barcode.Add(e.KeyChar);
                _lastKeystroke = DateTime.Now;
            }

     

  8. رابط المصدر (get barcode reader value form background monitoring)

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 23 أبريل 2013 في 19:49

3

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

السلام عليكم ورحمة الله وبركاته،،،

 

استاذ حسام ،،، 

 

دائماً تبهرني بحلولك و إبداعاتك ،،،، الله يزيدك من فضله :)

 

لي يومين ودخت من كثر ما ادور في النت على جواب لسؤالي . 

 

الكود اشتغل ولله الحمد بس عنندي شوية استفسارات ان شاء الله الاقي جواب لها عندك :

 

بخصوص الكود :

DateTime _lastKeystroke = new DateTime(0);
        List<char> _barcode = new List<char>(10);

 

هنا عرفت متغير _barcode 

 

بس السؤال : كيف جعلت ال Keypress يعبي في ال _barcode ؟ ؟؟

 

السؤال الثاني :

 

حالياً : يقرأ الباركود و يظهر message box بالباركود 

 

ولكن ..

 

لو كنت في txtbox معين ... سيكتب الباركود ايضاً في هذا الtextbox مع البادئة واللاحقة طبعاً .

 

المطلوب هو .. انو في حال كانت القراءة من الباركود فإنه يضع الباركود في textbox معين بغض النظر عن ال textbox اللي عليه ال focus .

 

يعني .... اذا كان المستخدم وضع المؤشر على textbox2 

 

ومن ثم قرأ باركود ... المفترض يضع قراءة الباركود في textbox1 على سبيل المثال ..

 

اتمنى تكون الصورة واضحة ....

 

شكرا جزيلا لك على مساعدتك لي ولجميع الاعضاء ..

 

الله يقويك على فعل ما يحبه ويرضاه :)

#4

السلام عليكم و رحمة الله و بركاته .

 

اقتباس

دائماً تبهرني بحلولك و إبداعاتك ،،،، الله يزيدك من فضله

بارك الله بك أخي ... و زادك من فضله أيضا .

 

اقتباس

بس السؤال : كيف جعلت ال Keypress يعبي في ال _barcode ؟ ؟؟

طالما أننا وضعنا الخاصية Form.KeyPreview بالقيمة true فهذا يعني أن الحدث Keypress  سيتفعل على الفورم حتى لو كان الــ Focus  داخل textbox  , ثم قمنا بالتقاط المفتاح الذي تم الضغط عليه و قارنا الزمن الحالي من زمن آخر عملية القاط أحرف , فلو كانت ضمن الزمن نقوم بإضافة الحرف إلى الـــ list  المسماة barcode_  . طبعا نعالج موضوع الــ prefix  و الــ suffix  .

 

اقتباس

المطلوب هو .. انو في حال كانت القراءة من الباركود فإنه يضع الباركود في textbox معين بغض النظر عن ال textbox اللي عليه ال focus .

سنقوم بتعديل بسيط , طبعا يمكننا وضع الــ Prefix  و الــ Suffix  على أنها أحرف غير مستخدمة أنا سأفترض انك قمت بإعدادها لتكون البادئة هي المحرف المقابل للرقم 2 و الذي يكافئ الضغط على CTRL + b  في لوحة المفاتيح (يظهر في النظام كأنه مفتاح واحد) .. و أن الــ Suffix  هي المحرف المقابل للرقم 10 الذي يكافئ الضغط على CTRL + j  في لوحة المفاتيح .

و بالتالي يكون الكود :

DateTime _lastKeystroke = new DateTime(0);
        List<char> _barcode = new List<char>(10);
        int  prefix = 2; // CTRL + b
        int  suffix = 10; // CTRL + j
        
        bool isprefixPressed = false;

        private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            // check timing (keystrokes within 100 ms)
                   
            int i = e.KeyChar;
            //MessageBox.Show(i + "");
            e.Handled = true;
            TimeSpan elapsed = DateTime.Now - _lastKeystroke;
            _lastKeystroke = DateTime.Now;
            if (elapsed.TotalMilliseconds > 100)
            {
                _barcode.Clear();
                isprefixPressed = false;
            }

            if (i == prefix)
            {
                _barcode.Clear();
                isprefixPressed = true;
                return;
            }
            else if (!isprefixPressed)
            {
                e.Handled = false;
                return;
            }
            else if (isprefixPressed && i == suffix && _barcode.Count > 0)
            {
                string msg = new String(_barcode.ToArray());
                //MessageBox.Show(msg);
                txtBarCode.Text = msg;
                _barcode.Clear();
                isprefixPressed = false;
                return;
            }

            _barcode.Add(e.KeyChar);
           
        }

 ملاحظة : المفاتيح CTRL +b  و CTRL + j  يجب عدم استخدامها في البرنامج ..

Using a bar code scanner in .NET

Distinguishing Barcode Scanners from the Keyboard in WinForms (رابط) و الكود في الصفحة ذاتها .

 

لمن يريد التوسع , هذا كود للتعامل مع اكثر من keyboard  (يفترض أن reader  هو كيبورد) رابط  .

 

بارك الله بك أخي ...

أرجو أن يكون هذا مطلبك و أرجو أن لا أكون قد نسيت شئ ...

لكن ألا يوجد مع  الــ barcode reader   عندك أي software  للتعريف أو الاستخدام ..؟

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 24 أبريل 2013 في 17:39

2

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5

أخي الكريم حسام ،،،،

 

شكر لردك السريع ،،،

 

اولا ، جواباً على سؤالك بخصوص ال barcode reader  : للأسف لا :'(

 

بخصوص الكود :

 

حسب ما فهمت ،،، غيرت ال prefix و ال suffix لاحرف غير مستخدمة وذلك لكي لا يتوقف عمل الكيبورد عند ضغط احد هذه ال prefix أ و ال suffix ..... صحيح ؟؟

 

طيب ،،، ما هي افضل prefix يمكن عملها في هذه الحالة ؟؟

 

دوختك معايا ... آٍسف :)

#6

السلام عليكم ...

بارك الله بك أخي ...

 

hadi2005 كتب:

حسب ما فهمت ،،، غيرت ال prefix و ال suffix لاحرف غير مستخدمة وذلك لكي لا يتوقف عمل الكيبورد عند ضغط احد هذه ال prefix أ و ال suffix ..... صحيح ؟؟

 

طيب ،،، ما هي افضل prefix يمكن عملها في هذه الحالة ؟؟

 

دوختك معايا ... آٍسف :)

 

تماما , قمت بتغييرها لأحرف غير مستخدمة ... طبعا يجب إعداد الــ Barcode reader  كي يرسل نفس الــ prefix  و الــ suffix  .

اعتقد ان أفضل prefix  هي تلك التي لا يستخدمها البرنامج ... ببساطة .. مثلا تلك التي وضعتها أنا كـــ  CTRL + b  و CTRL + j  مثلا ..

بارك الله بك .. بالتوفيق .

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

مواضيع مشابهة