Ir para o conteúdo

Usar a tecla ENTER como TAB

Quem já programou em Delphi, por mais simples que fosse o programa, as hipoteses de se ter deparado com este "problema" são grandes.

Imagine-se uma série de componentes TEdit, TComboBox, e outros, de entrada de dados. Para o Delphi (para o Windows na verdade), se quisermos mudar o foco entre os vários componentes, temos de usar a tecla TAB (para avançar) ou Shift-TAB (para retroceder).

Para o utilizador porém, é instintivo que, terminada a inserção de dados, ao pressionar a tecla ENTER, o foco passe para o campo seguinte. Isto, embora não esteja previsto, é possível, com pouco trabalho, de reproduzir:

O primeiro passo é activar a propriedade KeyPreview da Form. Esta propriedade do tipo boolean tem o valor false como predefinição, e serve para que ao ser pressionada qualquer tecla, o eventos relativos a elas a serem executados primeiro são os da Form, e não os do componente seleccionado. Assim, o código que permitirá a tecla ENTER funcionar como TAB só terá de ser criado para a própria form para funcionar em todos os "componentes de inserção" (TEdit, TCombobox, TListBox, etc.) Há dois métodos de fazer isto:

  1. Colocar um visto na propriedade KeyPreview do Object Inspector (DesignTime)
  2. Inserir no evento OnCreate da Form a seguinte linha (RunTime):
procedure TForm1.FormCreate(Sender: TObject);
begin
     KeyPreview:=true;
end;

Após isto, define-se no evento OnKeyPress da form com o seguinte procedimento:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
     if key=#13 then begin
                          SelectNext(ActiveControl as TWinControl,True,True);
                          key:=#0;
                     end;
end;

E pronto, a tecla ENTER funcionará como TAB em todos os controlos de entrada presentes nessa form.