PDA

View Full Version : روش استفاده از بارکد خوان (طوری که هرجای فرم بارکد خوانده شد عمل کند)



Delphi7_love
چهارشنبه 01 دی 1389, 20:22 عصر
نحوه استفاده از دستگاه بارکد خوان مثل کیبورد است
به این شکل که مثلا اگر داخل یه ادیت باشی بارکد رو داخل همون ادیت میریزه و بعد یه اینتر میزنه
حالا مشکل من اینجاس که میخخوام هر جای فرم بارکد خونده شد مقدارش فقط داخل ادیت مورد نظر من بیاد

Felony
چهارشنبه 01 دی 1389, 21:53 عصر
برای این کار باید پیغام های مربوط به صفحه کلید رو بررسی کنید ( مثلا WM_KeyDown ) ، مشکل اینجاست که بارکد خوانتون مثل صفحه کلید عمل میکنه و اگر قرار باشه یه روال سراسری براش نوشته بشه کار صفحه کلید رو هم مختل میکنه ، یعنی کاربر ممکنه تو یه Edit بخواد با صفحه کلید مثلا نامش رو وارد کنه ولی چون برنامه رو به پیغام های صفحه کلید حساس کردید برنامه فکر میکنه بارکدخوان داره این کار رو میکنه و متن وارد شده رو تو Edit مورد نظر شما وارد میکنه !

در هر صورت باید با ترفندی این مشکل رو رفع کنید ، مثلا Message Handler رو برای اشیاء خاصی بنویسید یا ...

برای تعریف Message Handler به صورت سراسری هم باید یک Message Handler بنویسید و اون رو به رویداد OnMessage شئ Application اختصاص بدید ، تعریف زیر رو به قسمت Private فرمتون اضافه کنید :

Procedure MyMessage(var Msg: TMsg; var Handled: Boolean);
و به صورت زیر کدش رو بنویسید :

procedure TForm1.MyMessage(var Msg: TMsg; var Handled: Boolean);
begin
if Msg.message= WM_KEYDOWN then
begin
Edit1.Text:= Edit1.Text+ Chr(Msg.wParam);
Msg.wParam:= 0;
end;
end;
و در رویداد OnCretae فرم برنامتون :

Application.OnMessage:= MyMessage;