PDA

View Full Version : عدم عمل چند كليد اصلي در فرم



Modernidea
چهارشنبه 13 آذر 1387, 10:58 صبح
با سلام
در يكي از فرمهاي برنامه هيچ يك از كليدهاي "Enter, Tab" عمل نميكند. دليل چيست ؟
با تشكر

hamid1tarkesh
چهارشنبه 13 آذر 1387, 11:15 صبح
دلیل ناقص بودن توضیح شما راجب مشکلتونه

خوب تو این فرم چه کار کردید یا چه کد های دارید که در بقیه فرم ها ندارید که این جوری می شه ؟

داخل رویداد FormKeyPress چیزی ننوشتی ؟

اگه کمی توضیح بیشتری بدی بهتره
مرسی

Modernidea
چهارشنبه 13 آذر 1387, 12:01 عصر
نه در اون رويداد چيزي ننوشتم. اين فرم مشكلي نداشت نميدونم چي شده.
مثلا در بك اديت باكس نوشتم زماني كه كي برابر 13 شد يا زماني كه كاربر اينتر را زد به اديت باكس بعدي برود اما عملي انجام نيم شود.
يا اينكه در كلوز كواري نوشتم كه زماني كه مشخصه فلان درست بود فرم خروج را نشان بده و زمانه كه آن فرم نمايش داده ميشود و اينتر را ميزني آن فرم به پشت فرم قبلي مي رود و هيچ عمي انجام نميشود ولي اگر به جاي اينتر از اسپيس استفاده ميكردم مشكل حل ميشد و آن فرم به پشت فرم بعدي نميرفت و رويداد موجود در آن دكمه انجام ميشد.
اميدوارم متوحه شده باشيد.
ا

hamid1tarkesh
چهارشنبه 13 آذر 1387, 12:15 عصر
برای سوال اول کد زیر امتحان کنید
Shift+Enter کنترل قبلي
Enter کنترل بعدي


procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if Key = Char(VK_RETURN) then
begin
if HiWord(GetKeyState(VK_SHIFT)) <> 0 then
begin
keybd_event(VK_TAB, $45, KEYEVENTF_EXTENDEDKEY or 0, 0);
keybd_event(VK_TAB, $45, KEYEVENTF_EXTENDEDKEY
or KEYEVENTF_KEYUP, 0);
end
else
begin
keybd_event(VK_TAB, $45, KEYEVENTF_EXTENDEDKEY or 0, 0);
keybd_event(VK_TAB, $45, KEYEVENTF_EXTENDEDKEY
or KEYEVENTF_KEYUP, 0);
end;
Key:=#0;
end;
end;


سوال دوم هم متوجه نشدم شرمنده

SYNDROME
چهارشنبه 13 آذر 1387, 16:58 عصر
در قیمت KeyPress چک کردید که ببینید آیا کد فوق اجرا می شود و جواب نمی دهد و یا به هیچ عنوان کد اجرا نمی شود؟
کد خود را در اینجا قرار دهید.
موفق باشید

Modernidea
جمعه 15 آذر 1387, 10:08 صبح
در قیمت KeyPress چک کردید که ببینید آیا کد فوق اجرا می شود و جواب نمی دهد و یا به هیچ عنوان کد اجرا نمی شود؟
کد خود را در اینجا قرار دهید.
موفق باشید


if Key = Chr(13) then
begin
Key := chr(0);
Edit3.SetFocus;
end



من اين كد را در همه فرم ها قرار دادم و مشكلي ندارد نمي دونم چه مشكلي دارد كه فقط يكي دو تا از فرم را اين مشكل را پيدا كرده و فرم جديدي كه درست مي كنم اين مشكل را ندارد.
با تشكر

mafazel
جمعه 15 آذر 1387, 11:35 صبح
ولي اگر به جاي اينتر از اسپيس استفاده ميكردم مشكل حل ميشد و آن فرم به پشت فرم بعدي نميرفت و رويداد موجود در آن دكمه انجام ميشد.
دوست عزیز احتمالا فرمهایی که بقول شما Enter کار نمی کند مشکل از اینجا ناشی میشه که شما فرم رو ShowModal کردید و توی اون فرم یک دکمه با عنوان مثلا «تایید» یا «ثبت» دارید که مشخصه Default اون True هستش. در نتیجه وقتی اینتر رو میزنید اون دکمه اجرا میشه و فرمتون بسته میشه و اصلا به Edit نمیرسه. درست کار کردن Space هم همین مسئله رو نشون میده.
اگر در فرمی که ShowModal شده دکمه ای با Default:=True نداشته باشید با زدن اینتر در یکی از Edit ها صدای دینگ اخطار ویندوز پخش میشه که با دستوری که شما در OnKeyPress ادیت ها نوشتید (Key:=Chr(0 یا Key:=#0 این مسئله حل میشه.
بنابراین در فرمهایی که میخواهید از اینتر برای مقاصد خاص مثل رفتن به ادیت بعدی استفاده کنید Default اون دکمه یا هر دکمه دیگه ای رو False کنید. در همین رابطه مشخصه Cancel دکمه ها رو هم دقت کنید که با کلید Scape کار میکنه. در مورد Tab توضیحی ندارم.

SYNDROME
جمعه 15 آذر 1387, 11:51 صبح
if Key = Chr(13) then
begin
Key := chr(0);
Edit3.SetFocus;
end



من اين كد را در همه فرم ها قرار دادم و مشكلي ندارد نمي دونم چه مشكلي دارد كه فقط يكي دو تا از فرم را اين مشكل را پيدا كرده و فرم جديدي كه درست مي كنم اين مشكل را ندارد.
با تشكر

KeyPreview فرمتان را True کرده اید؟
آیا دستورات فوق در زمان زدن کلیدها اجرا می شود و یا اصلاً فراخوانی نمی شود؟
موفق باشید

Modernidea
جمعه 15 آذر 1387, 21:01 عصر
دوست عزیز احتمالا فرمهایی که بقول شما Enter کار نمی کند...
دوست عزيز من فرم را با دستور form.show فراخواني كردم و در آن فرم هيچ دكمه خاصيت defult يا cancel آن برابر True نيست.واقا گيج شدم!

Modernidea
جمعه 15 آذر 1387, 21:11 عصر
آقايون مشكل را پبدا كردم.

من يك فرم اصلي دارم كه وقتي از اون فرم يك فرم ديگر را فراخواني مي كنم در حالي كه در اون فرم دوم هستم بازهم عمليات keypress مانند اينتر و تب روي فرم اصلي انجام ميشود.

آيا راهي به جز غير فعال كردن فرم اصلي است؟

از همتون ممنونم.