Forum > Portuguese

Problema com tamanho das telas no Mobile

(1/2) > >>

nightrider:
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:
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:
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:

--- Quote from: nightrider 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.
--- End quote ---

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;
--- End quote ---

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.
--- End quote ---

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

nightrider:
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

[ ]


Navigation

[0] Message Index

[#] Next page

Go to full version