Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 909

/ вопрос открыт /

Здравствуйте!
Доброго времени суток, эксперты! Как подменить нажатия ENTER на нажатия TAB

seryoga Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: seryoga (статус: 1-ый класс)
Вопрос отправлен: 17 сентября 2008, 18:29
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, seryoga!
В общем случае эту задачу решить сложновато - прийдётся лазить в драйвер клавиатуры или писать хитрый хук. Но если надо подменить для какого то конкретного компонента на форме, то это очень просто. Надо добавить для этого компонента такой обработчик

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
If Key = #13 Then
Begin
SelectNext(Sender as tWinControl, True, True );
Key := #0;
end;
end;
Если же хочеться для всех компонентов на форме, то тут надо так.
Выставить свойство KeyPreview формы в True и используйте следующий обработчик события OnKeyPress
procedure TMainForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then begin
Key := #0;
PostMessage(Handle, WM_NEXTDLGCTL, 0, 0);
end;
end;

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 17 сентября 2008, 18:46
Оценка за ответ: 3

Ответ #2. Отвечает эксперт: Николай Рубан

Здравствуйте, seryoga!

Если даная необходимость связана с объектами, то достаточно описать событие OnKeyDown например с таким наполнением:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
const tab=vk_tab; //код кнопки TAB
begin
   if Key=vk_return then begin //обработка реакции при нажатии кнопки Enter
     keybd_event(tab,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); 
     keybd_event(tab,0,KEYEVENTF_EXTENDEDKEY,0); //нажимаем программно кнопку TAB
     keybd_event(tab,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
   end;
end;

Good Luck!

Ответ отправил: Николай Рубан (статус: 10-ый класс)
Время отправки: 17 сентября 2008, 18:56
Оценка за ответ: 5

Комментарий к оценке: спасибо огромное!!!! Все работает супер только спикер пищит зараза

Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 18 сентября 2008, 14:45; участников в обсуждении: 2.
seryoga

seryoga (статус: 1-ый класс), 18 сентября 2008, 11:00 [#1]:

to Вадим К данный код не работает
seryoga

seryoga (статус: 1-ый класс), 18 сентября 2008, 11:57 [#2]:

как убрать пищание спикера при нажатии на Enter
Вадим К

Вадим К (статус: Академик), 18 сентября 2008, 12:47 [#3]:

Первый код обязан работать. Сам неоднократно его применял. Может какой то фаервол/антивирь мешает. Не знаю.
А спикер пищит, так как enter всё равно нажимается в коде Николая Рубана.
Надо добавить зануливания кода. Вставить key = 0;
Галочка "подтверждения прочтения" - вселенское зло.
seryoga

seryoga (статус: 1-ый класс), 18 сентября 2008, 14:27 [#4]:

куда вставить??
Вадим К

Вадим К (статус: Академик), 18 сентября 2008, 14:45 [#5]:

ну например сразу после строки
if Key=vk_return then begin
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:35
Выполнено за 0.03 сек.