PDA

View Full Version : كاربر نتواند از صفحه كليد استفاده كند؟



mohsen_r
شنبه 24 اردیبهشت 1390, 13:57 عصر
با سلام
من به وسيله يك باركدخوان اطلاعات باركد را گرفته ودر يك edit ميريزم چگونه ميتوانم دسترسي كاربر را از صفحه كليد بگيرم تا نتواند مقدار وارد اين edit كند

loo30fer
شنبه 24 اردیبهشت 1390, 15:26 عصر
خوب خاصیت ReadOnly ادیت رو فعال کنید تا کاربر نتونه ادیت رو ویرایش کنه.

mohsen_r
یک شنبه 25 اردیبهشت 1390, 07:46 صبح
خوب خاصیت ReadOnly ادیت رو فعال کنید تا کاربر نتونه ادیت رو ویرایش کنه.

وقتي خاصيت ReadOnly رافعال كنيم باركدخوان كه نمي تونه كد را وارد كنه(اين راهها چك شده )

drstrike
یک شنبه 25 اردیبهشت 1390, 09:22 صبح
توی رویداد KeyPress اون Edit ات مقدار متغیر Key رو نال بده.

M_Maskout
یک شنبه 25 اردیبهشت 1390, 09:30 صبح
وقتي خاصيت ReadOnly رافعال كنيم باركدخوان كه نمي تونه كد را وارد كنه(اين راهها چك شده )
سلام
این به این خاطر هست که بارکد خوان، عبارت خوانده شده رو تو بافر کیبورد می‌ریزه و بعد سیستم عامل فکر می‌کنه که کلیدی زده شده. با اینحال مطمئن بشید که وقفه‌های KeyDown، KeyUp و KeyPress در زمان خوندن کد، فعال می‌شن یا نه. یه راه دیگه اینکه با توجه به اینکه بارکد خوان، کد خونده شده رو خیلی سریع تایپ می‌کنه، یه تایمر رو تو OnChange همون edit فعال کنید و طوری کد تایمر رو بنویسین که بعد از یه زمان مشخص (مثلاً 2 میلی ثانیه) edit رو ReadOnly کنه.

یوسف زالی
یک شنبه 25 اردیبهشت 1390, 13:44 عصر
با Sender نمی شه تستش کرد؟

mohsen_r
یک شنبه 25 اردیبهشت 1390, 14:07 عصر
توی رویداد KeyPress اون Edit ات مقدار متغیر Key رو نال بده.

شرمنده تست شده

mohsen_r
یک شنبه 25 اردیبهشت 1390, 14:13 عصر
سلام
این به این خاطر هست که بارکد خوان، عبارت خوانده شده رو تو بافر کیبورد می‌ریزه و بعد سیستم عامل فکر می‌کنه که کلیدی زده شده. با اینحال مطمئن بشید که وقفه‌های KeyDown، KeyUp و KeyPress در زمان خوندن کد، فعال می‌شن یا نه. یه راه دیگه اینکه با توجه به اینکه بارکد خوان، کد خونده شده رو خیلی سریع تایپ می‌کنه، یه تایمر رو تو OnChange همون edit فعال کنید و طوری کد تایمر رو بنویسین که بعد از یه زمان مشخص (مثلاً 2 میلی ثانیه) edit رو ReadOnly کنه.

آخه مشكل من قبل از خواندن باركد خوان كه نميخوام كد وارد بشه بعدش كه بعد از خواندن باركد edit مي بندمش

mohsen_r
یک شنبه 25 اردیبهشت 1390, 14:14 عصر
با Sender نمی شه تستش کرد؟

چطوري تستش كنم باركد خوانا يا كي برد

یوسف زالی
یک شنبه 25 اردیبهشت 1390, 14:28 عصر
با اجازه صاحب نظران.

منظورم اینه که دقیقا روال طی شده همون KeyBoard Hit هست؟
اگه کیبرد باشه که Sender خود اسم Edit میشه.
ببین Sender بازم اسم Edit هست یا مثلا Nil هست؟
(Sender as TEdit).Name
اگه Sender خود Edit بود جلوشو بگیر.

یوسف زالی
یک شنبه 25 اردیبهشت 1390, 14:34 عصر
فکر کنم بشه یه کلک زد.
جای اون Edit یه String پر کن و از رو اون String مقدار Edit رو عوض کن.



procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := 'salam';
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
if Edit1.Tag = 1 then
Edit1.Text := '';
end;
procedure TForm1.Edit1Enter(Sender: TObject);
begin
Edit1.Tag := 1;
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
Edit1.Tag := 0;
end;

mohsen_r
سه شنبه 27 اردیبهشت 1390, 07:43 صبح
فکر کنم بشه یه کلک زد.
جای اون Edit یه String پر کن و از رو اون String مقدار Edit رو عوض کن.



procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := 'salam';
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
if Edit1.Tag = 1 then
Edit1.Text := '';
end;
procedure TForm1.Edit1Enter(Sender: TObject);
begin
Edit1.Tag := 1;
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
Edit1.Tag := 0;
end;


وقتي از باركدخوان استفاده مي كنيم گزينه enteredit يا enterchange همه در حال استفاده هستند و نميشه اونا را چك كرد
در ضمن منظور از Button1Click كه Edit1.Text را پر كنه چيه چه استفاده اي داره

یوسف زالی
سه شنبه 27 اردیبهشت 1390, 08:05 صبح
منظور اینه که تفاوت قایل شده بین Change دستی و کدی.
به نظرم بریزش تو یه String و کدی Edit رو پر کن.
اون دکمه هم مثلا کد شماست.
امتحان کرده باشی فقط تو کد اجازه پرکردن می ده و دستی نمیگذاره.
شاید هم سیستم یه فرقی قایل بشه تو فراخوانی کردن رویدادهای دستی و بارکد.
مثلا تست کن ببین OnKeyPress یا OnKeyDown یا چیز دیگه ای ممکنه تو دستی فراخوانی بشه اما تو بارکدی نشه.
اگه این طور هست میشه تشخیص داد.
راه دیگه ای به ذهنم نمی رسه.متاسفانه بارکدخوان هم دم دست ندارم.
اگر به نتیجه ای رسیدید لطفا بگذارید تا ما هم استفاده کنیم.

M_Maskout
سه شنبه 27 اردیبهشت 1390, 08:12 صبح
سلام
اصلاً مطمئن هستید، چنین کاری، عملیه؟
بارکد خون مثل یه کیبورد عمل می‌کنه و انگار شما دوتا کیبورد به دستگاه وصل کردین. حالا چه PS2 باشه چه USB. حتی اگه ویندوز اون رو به عنوان سخت افزار دیگه‌ای غیر از کیبورد بشناسه (در مورد PS2ها مطمئنم که اینطور نیست) باز هم باهاش رفتار کیبورد رو می‌کنه. این یعنی اینکه شما اصولاً نمی‌تونید جلوی استفاده از کیبورد رو تو برنامه بگیرین مگر با روش‌های معمول (ReadOnly، Disable و ...) که در اینصورت قطعاً بارکد خون هم از کار می‌افته. بارکد خونی که من یه وقتی باهاش کار می‌کردم، حتی تو DOS هم کار می‌کرد و این به خاطر همین بود که عملاً مثل یه کیبورد به دستگاه وصل می‌شه.
لطفاً اگه به نتیجه رسیدین، بنده و سایر دوستان رو مورد لطف قرار بدین و روش‌تون رو همیچا اعلام بفرمایین.:خجالت:

M_Maskout
سه شنبه 27 اردیبهشت 1390, 08:16 صبح
به نظرم بریزش تو یه String و کدی Edit رو پر کن.
دوست عزیز چطوری می‌شه تو یه String تایپ کرد؟ بالاخره قراره با چیزی تو String اطلاعات وارد بشه. خوب همونجوری که کاربر Edit رو دستکاری می‌کنه، String رو هم دستکاری می‌کنه.
فقط امیدوارم منظورتون، پر کردن String در زمان کد نویسی نباشه!!!:متعجب:

یوسف زالی
سه شنبه 27 اردیبهشت 1390, 08:20 صبح
نه بابا دیگه این قدر ها هم داغون نیستم!!
اگه تمام رویدادهاش مثل کیبرد هست من تسلیم تا اطلاع ثانوی!!
(می رم تستش کنم)