Консультация № 110149
19.11.2007, 14:18
0.00 руб.
0 6 6
Здравствуйте! Помогите, пожалуйста, сделать более удобный для пользователя интерфейс. Необходимо, чтобы переход курсора по окошкам Edit на форме осуществлялся с помощью клавиши Enter. Как Это реализовать? Спасибо.

Обсуждение

Неизвестный
19.11.2007, 14:26
общий
это ответ
Здравствуйте, Kalina!

Самый простой способ:
У компонента TEdit создаём обработчик события OnKeyDown с указанным в приложении содержимым.

В моём примере нажав Enter (VK_RETURN) в поле Edit1 фокус переходит в поле Edit2

Приложение:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);begin if Key = VK_RETURN then Edit2.SetFocus;end;
Неизвестный
19.11.2007, 14:32
общий
это ответ
Здравствуйте, Kalina!

Создаеш собственный обработчик сообщений, и при нажатии Enter переделываеш сообщение в Tab. Ниже пример реализации:

procedure TForm1.FormCreate(sender: TObject);
begin
Application.OnMessage := CustomMessageHandler;
end;

procedure TForm1.CustomMessageHandler(var Msg: TMsg; var Handled: Boolean);
begin
with Msg do
if message = WM_KEYDOWN then
if wParam = VK_RETURN then
wParam := VK_TAB;
end;
Неизвестный
19.11.2007, 14:32
общий
это ответ
Здравствуйте, Kalina!
Напишите обработчик события OnKeyDown для каждого Edit‘a следующим образом:
if Key = VK_RETURN then //Если нажали Enter
Edit2.SetFocus; // Фокус переходит на Edit2
Неизвестный
19.11.2007, 14:57
общий
это ответ
Здравствуйте, Kalina!
можно посылать сообщение WM_NEXTDLGCTL диалоговому окну для того чтоб перевести фокус ввода следующему элементу управления (из списка Tab Order)
SendMessage(Handle, WM_NEXTDLGCTL, 0, 0 );
т.е. следить за нажатием VK_RETURN на форме и при этом отправлять вышеуказанную команду
давно
Профессионал
153662
1070
19.11.2007, 17:01
общий
это ответ
Здравствуйте, Kalina! Предлагаю свой код, который я уже использовал не раз.


Приложение:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);begin if Key = #13 then Edit2.SetFocus ; // клавиша <Enter>end; и так далее в каждом компоненте
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
20.11.2007, 17:55
общий
это ответ
Здравствуйте, Kalina!

отслеживаем нажатие клавиши Enter после чего делаем такую обработку
TEdit(FindComponent(‘Edit‘ + IntToStr(i))).SetFocus;
переменную i сделайте глобальной и при перемещении ее по компонентам постоянно увеличивайте в инспекторе объектов установите общий обработчик нажатия клавиши я сделал для первого эдита

Приложение:
var Form1: TForm1; i: Integer = 1;implementation.........procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);begin if Key <> 13 then Exit; Inc(i); if i > 5 then i:= 1; TEdit(FindComponent(‘Edit‘ + IntToStr(i))).SetFocus;end;
Форма ответа