Forum > Portuguese
Problema com tamanho das telas no Mobile
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