| 
| 
 | Вопрос # 1 909/ вопрос открыт / | 
 |  Здравствуйте!Доброго времени суток, эксперты! Как подменить нажатия ENTER на нажатия TAB
 
|  |   Вопрос задал: 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 (статус: 1-ый класс), 18 сентября 2008, 11:00 [#1]:to Вадим К данный код не работает |  
|   | seryoga (статус: 1-ый класс), 18 сентября 2008, 11:57 [#2]:как убрать пищание спикера при нажатии  на Enter |  
|   | Вадим К (статус: Академик), 18 сентября 2008, 12:47 [#3]:Первый код обязан работать. Сам неоднократно его применял. Может какой то фаервол/антивирь мешает. Не знаю. А спикер пищит, так как enter всё равно нажимается в коде Николая Рубана.
 Надо добавить зануливания кода. Вставить key = 0;
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | seryoga (статус: 1-ый класс), 18 сентября 2008, 14:27 [#4]:куда вставить?? |  
|   | Вадим К (статус: Академик), 18 сентября 2008, 14:45 [#5]:ну например сразу после строки if Key=vk_return then begin
 Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |