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:
- Colocar um visto na propriedade KeyPreview do Object Inspector (DesignTime)
- 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.