PDA

View Full Version : مشکل در شبیه سازی کلید Tab



hghodsi
دوشنبه 20 مهر 1383, 07:49 صبح
با سلام

آیا می توان با فشار دادن کلید Enter در هنگام اجرای برنامه مثلا در داخل یک Panel عملکرد کلید enter را طوری تغییر داد که همانند کلید Tab عمل کند ؟ یعنی کد مربوطه را در خصوصیات onKeyPress قرار ندهیم.
من از کد زیر در پروپرتی onKeyPress استفاده می کنم ولی باید برای تمامی اشیا ایم کار را انجام بدهم . در برنامه بزرگتر که کلی اشیا استفاده می شود مشکل است :

<span dir=ltr>If Key=#13 then
( postmessage(handle,wm_nextdlgctl,0,0);</span>

در ضمن چگونه می توان با کلید ترکیبی مثلا با زدن کلید <span dir=ltr>Enter + Shift</span>
- Focus را به قبل برد یعنی به صورت معکوس حرکت کرد ؟ :?: :?: :?:

لطفا مرا راهنمایی کنید.

SalarSoft
دوشنبه 20 مهر 1383, 08:50 صبح
از رویداد OnKeyPress خود فرم استفاده کن.
اگه می خوای وضغیت shift رو بررسی کنی باید از رویداد onkeyDown استفاده کنی مثلا دستور زیر:

If &#40;Shift=ssShift&#41; and &#40;key=vk_return&#41; then

در ضمن حتما مقدار KeyPreview فرم را روی True قرار بده. :)

hghodsi
دوشنبه 20 مهر 1383, 16:34 عصر
جناب آقای SalarSoft
با تشکر و قدردانی از راهنمایی شما

قطعه کدی که در بالا اشاره کرده بودید گره کار مرا باز نمود . واقعا از پاسخ شما به این سوال متشکرم. در ضمن کدی که نوشته بودید یک کمی باید بصورت زیر تغییر کند تا جواب بدهد :

<span dir=ltr>If (Shift=[ssShift]) and (key=vk_return) then </span>

اگر ممکن باشد بفرمایید چگونه و با چه دستوری می توانم به جای حرکت به جلو به صورت tab معکوس عمل کنم؟؟؟ :?:

Mohammad S
دوشنبه 20 مهر 1383, 19:59 عصر
If Key=#13 then
postmessage&#40;handle,wm_nextdlgctl,-1,0&#41;;

hghodsi
سه شنبه 21 مهر 1383, 07:35 صبح
:flower:
1- اگر برایتان امکان داشته باشد می توانید بیشتر توضیح دهید چگونه می توانم از قطعه که بالا در Onkeydown استفاده کنم. امتحان کردم متاسفانه به نتیجه نرسیدم.

2- چگونه می توانم کلید میانبر برای رفتن به فرمها در برنامه تعریف بکنم. مثلا زمانی که کلید f2 را فشار می دهم در هنگامی که برنامه اجرا شده است بلافاصله فرم فعلی را بسته و فرم مورد نظر را باز کند. یا مثلا با زدن کلید F1 در هر قسمت از برنامه صفحه راهنما به نمایش درآید

Mohammad S
چهارشنبه 22 مهر 1383, 11:09 صبح
برای هر یک از اشیای صفحه که قرار است با Tab یا Shift+Tab یا Enter حرکت کند (چه به جلو و چه عقب) باید کد فوق را بنویسید.
کدی که من در بالا نوشتم (#13) مربوط به Enter‌بود. برای حرکت توسط Shift+Enter باید به صورت زیر بنویسی:

If &#40;Shift=&#91;ssShift&#93;&#41; and &#40;key=vk_return&#41; then
postmessage&#40;handle,wm_nextdlgctl,-1,0&#41;;
---------------------------

procedure TForm1.FormKeyDown&#40;Sender&#58; TObject; var Key&#58; Word;
Shift&#58; TShiftState&#41;;
begin
if Key=VK_F2 then
begin
Form1.Hide;
Form2.Show;
end;
end;
ضمنا خاصیت keyPreview‌ مربوط به فرمی که قرار است در آن کلید F2 فشرده شود هم باید True شود.
:sunglass:

hghodsi
چهارشنبه 22 مهر 1383, 14:05 عصر
از جوابتان متشکرم

البته کد بالا با کمی تغییر بصورت زیر درست کار می کند :

<span dir=ltr> If (Shift=[ssShift]) and (key=vk_return) then
PostMessage(Handle, WM_NextDLGCTL, 1, 0)
else
if key=vk_return then postmessage(handle,wm_nextdlgctl,0,0);</span>

این کد را در OnkeyDown خود فرم (نه در تک تک اشیا) قرار دادم مشکلم حل شد : اگر کلید Enter زده شود به سمت جلو و اگر کلید ترکیبی Shift + Enter زده شود به سمت عقب حرکت خواهد کرد. <span dir=ltr></span>