Teclas Enter e Esc no Delphi

Se você veio aqui procurando uma dica sobre como aceitar tecla ENTER para mudar de campo, não perca seu tempo porque não vai encontrar (se depois de ler esse artigo você ainda quiser, tenho certeza que o Google vai mostrar um zilhão de técnicas).

As convenções existem por um motivo: estabelecer um entendimento comum entre as partes sobre alguma coisa. Se uma das partes (no caso, a aplicação ou o usuário) ignorar a convenção a coisa não funciona.

A regra é clara: a tecla para pular de um campo é TAB, não ENTER.

Quem estabeleceu a regra não fui eu, foi a indústria ao longo dos anos. A publicação em 1987 pela IBM do manual Common User Access (CUA) foi um marco importante. A Microsoft seguiu essa cartilha no desenvolvimento da interface de usuário do Windows, até porque ajudou a criá-la durante a fase de cooperação do OS/2 com a IBM. Hoje em dia a Microsoft tem padrões mais atualizados que cobrem novos aspectos do Windows XP e do Windows Vista, como acessibilidade, bitmaps de alta definição, cores, transparências, interação com dispositivos USB, etc.

Quando os fabricantes de teclados colocam o mesmo conjunto de teclas de suporte, como Home, End, Insert, Delete, Tab, F1 a F12 e Print Screen, também estão respeitando as convenções da indústria.

A tecla ENTER tem um papel bem definido em caixas de diálogo, que é confirmar a aceitação do conteúdo e fechar a janela. Ou seja, equivale a um clique no botão OK. Similarmente a tecla ESC fecha a janela cancelando os dados, equivalendo a um clique no botão Cancelar.

TButton.Default, OK?

Por ser uma convenção, a API do Windows suporta nativamente desde a sua primeira versão essas de teclas de atalho em caixas de diálogo. Você não precisa fazer nada para que as combinações TAB e Shift+TAB mudem o foco dos controles. O que muita gente não sabe é que a API também trata nativamente ENTER e ESC.

A biblioteca VCL do Delphi torna tudo muito mais simples. Basta usar as propriedades tipo Boolean Default e Cancel de TButton para aceitar as teclas ENTER e ESC, respectivamente.

Definir TButton.Default = True faz mais que aceitar a tecla ENTER. Desenha um botão diferenciado, com a borda mais destacada, o que indica visualmente ao usuário qual é o botão padrão que será acionado ao se teclar ENTER.

Para o usuário acostumado a usar teclado, é extremamente conveniente (necessário até, eu diria) que a tecla ESC (TButton.Cancel = True) também seja tratada para sair da janela sem salvar nenhum dado.

Exceções

Exceções existem, é claro. Uma tela de entrada de dados de grande volume, ainda mais se os usuários nem sempre têm os olhos voltados para o teclado ou se a entrada é basicamente numérica, é uma possível candidata. Sem dúvida é mais fácil digitar com a mesma mão direita o ENTER (o TAB fica à esquerda) e porque as teclas ENTER (as duas!) são sempre maiores e verticais, facilitando o operador “acertar” a digitação sem olhar.

Outra justificativa comum é que os usuários estão acostumados a usar um programa antigo para DOS e são habituados a usar ENTER. Na minha opinião não é uma boa desculpa. É a hora de ensinar a convenção que todo mundo usa. Quando esses mesmos usuários navegarem na Internet vão ter que usar TAB para mudar de campo e ENTER para confirmar um formulário de qualquer forma.

Não podemos perder de vista que é a exceção não é a regra. A convenção é nossa amiga. A convenção facilita a vida do usuário e do desenvolvedor.

Comments

3 Responses to “Teclas Enter e Esc no Delphi”

  1. Cesar Romero on November 19th, 2008 7:40 pm

    Muito bem colocado.

  2. Gerson on November 22nd, 2008 5:23 am

    Paz,serenidade, ORDEM e harmonia no universo aos homens de boa vontade!!!
    Obrigado Malta!
    Eu ja estive frente ao caos gerado pelo “Enter” substituindo o “Tab”. Com mto trabalho conseguimos arrumar a casa.
    Na minha opinião, o custo dessa aberração não compensa o pseudo ganho.

  3. Jefferson on December 28th, 2008 11:55 am

    Muito bom mesmo o artigo…
    Estarei passando a frente o mesmo….

Deixe uma Resposta




XHTML: Você pode usar essas tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">