• 0
hadi2005

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

سؤال

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

 

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

 

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

 

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

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

 

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

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

 

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

 

 

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

 

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

 

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

 

 

شكرا جزيلا 

تم تعديل بواسطه hadi2005
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

5 إجابة على هذا السؤال .

  • 0

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

  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
3

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

 

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

 

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

 

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

 

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

 

بخصوص الكود :

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

 

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

 

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

 

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

 

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

 

ولكن ..

 

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

 

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

 

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

 

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

 

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

 

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

 

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

 

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

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

 

بس السؤال : كيف جعلت ال 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
2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

 

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

 

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

 

بخصوص الكود :

 

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

 

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

 

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

 

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

 

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

 

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

 

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

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

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

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .