ورود

View Full Version : تغییر کد کلید زده شده



Unique
چهارشنبه 18 بهمن 1385, 14:23 عصر
سلام ..


سوال ممکن هست که تکراری باشه ولی مشکل من در طریقه استفاده است !
مشکل من روی دو حرف ی و ک هستش !

من میخوام توی یک Edit Box اگه کد 1705 بود 1603 را جایگزین کنم !
اگه 1740 بود 1610 را .

اما onkeypress فقط بین 0 تا 255 را بر می گردونه ونمیشه کد چهار رقمی بهش داد !

hr110
چهارشنبه 18 بهمن 1385, 14:26 عصر
دوست عزیز دلفی یونیکد رو پشتیبانی نمیکنه
ولی هر مشکلی یک راهی داره
...

Unique
چهارشنبه 18 بهمن 1385, 15:51 عصر
جناب مدیر !
نمیدونم Reply شما برای راهنمایی بود یا ... ! (... : هر منظوری که شما از سه نقطه دارید)
اگه کسی بدون با API خود ویندوز چطوری میشه این کار را کرد هم خوبه ! (حالا یکی نیاد بگه Keyboard Hook ! لطفا راهنمایی کنید .)

در ضمن من یادم یکی قبلا راه حل این را با خود دلفی گفته بود ! اما یادم نمیاد چطور و Post اون را هم پیدا نکردم !

arshia_
پنج شنبه 19 بهمن 1385, 09:29 صبح
روش کار رو می شه طور دیگه ای هم انجام داد
اول رشته مورد نظر رو بدون کم و کاست از ورودی بگیرید
بعد رشته مورد نظر رو با کمک حلقهfor وا if بررسی کنید و هر جا حرف ی بود با حرف ی مورد نظر جایگزین کنید و هر جا ک بود با اون ک مورد نظر و بعد از اون رشته تصحیح شده رو به قسمت مورد نظر برای ثبت یا جستجو ارسال کنید

Unique
پنج شنبه 19 بهمن 1385, 21:38 عصر
صحبت شما متین !
ولی فکرش را بکنید که 20 یا 30 تا Editbox روی فرم دارین و میخواهیم همه را چک کنیم !
(البته روش هایی هم هست که این کار را هم راحت کنه ! مثلا میشه توی یک beforepost فیلد های متنی را چک کرد ! و تغییرات لازم را داد ! بدون اینکه کاری به Editbox ها داشته باشیم .)
اما اگه کمی کر کنی ! متوجه میشی که زمان OnkeyPress بهترین زمان برای این کار هست !
من یادمه یکی از دوستان روش کار را قبلا در سایت گذاشته بود !

mzjahromi
جمعه 20 بهمن 1385, 08:22 صبح
من این کار رو نکردم ولی یه سری روش به شما میدم ببین جواب میده یا نه
یه ApplicationEvent بذار روی فرمت و توی OnMessage اون سعی کن پیام مربوط به کیبورد رو پیدا کنی. احتمالا از اون طریق بتونی این کار رو بکنی. خود من برای خوندن ازش استفاده کردم ولی برای تغییر دادن هم باید بشه. اونوقت یک بار برای کل برنامه کافیه.
اگه مشکلی داشتی بگو با هم حلش می کنیم

Unique
جمعه 20 بهمن 1385, 23:31 عصر
خوب وقتی صحبت از Message به وسط میاد ! مشخصا باید دنبال Message های کیبور بگردیم !
که اونهایش که به درد بخور هستند ! WM_KEYDOWN و WM_KEYUP هستند ! که هر کدوم مقادیر زیر را توی applicationevent.msg میگذارند :



WM_KEYDOWN OR WM_KEYUP
nVirtKey = (int) wParam; // virtual-key code
lKeyData = lParam; // key data



ولی هیچکدوم به درد نمیخورند چون اونها هم تا 255 را بیشتر بر نمیگردونند !

arshia_
شنبه 21 بهمن 1385, 09:34 صبح
برای ساده تر شدن روش ذکر شده می تونید یه تابع تعریف کنید که عمل مقایسه رو انجام لده و مقادیر درست رو جایگزین کنه و بعد در ایونت onexit مربوط به تمام ایدت باکس هایی که مورد نظر شماست به اون تابع ربط بدین که موقع خروج از هر editbox‌این کار انجام بشه
اینطوری دیگه درگیر توابع خشک و پیچیده نمی شی

Hamid_PaK
یک شنبه 22 بهمن 1385, 10:21 صبح
یه پیشنهاد ...
ببینید در هر صورت وقتی کلیدی فشرده می شود کدی به برنامه ارسال می شود برای اینکه بدانید این کد از چه نوعی است کیبورد در حالت فعال را آزمایش کنید و در صورتی که فارسی بود به کدهای اسکی ویندوز که مربوط به انگلیسی می شود مقادیر ثابطی را بیافزایید و کد اسکی فارسی را بدست آورید ....


یا حق ....

user addi
یک شنبه 22 بهمن 1385, 17:00 عصر
میتونی از onkeydown و onkeyup هم استفاده کنی. من از این ها برای برنامه هام استفاده می کنم

یونی کد رو هم میتونی اینجا استفاده کنی