Olá Pessoal,
Bem trocar o Enter por Tab no form não é difícil, o código é bem simples. Porém as vezes recebo alguns emails com duvidas de como fazer isso funcionar dentro de um DBGrid e um StringGrid.
Pois bem nesta Quick Tips eu mostro alguns macetes para que isso funcione sem traumas. O conceito e muito simples. Além disso vamos fazer algumas variações do famoso KeyPress para trocar enter por tab.
Primeiramente vamos alterar a propriedade "KeyPreview" do Form para true. Isso é necessario para que todo o evento de pressionamento de tecla seja "rapassado" do controle que possui o foco para o formulario que o contem.
Feito isso vamos ao evento "OnKeyPress" do Form acrescente o código abaixo:
procedure TFrmPadrao.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then begin
Key := #0;
Perform(WM_NEXTDLGCTL, 0, 0);
end;
end;
Agora como a coisa funciona em um Grid ou String Grid. A principio da mesma forma porem agora não iramos mover o foco para o controle e sim enviar uma mensagem de pressionamento de tecla. simulamos o pressionamento da tecla tab atraves do VK_TAB mas poderiamos simular o pressionamento de qualquer tecla. Observe:
StringGrid
procedure TFrmPadrao.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
StringGrid1.Perform(WM_KEYDOWN, VK_TAB, 0);
end;
DBGrid
procedure TFrmPadrao.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
DBGrid1.Perform(WM_KEYDOWN, VK_TAB, 0);
end;
Agora vamos voltar ao famoso KeyPress. Que tal ao pressionar o Enter avancarmos um controle e ao pressionar esc voltarmos um controle ??? Altere o codigo do OnKeyPress do Form para o codigo abaixo:
procedure TFrmPadrao.FormKeyPress(Sender: TObject; var Key: Char);
begin
case Key of
#13: Perform(WM_NEXTDLGCTL, 0, 0);
#27: Perform(WM_NEXTDLGCTL, 1, 0);
end;
end;
O sistema operacional interage com os controles de uma aplicação através de Mensagens. No delphi temos como mandar as mensagem com os comandos SendMessage, PostMessage e Perform. Com o perform mandamos a mensagem direto para o controle sem passar pelo SO.
Até o próximo QUICK TIPS.
Wesley Yamazack