Interceptar o pressionamento da tecla TAB - Urgente

Delphi

04/01/2004

PessoALL,

Tenho algumas validações de campos no evento keypress de um edit.
Quando é teclado enter as validações são acionadas.

Eu preciso saber se há alguma forma de fazer com que a tecla TAB não
passe para o próximo componente ativo, antes de fazer as validações que são acionadas no enter.

Já tentei TODOS os eventos de teclado para o componente e não funciona. (o KeyPreview do form está true).

Eu vi uns exemplos na internet, utilizando o TMsg mas não entendi como
funciona, se alguém puder me ajudar nesse abacaxi.


Dirceualves

Dirceualves

Curtidas 0

Melhor post

Tnaires

Tnaires

05/01/2004

Olá d novo Dirceu
Testei no evento OnKeyUp, e... deu certo! :)
Veja só:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_TAB then
    ShowMessage(´Tecla TAB´);
end;

Lembrete: a propriedade KeyPreview setada como true não influi em nada no pressionar da tecla TAB (segundo a ajuda do próprio Delphi, ela não gera eventos d teclado).
Sucesso


GOSTEI 1

Mais Respostas

Tnaires

Tnaires

04/01/2004

Caro Dirceu:
Tentei o seguinte código:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_TAB then
    ShowMessage(´Tecla TAB´);
end;

O interessante é q ele só funciona qdo eu pressiono CTRL + TAB... Se pressionar TAB sozinho ele não dá certo.


GOSTEI 0
Ramboli

Ramboli

04/01/2004

Olá d novo Dirceu
Testei no evento OnKeyUp, e... deu certo! :)
Veja só:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_TAB then
    ShowMessage(´Tecla TAB´);
end;

Lembrete: a propriedade KeyPreview setada como true não influi em nada no pressionar da tecla TAB (segundo a ajuda do próprio Delphi, ela não gera eventos d teclado).
Sucesso




procedure TfTeste.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var
  conta : Extended;
begin
  conta := 0;
  if Key = VK_TAB then
    begin
      while conta = 0 do
      begin
        if not (query.State in [dsEdit,dsInsert]) then
        begin
         query.append;
        end

        else
          begin
            conta :=1;
            exit;
          end;
      end;
    end;
end;


fiz isto, pode ajudar, ele verifica se a query esta aberta editando ou inserindo algo, caso nao esteja ele abre, caso esteja ele ignora a parte de dar append na query graças ao while, é um code bem simples, provavelmente voces ja devem ter aperfeiçoado isto, abraço


GOSTEI 0
POSTAR