PDA

View Full Version : فشرده شدن کلید



SyntaxCheck
یک شنبه 30 شهریور 1382, 01:36 صبح
دوستان سلام
من به مشکلی برخورد کردم. اون رو اینطور مطرح میکنم که فرضا بنده در OnKeyDown و یا OnKeyPress از یک شئ کدی رو بنویسم و در اون کد فشرده شدن کلید اینتر (VK_RETURN) رو کنترل کنم.حالا در بین همین پراسیجر و در صورت فشرده شدن کلید اینتر نیاز دارم که یک مسیجباکس که خودم اون رو نوشتم به نمایش در بیاد. کلید دیفالت مسیجباکس روی OK هست. حالا چون این قسمت نمایش مسیجباکس در بین رویداد OnKeyDown قرار داره و کلید فشرده شده در بافر صفحه کلید هنوز موجوده به محض اینکه مسیجباکس من باز میشه ، کلید OK فشرده میشه و بسته میشه.
سوال بنده اینه آیا میشه در بین روال کنترل کلید و قبل از اتمام اون کلید فشرده شده رو از بافر صفحه کلید خارج کنیم؟ اینکار رو بصورت عادی میشه با مثلا KEY=0 انجام داد اما کلید زمانی مقدارش عوض میشه که کل کد موجود در OnKeyDown اجرا بشه و اجرا از پراسیچر روال OnKeyDown خارج بشه.
منتظر نظرات شما دوستان هستم
پیروز باشید وشاد

Kambiz
یک شنبه 30 شهریور 1382, 03:01 صبح
var Msg: TMSG;

repeat until not PeekMessage(Msg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE);

SyntaxCheck
یک شنبه 30 شهریور 1382, 03:13 صبح
سلام
ممنون از پاسختون
من کد رو درست قبل از فراخوانی مسیج باکس نوشتم اما نتیجه ای نداشت و مجدد کلید اینتر داخل مسیجباکس بمحض باز شدن عمل میکنه.

houshmand
یک شنبه 30 شهریور 1382, 11:12 صبح
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then
ShowMessage('test');
//or MessageBox(form1.Handle,'test','test',MB_OK);
end;
end;

من این کار را کردم و مشکلی نداشت شاید مشکل از مقدار زیادrepeat delay وRepeat rate صفحه کلید باشد
//*************************

ولی شاید قرار دادن Application.HandleMessage مشکل شما را حل کند


procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then
begin
key:=0;
Application.HandleMessage;
ShowMessage('test');
//or MessageBox(form1.Handle,'test','test',MB_OK);
end;
end;

SReza1
یک شنبه 30 شهریور 1382, 20:46 عصر
از apllication.processmess استفاده کن ببنی جواب میده یا نه

Kambiz
یک شنبه 30 شهریور 1382, 20:51 عصر
اگر لطف کنی و اون کدی رو که مشکل داره اینجا بنویسی راحتتر می‌شه مشکل رو پیدا کرد.

SyntaxCheck
یک شنبه 30 شهریور 1382, 21:38 عصر
سلام
آقای خجسته راهنمایی شما خیلی سودمند بود. من در یک پنجره از یک کامپوننت کلید که خودم نوشته بودم استفاده کردم که متوجه شدم این کامپوننت ایراد داره. ممنون و متشکر از کمکتون.