RSS
 

 

Как сделать переход при нажатии Enter как Tab?

05 Ноя


Программируя пользовательские интерфейсы на Delphi, часто необходимо, чтобы при нажатии клавиши Enter фокус ввода переходил к следующему элементу, как будто была нажата клавиша Tab. Некоторые сторонние компоненты имеют подобные настройки, например TDBGridEH из библиотеки EhLib имеет опцию dghEnterAsTab, включая которую, нажатие Enter приведет к переходу к следующему полю.
Как же сделать переход при нажатии Enter как Tab?

В предыдущих заметках я писал о моей библиотеке полезных функций для Delphi. Ниже приводится пример для дополнения в эту юбиблиотеку еще пары функций

unit ZFunctions;
interface
uses
   ... Windows, Forms, Messages, Controls, ...
...
type
  TBaseForm = class(TForm)
  class procedure EnterAsTabKeyPress(Sender: TObject; var Key: Char) ;
  end;
 
procedure SetEnterAsTab(aForm: TForm);
...
implementation
...
class procedure TBaseForm.EnterAsTabKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then begin
    Key := #0;
    { check if SHIFT - Key is pressed }
    if GetKeyState(VK_Shift) and $8000 <> 0 then
      PostMessage(Application.ActiveFormHandle, WM_NEXTDLGCTL, 1, 0)
    else
      PostMessage(Application.ActiveFormHandle, WM_NEXTDLGCTL, 0, 0);
  end;
end;
 
procedure SetEnterAsTab(aForm: TForm);
begin
 aForm.KeyPreview := true;
 aForm.OnKeyPress := TBaseForm.EnterAsTabKeyPress;
end;
...
Возможно использование классовой процедуры не лучшее решение, но я не нашел более простых других способов. Может кто-то подскажет как это сделать более изящно?

Теперь для реализации достаточно подключить библиотеку ZFunctions и например на событие OnCreate вашей формы добавить одну строчку кода:

uses ... ZFunctions, ...
...
procedure TForm1.FormCreate(Sender: TObject);
begin
 ...
 SetEnterAsTab(Self);
 ...
end;
...

Если у вас уже есть обработчик на OnKeyPress формы, то тогда, вместо приведенного выше кода на OnCreate просто добавьте в свой обработчик OnKeyPress такой код:

 ...
  TBaseForm.EnterAsTabKeyPress(Sender, Key);
...

Теперь нажимая на форме Enter фокус будет передан следующему элементу ввода, а если нажать Shift+Enter -  предыдущему.


 
 

Метки: , , 05.11.2011