Ir para conteúdo
  • Cadastre-se

dev botao

Bloquear tecla enter


  • Este tópico foi criado há 300 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Boa tarde!

Estou com um problema em uma empresa onde o usuário ao fechar a venda ele segura a tecla enter, em vez de ir teclando enter por enter para navegar nos edits.

Com isso dispara vários enter travando assim a venda ate a quantidade de enter finalizar. "Usuário apressadinho"

O que eu queria era bloquear para ele nao segurar, e se segurar o Windows entender que a tecla foi usada somente uma vez

Dangelo Porto

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde,

A principio esse tipo de tratamento deve ser feito na sua própria aplicação.

Um tipo de controle bastante comum é o "semáforo", onde quando uma operação é inciada você bloqueia e somente libera quando ela termina.

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.Enabled := False;

  // executa sua rotina no botão

  Button1.Enabled := True;
end;

Acima um exemplo no click de um botão. Quando inicia a execução ele deixa o botão desabilitado para não ser clicado novamente e só vai habilitar o botão no final do processo.
Esse mesmo tipo de tratamento pode ser feito com uma variável interna de controle ou com threads ou funções. Aí depende mais de como o seu código-fonte está estruturado.

 

  • Curtir 2
Consultor SAC ACBr

Alexandre de Paula
Ajude o Projeto ACBr crescer - Assine o SAC                    

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  ícone Discórdia Discord   

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
18 minutos atrás, Alexandre de Paula disse:

Boa tarde,

A principio esse tipo de tratamento deve ser feito na sua própria aplicação.

Um tipo de controle bastante comum é o "semáforo", onde quando uma operação é inciada você bloqueia e somente libera quando ela termina.

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.Enabled := False;

  // executa sua rotina no botão

  Button1.Enabled := True;
end;

Acima um exemplo no click de um botão. Quando inicia a execução ele deixa o botão desabilitado para não ser clicado novamente e só vai habilitar o botão no final do processo.
Esse mesmo tipo de tratamento pode ser feito com uma variável interna de controle ou com threads ou funções. Aí depende mais de como o seu código-fonte está estruturado.

 

Já tenho esse teste no botão, porem mesmo assim vai vários enter 

 

Dangelo Porto

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
2 minutos atrás, Daniel Simoes disse:

Mas então o "ENTER" está sendo disparado por outro evento, como por exemplo o OnKeyDown do Edit ou do Form...

Daniel, o problema e que o usuário segura o enter achando que vai mais rápido, e com isso o onclick acha que tem vários clicks nele, mesmo eu desabilitando o botão no inicio do click o botão já recebe vários clicks.

Dangelo Porto

Link para o comentário
Compartilhar em outros sites

  • Fundadores

acho que isso não ocorreria... em todo caso, se cai sempre no mesmo evento... é fácil de apenas ignorar o Enter, com Exit, caso você perceba que ele está em processamento...

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not Button1.Enabled then // <---- AQUI ----
    Exit;

  Button1.Enabled := False;

  // executa sua rotina no botão

  Button1.Enabled := True;
end;

 

  • Curtir 3
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
2 minutos atrás, Daniel Simoes disse:

acho que isso não ocorreria... em todo caso, se cai sempre no mesmo evento... é fácil de apenas ignorar o Enter, com Exit, caso você perceba que ele está em processamento...

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not Button1.Enabled then // <---- AQUI ----
    Exit;

  Button1.Enabled := False;

  // executa sua rotina no botão

  Button1.Enabled := True;
end;

 

Vou tentar assim com Exit para ver, mais não sei se você mim entendeu, o que quero e bloquear o Enter do teclado para o usuário navegar entre os edits enter a enter, sem ter que segurar e disparar vários enter ao chegar no foco do botão

Mesmo eu usando Enabled := False ele ainda consegue passar varios enter

Dangelo Porto

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Então você tem que desabilitar o Form ou o Panel, onde ele não pode navegar...

Ou ainda, subir um outro Form/Panel, sobre esse, enquanto o programa está trabalhando

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

image.png.afcd5ac931a3bfbb270861ea28941eb5.png

image.png.ff3e42745f56a1b106b1ae32c82d8176.png

 

O usuário informa o valor em dinheiro 1,25 e "Tecla Enter" vai para o Cartão de Crédito

Depois ele informa o valor do cartão de crédito 2,50. Ao invés dele teclar enter para ir para cartão de débito e depois enter para ir para o PIX, e enter para ativar o onclick do botão Fecha Venda, ele simplesmente informa os 2,50 do cartão de credito e segura o enter no teclado. Quando chega no onclick do botão eu dou um enabled false, porem segurar a tecla enter e tão rápido que passa para o click vários enter, pois ele segurou a tecla

 

 

 

Dangelo Porto

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa noite,

Seus edits devem estar com o keydown ou keypress configurados para ir para o próximo ao pressionar enter.

Nesses eventos você deve configurar um controle para não permitir um processamento simultâneo.

Tomando como exemplo o keydown (pode ser o keypress, depende do seu fonte).

begin
  try
    Edit1.onKeydown := nil;

    // seu código como está hoje

  finally
    Edit1.onKeydown := Edit1Keydown; // procedure que estava no keydown
  end;
end;

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Não resolve

vou usar o SpeedButton para não dar um SetFocus depois do PIX ou no PIX eu travar o enter do teclado, fazendo com que o usuário click com o mouse no botão Fechar Venda. Assim eu resolvo o problema do apressadinho.

Porque o cara e tão rápido que mesmo eu dando um Enabled := False No inicio do Click ainda sim e como se ele tivesse clicando no botão unas 30 vezes. Ai o botão entra num loop ate finalizar os clicks

Dangelo Porto

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 300 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.