TVertScrollBox, aprenda a evitar que o teclado virtual encubra seus controles

Quando temos um controle onde precisamos digitar algo, como um TEdit, TMemo e etc., dependendo da posição deste controle no form, o teclado virtual pode encobri-lo quando é mostrado pelo sistema operacional. Já passou por isso?

Para contornar esta condição, existe um exemplo no Delphi XE7, XE8 e no Delphi 10 Seattle, chamado ScrollableFormDemo. O diretório é para é C:\Users\Public\Documents\Embarcadero\Studio\xx.x\Samples\Object Pascal\Mobile Samples\User Interface\ScrollableForm onde para o Delphi XE7 XX.X é = 15.0 e para o XE8 16.0. Para o Delphi 10 Seattle, o diretório é C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Object Pascal\Multi-Device Samples\User Interface\ScrollableForm.

Artigo 2Usando os eventos OnVirtualKeyboardShown e OnVirtualkeyboardHiden, o exemplo dispara as rotinas para a rolagem do ScrollBox1, calculando o quanto deve ser empurrado e depois, quando o teclado desaparecer, o quanto ele deve retornar. Executando o exemplo, quando você clicar no TEdit na base do form, ele irá rolar tudo para cima, e quando o teclado for fechado, a tela voltará para a sua posição original. Ele tem poucas linhas de código, e tenho certeza que você não terá dificuldade alguma em entendê-lo.

 Um detalhe importante, e destacado no memo do form, é a variável global VKAutoShowMode := TVKAutoShowMode.vkasAlways, para que o teclado sempre apareça. Não esqueça também de incluir a unit FMX.Types no projeto, pois é onde esta variável global reside (Veja o ScrollableFormDemo.pas).

Para termos esta funcionalidade nos forms do projeto, podemos criar um form básico, como o nosso amigo Rodrigo já nos ensinou em diversos vídeos e nos hangouts, e desenvolver nossos forms herdando este form básico. Para isso, quando for criar um novo form, ao invés de ser um form completamente limpo, vá a File / new / Others e clique em Inheritable Items e selecione o form base que você criou. Pronto!

Se você já tem um projeto pronto, você também pode criar um form base e usá-lo para refazer os forms que precisam desta funcionalidade. Vai dar um trabalho, mas ficará com aparência profissional!

Uma excelente fonte de informação são os exemplos que acompanham os produtos da Embarcadero, não deixe de ver!

Se você tiver dificuldade, envie e-mail pra rchostakovis@hotmail.com, terei o maior prazer em ajudar!

Roberto Chostakovis

8 Comentários


  1. No Tokyo 10.2.1 a VertScrollBox sobe até o primeiro componente em vez de posicionar o campo em foco acima do teclado virtual, se tornar invisível os primeiros componentes a coisa funciona mas é muito trabalhoso. Alguém conseguiu resolver o problema?


  2. Bom dia !

    Tenho uma aplicação Android desenvolvida em Firemonkey e nessa aplicação o cliente usa leitor de código de barras mas tem etapas que eles necessitam do teclado. Queria saber se tem alguma opção ou algum código que consigo ativar esse teclado virtual do android sem precisar de desenvolver um teclado na tela

    OBS : O Proprio android tem a opção de desativar o teclado físico o único problema desta opção e que quando reinicia ou quando o leitor desconecta tem que voltar a opção toda hora


  3. Amigo, não consigo fazer este processo funcionar corretamente no Delphi Tokyo 10.2.1. Existe algum modo do teclado não cobrir os edits no 10.2.1? Obrigado.


  4. Boa tarde.

    Tenho uma aplicação Android que recebe meus TForms dentro de uma aba do meu TabControl usando um TLayout, ou seja, cada TForm carrega dentro do meu TLayoutPrincipal.

    Meu problema é que, um dos meus Form tem um TMemo e o teclado fica sobre o ele. Tentei utilizar a dica mas não faz efeito. Somente em aplicações fora do TabControl

    Alguma sugestão?

    Obrigado

E aí? Curtiu o artigo? Então deixe seu comentário!

This site uses Akismet to reduce spam. Learn how your comment data is processed.