ورود

View Full Version : سوال: انتقال کرسر با زدن کلید Enter



soft-c
یک شنبه 17 مرداد 1389, 12:11 عصر
سلام.
میشه یک کد بگین که با enter کردن روی یک edit ، کرسر روی edit بعد قرار بگیرد .
تشکر.

Felony
یک شنبه 17 مرداد 1389, 13:21 عصر
میتونید در رویداد OnKeyDown شئ های Edit تون از کد زیر استفاده کنید :
if Key= VK_RETURN then
Edit2.SetFocus;

در این صورت اگر تعداد Edit ها زیاد باشه این کار مشکل میشه ( البته میتونید این کد رو در زمان اجرا با یک حلقه به رویداد OnKeyDown شئ های Edit اختصاص بدید ) ، یا اینکه از کد زیر استفاده کنید ، ابتدا KeyPreview فرمتون رو فعال کنید و در رویداد OnKeyDown فرمتون کد زیر رو بنویسید :

var
ActiveControl: TWinControl;
i: Integer;
begin
if Key= VK_RETURN then
begin
ActiveControl:= Screen.ActiveControl;
if ActiveControl is TEdit then
for i:= 0 to Self.ComponentCount - 1 do
if Components[i] is TEdit then
if TEdit(Components[i]).TabOrder= TEdit(ActiveControl).TabOrder+1 then
TEdit(Components[i]).SetFocus;
end;

SAASTN
یک شنبه 17 مرداد 1389, 13:29 عصر
توی OnKeyDown کنترلها بنویسید:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_RETURN then
FindNextControl(TWinControl(Sender), True, True, False).SetFocus;
end;

tdkhakpur
یک شنبه 17 مرداد 1389, 13:53 عصر
میشه یک کد بگین که با enter کردن روی یک edit ، کرسر روی edit بعد قرار بگیرد
احتمال دارد شما بطور منظم کنترلها را نچیده باشید و اصولا هم همه برنامه نویسها حین تغییر برنامه های قبلی برای ایجاد برنامه های جدید این نظم را به هم میزنند به همین دلیل استفاده از کدهای ارسالی فوق 50 درصد جواب خواهد داد.
برای اینکه راه اصولی در پیش داشته باشید خودتان با بررسی Key توسط متد setfocus مستقیما به کنترلی که متد نظر دارید سویچ کنید.
یعنی


if Key = VK_RETURN then
Edit2.SetFocus();

soft-c
یک شنبه 17 مرداد 1389, 17:32 عصر
احتمال دارد شما بطور منظم کنترلها را نچیده باشید و اصولا هم همه برنامه نویسها حین تغییر برنامه های قبلی برای ایجاد برنامه های جدید این نظم را به هم میزنند به همین دلیل استفاده از کدهای ارسالی فوق 50 درصد جواب خواهد داد.
برای اینکه راه اصولی در پیش داشته باشید خودتان با بررسی Key توسط متد setfocus مستقیما به کنترلی که متد نظر دارید سویچ کنید.
یعنی


if Key = VK_RETURN then
Edit2.SetFocus();

تشکر دوستان. مشکل الحمدالله حل شد.
فقط دو تا سوال داشتم.
1- میشه در مورد این متد توضیح بدید .(نحوه کارکردش)
2- وقتی من این کد را در onenter نوشتم error داد ولی در onkey down جواب میدهد .می خواستم بدانم تفاوت این دو event در چیه ؟
تشکر.

soft-c
یک شنبه 17 مرداد 1389, 18:15 عصر
سلام.
آیا در مورد button هم همین کد را می نویسیم .
یعنی از button به edit .
تشکر

tdkhakpur
یک شنبه 17 مرداد 1389, 18:57 عصر
1- میشه در مورد این متد توضیح بدید .(نحوه کارکردش)
2- وقتی من این کد را در onenter نوشتم error داد ولی در onkey down جواب میدهد .می خواستم بدانم تفاوت این دو event در چیه ؟


خب onEnter پارامتر key ندارد شاید به این خاطر بوده که ایراد گرفته ولی در مورد فرق onEnter و OnKeyDown این هست که OnEnter زمانی رخ میده که edit یا کنترل شما توجه ورودی مثل ماوس و یا کیبورد را به خود گرفته باشید ولی onKeyDown زمانی هست که کلید فشار داده شده باشد (الته پایین رفته باشید.)


آیا در مورد button هم همین کد را می نویسیم .
یعنی از button به edit .

فرقی نداره همه جزو window control محسوب میشوند و قابلیت فوکاس را دارند

soft-c
یک شنبه 17 مرداد 1389, 23:45 عصر
سلام.
تشکر از توضیحات شما.
میشه در مورد خود متدی که نوشتید یک توضیحی بدهید؟
یعنی مثلا vk که را برای چی نوشتید (توضیحش چی بوده ) و.... منظورم این است که متد را باز کنید.
باز هم تشکر.

tdkhakpur
دوشنبه 18 مرداد 1389, 13:56 عصر
میشه در مورد خود متدی که نوشتید یک توضیحی بدهید؟

خب همان خواسته شماست؟ کدوم متد؟


یعنی مثلا vk که را برای چی نوشتید

خب vk به معنای کلیدهای مجازی هستند که برای شناخته شدن همه کلیدهای صفحه کلید قرار داده شده و شما میتوانید از اعداد هم استفغاده کنید مثلا vk_return برابر با عدد 13 هست و شما میتوانید به جای آن عدد 13 را قرار بدید و یا عد 27 را بری ESC و یا سایر کلید ها...

h_mohamadi
سه شنبه 19 مرداد 1389, 08:49 صبح
می توانی بنویسی

if Key = #13 then Edit2.SetFocus;

hp1361
سه شنبه 19 مرداد 1389, 09:15 صبح
با سلام

به نظر من اگه از کومپوننت زیر استفاده کنید خیلی راحت تر خواهید بود. مخصوصا اگه تعداد کنترل هاتون زیاد باشه.
فقط کافیه اون رو روی فرمتون قرارداده و خاصیت Active اونو True کنید . خودش بر اساس TabOrder که برای اشیا تعیین کردید با زدن کلید اینتر بینشون حرکت خواهد کرد.

موفق باشید