Delphi - Como dar foco no próximo controle da tela

Em Delphi é muito fácil dar foco a um controle. Você simplesmente checa se o controle pode receber foco usando a propriedade CanFocus e se puder, usa o método SetFocus do controle. E a verificação da propriedade CanFocus, embora seja bastante negligenciada, evita a bem conhecida exceção “Cannot focus a disabled or invisible window“.

Um recurso relativamente simples e não muito comum é mudar o foco para o próximo controle, simulando o que ocorreria se o usuário pressionasse a tecla Tab. Alguns casos em que se quer fazer isso:

  • Fazer com que o Enter atue como Tab (comum em sistemas antigos ou com usuários acostumados a sistemas Clipper e COBOL)
  • Evitar que o foco de teclado passe por determinados controles que não possuam a propriedade TabStop

Isso é feito simplesmente chamando o método SelectNext do formulário. Por exemplo:

Self.SelectNext(Self.ActiveControl, true, true);

O primeiro parâmetro informa o controle ativo.

O segundo parâmetro (com valor true) informa que a procura pelo próximo controle é feita “para frente”. Para fazer na ordem inversa, é só passar false e então o controle anterior no TabOrder será selecionado.

O terceiro parâmetro, se verdadeiro, informa ao método que a propriedade TabStop deve ser respeitada, ou seja, o controle só será considerado se tiver TabStop = true.


Posts relacionados

Deixe um comentário