Recent

Author Topic: Problema com tamanho das telas no Mobile  (Read 7374 times)

nightrider

  • Full Member
  • ***
  • Posts: 139
Problema com tamanho das telas no Mobile
« on: October 16, 2011, 01:06:51 am »
1. No anexo #1 ve-se a imagem da tela de um iPAQ preenchida com o login;

2. No anexo #2 ve-se a tela seguinte já com a parte inferior em branco. Dá até pra ver a borda do botao "Sair" da primeira tela. Esta borda aparece no canto superior direito da faixa branca no pé da tela. É facil de ver que faltou preencher completamente a parte inferior da tela quando foi exibida a tela deste anexo #2;

3. No anexo 3 ve-se a tela do anexo #1 apos ter clicado na faixa branca mencionada no item 2.

Eu uso uma rotina que limpa a barra de superior das janelas do Mobile para poder usar a tela inteira. Mas a tela só é totalmente preenchida para a tela de login inicial. Já coloquei height=600 na segunda tela e nada muda. Continua aparecendo a faixa branca embaixo. Esta faixa alias, parece ter a mesma largura da barra de topo de janela do Mobile que foi removida pela sub-rotina já citada.

Então meus amigos? Alguem consegue me dizer como faço para que a tela seja ocupada integralmente sempre? Como aparece no anexo #1?

[ ]

 Ricardo

felipemdc

  • Administrator
  • Hero Member
  • *
  • Posts: 3538
Re: Problema com tamanho das telas no Mobile
« Reply #1 on: October 16, 2011, 07:58:23 am »
Então, você tem que usar a rotina de fullscreen em cada form do aplicativo, pois ela usa a API MoveWindow para alterar o tamanho da janela:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633534(v=vs.85).aspx

O Lazarus não sabe que você ativou esse fullscreen. O ideal teria sido ter implementado o fullscreen no Lazarus, nos arquivos na pasta lazarus/lcl/interfaces/wince

nightrider

  • Full Member
  • ***
  • Posts: 139
Re: Problema com tamanho das telas no Mobile
« Reply #2 on: October 16, 2011, 01:01:42 pm »
Presumindo que a "rotina de fullscreen" que mencionas seja aquela de nome "RemoveTaskBar" que gentilmente me passaste há algum tempo atras, informo que já a estou usando em cada Form, conforme logica abaxo.

No Create de cada Form eu ligo a chave Privez que me informará no OnShow que o formulario foi recem criado.

No inicio da rotina FormShow eu faco:

if Privez then
   begin;
      RemoveTaskbar(true,Self); // inclui o Self para poder usar o mesmo codigo
      Privez := false;                   // para todos Form
  end;

No exemplo cujos snapshots enviei, percebe-se que a rotina faz o serviço eliminando a barra superior já na primeira vez que o formulario é exibido. Se retirar o controle de Privez ele destroi uma faixa da tela a cada vez que volta nesta.

Nao entendo porem, pq nao é usada barra inferior, ficando desprotegida e c/parte da tela "debaixo" disponivel. Quando clico nesta barra, o foco volta para a tela "debaixo". Como nao devo usar ShowModal, tá feita a caca.

Seria possivel me explicar isto num nivel acessivel a meus conhecimentos notadamente  muito inferiores aos teus? E, se houver uma solucao que "trave" a tela inteira me mostrar um exemplo pratico de qual é e de onde colocar o codigo extra necessario?

Alem de "travar" a faixa inferior, se isto for possivel, há como torna-la parte usavel do Form?

felipemdc

  • Administrator
  • Hero Member
  • *
  • Posts: 3538
Re: Problema com tamanho das telas no Mobile
« Reply #3 on: October 16, 2011, 03:27:22 pm »
Presumindo que a "rotina de fullscreen" que mencionas seja aquela de nome "RemoveTaskBar" que gentilmente me passaste há algum tempo atras, informo que já a estou usando em cada Form, conforme logica abaxo.

Um, então acho que o jeito seria usar MoveWindow para aumentar a janela no OnShow por exemplo.

Você tem aí o código da rotina RemoveTaskbar?

Quote
No inicio da rotina FormShow eu faco:

if Privez then
   begin;
      RemoveTaskbar(true,Self); // inclui o Self para poder usar o mesmo codigo
      Privez := false;                   // para todos Form
  end;

Esse Privez é global para o projeto todo ou cada form tem 1?

Quote
Nao entendo porem, pq nao é usada barra inferior, ficando desprotegida e c/parte da tela "debaixo" disponivel. Quando clico nesta barra, o foco volta para a tela "debaixo". Como nao devo usar ShowModal, tá feita a caca.

A questão é que a janela está menor do que deveria, usando MoveWindow dá para concertar isso.

nightrider

  • Full Member
  • ***
  • Posts: 139
Re: Problema com tamanho das telas no Mobile
« Reply #4 on: October 16, 2011, 03:41:14 pm »
O codigo da rotina de remover task bar e teclado.

======================================================

procedure RemoveTaskbar(AFullScreen: Boolean;Form : TForm);
const
  MENU_HEIGHT = 26;
var
  rc: TRect;
begin
  if AFullScreen then
     begin
       GetWindowRect(Form.Handle, @rc);
       SHFullScreen(Form.Handle, SHFS_HIDETASKBAR);
       MoveWindow(Form.Handle,rc.left,rc.top-MENU_HEIGHT,rc.right,rc.bottom+MENU_HEIGHT,TRUE);
     end
  else
     begin
       GetWindowRect(Form.Handle, @rc);
       SHFullScreen(Form.Handle, SHFS_SHOWTASKBAR);
       MoveWindow(Form.Handle,rc.left,rc.top+MENU_HEIGHT,rc.right,rc.bottom-MENU_HEIGHT,TRUE);
     end;
end; // RemoveTaskbar

procedure RemoveVirtualKeyboard(ARemove: Boolean;Form: TForm);
begin
  if ARemove then
     SHFullScreen(Form.Handle, SHFS_HIDESIPBUTTON)
  else
     SHFullScreen(Form.Handle, SHFS_SHOWSIPBUTTON);
end; // RemoveVirtualKeyboard

======================================================

Quanto a Privez, cada Form tem um. Acho que global nao teria sentido... Ou to enganado?

Será que dá pra incluir o MoveWindow na RemoveTaskBar? Se nao, poderias passar um modelo de chamada em um metodo que eu pudesse incluir no projeto e usar direto + instrucoes necessarias

[ ]



felipemdc

  • Administrator
  • Hero Member
  • *
  • Posts: 3538
Re: Problema com tamanho das telas no Mobile
« Reply #5 on: October 16, 2011, 03:52:58 pm »
Será que dá pra incluir o MoveWindow na RemoveTaskBar? Se nao, poderias passar um modelo de chamada em um metodo que eu pudesse incluir no projeto e usar direto + instrucoes necessarias

O MoveWindow já esta nessa rotina como você pode ver. Eu acho que uma solução seria usar um fator para o MoveWindow para essas janelas com problemas:

Você pode testar varios valores diferentes, leia a documentação da API MoveWindow que eu já passei antes.

uses Windows;

procedure IncreaseWindow(Form : TForm);
var
  rc: TRect;
begin
  GetWindowRect(Form.Handle, @rc);
  MoveWindow(Form.Handle,rc.left,rc.top,rc.right,rc.bottom+30,TRUE);
end;
« Last Edit: October 16, 2011, 03:54:55 pm by felipemdc »

nightrider

  • Full Member
  • ***
  • Posts: 139
Re: Problema com tamanho das telas no Mobile
« Reply #6 on: October 16, 2011, 04:57:16 pm »
Olá!

Problema resolvido(salvo novos acidentes de percurso). Foi só colocar a chamada ao método IncreaseWindow proposto na procedure FormActivate e tudo parece estar funcionando a contento...

Ah! Após chamar ShowMessage, tambem tem que chamar este método proposto pelo Felipe. No meu caso voltava a aparecer a faixa branca no final da tela.

Grato Felipe

[ ]

 

TinyPortal © 2005-2018