PDA

View Full Version : قفل کردن کلید



soft-c
جمعه 06 اسفند 1389, 00:00 صبح
سلام.
در رویداد onkeypress وقتی می نویسیم key:=#0 کلید قفل میشه ولی در onkeydown این کد جواب نمیدهد .
برای قفل کردن دراین رویداد از چه دستوری استفاده کنم ؟
تشکر.

Felony
جمعه 06 اسفند 1389, 07:57 صبح
OnKeyDown پیغام WM_KeyDown و OnKeyPress پیغام WM_Char رو بررسی میکنه ، وقتی تو رویداد OnKeyPress یک کلید زده شده رو با 0# مقدار میدید یعنی کد اسکی رو با 0 مقدار دهی کردید چون WM_Char مقدار کد اسکی رو منتقل میکنه و برنامه کد اسکی 0 دریافت میکنه ولی وقتی یک کلید رو تو رویداد OnKeyDown مقدار 0 میدید درسته تو اون رویداد تائثیر داره ولی کارکترها توسط WM_Char به برنامه تحویل داده میشن پس هنوز شما کارکتر اصلی رو 0 نکردید ، پس باید از OnKeyPress استفاده کنید ، اگر هم کلیدی که زده میشه جزء کارکترها و اعداد نیست ( کد اسکی نداره ) تو همون رویداد OnKeyDwon میتونید تبدیلش کنید یا ...

soft-c
جمعه 06 اسفند 1389, 13:10 عصر
سلام.
ولی مشکل این است که در onkeypress نمی توانم به این صورت مقدار دهی کنم :
if key=112 ولی در keydown میشه این کار را کرد .
تشکر.

Felony
جمعه 06 اسفند 1389, 19:43 عصر
سلام.
ولی مشکل این است که در onkeypress نمی توانم به این صورت مقدار دهی کنم :
if key=112 ولی در keydown میشه این کار را کرد .
تشکر.
نباید هم قبول کنه !
تو تعریف رویداد OnKeyPress پارامتری از نوع عدد میبینید که حالا توقع دریافت عدد دارید ؟ OnKeyPress یک کارکتر بهتون تحویل میده و میتونید برای تغییر یک کارکتر بهش بدید ، کدتون به صورت زیر میشه :

if Key= Chr(112) then

tdkhakpur
جمعه 06 اسفند 1389, 21:50 عصر
ولی مشکل این است که در onkeypress نمی توانم به این صورت مقدار دهی کنم :
if key=112 ولی در keydown میشه این کار را کرد .


با ord میتوانید این تبدیل رو انجام بدید.
اما بحث اینکه چرا دو event فوق در کد شما عکس العمل مشابهی رو انجام نمیدن این هست که در رویداد onkeypress این امکان در قسمت تحلیل مفسر دلفی قرار داده شده تا بتوانید تغییر در صف کلیدها رو انجام بدید یعنی باعث بشید مثلا کلید بعد از خروج از پروسه مقدار جدید به خود بگیره اما در onkeydown این امکان قرار داده نشده است.
در ضمن در onkeydown شما میتوانید کلیدها رو بر اساس یونیکد هم داشته باشید اما در onkeypress اینگونه نیست.