Form x Resolução
10/12/2003
0
Desenvolvo um aplicativo que é utilizado em uma empresa e nesta empresa há computadores com resoluções diferentes (800x600, 1024x768). Gostaria de saber qual a melhor solução pra que eu adeque meu aplicativo am diferentes resoluções. Gostaria de saber tb se existe aguma forma que eu possa maximizar meu form e alterar o tamanho dos componetes nele contidos proporcionalmente. Por favor me ajudem com esta dúvida cruel. Obrigado.
Magnajr
Posts
10/12/2003
Ilan
10/12/2003
Marconi
O problema é que para algumas resoluções ele vai ficar deformado.
Uma solução é utilizar a propriedade Anchors, onde para cada controle designe sua posição em relação à esquerda, direita, acima ou baixo, quando o form for redimensionado.
Mas a melhor solução é voce definir isto no evento FormResize.
Vou te mandar um exemplo que eu uso para os meus.
procedure TForm1.Ajusta(Etiq: TControl; rv,rh: real; esq, topo, tam, alt:word);
begin
Etiq.top := round(topo * rv);
Etiq.left := round(esq * rh);
if tam > 0 then Etiq.width := round(tam * rh);
if alt > 0 then Etiq.height := round(alt *rv);
end;
procedure TForm1.FormResize(Sender: TObject);
var rh,rv:real; r8,r10,r12:word;
begin
if (form1 = nil) then exit;
rv := form1.height/543;
rh := form1.width /787;
r8 := Min(round(8 * rh),round(8 * rv));
r10 := Min(round(10 * rh),round(10 * rv));
r12 := Min(round(12 * rh),round(12 * rv));
//
Ajusta(panel1,rv,rh,0,0,779,33,0);
Ajusta(panel2,rv,rh,0,33,779,483,0);
Ajusta(bitbtn1,rv,rh,20,4,69,25,0);
Ajusta(bitbtn2,rv,rh,90,4,69,25,0);
...
...
Bitbtn1.font.size:= r8;
Bitbtn2.font.size:= r8;
....
end;
Explicação
No calculo de rh (razão horizontal) e rv (razão vertical) eu pego os novos valores de width e height do form e divido pelos valores originais de construção para determinar a razão dos novos tamanhos.
r8, r10, r12... etc são os novos valores para tamanho de letra, onde faço uma comparação para pegar o mínimo valor entre a correção veritical e a horizontal. Para utilizar a função MIN voce precisa colocar MATH em USES.
a Função Ajusta promove esta correção nos objetos que vierem.
Para esta função voce envia os valores:
Nome do Objeto, rv,rh, left, Top, Width e height originais de projeto.
Já montei uma vez uma função que contava todos os componentes da página e os enviavam via um loop para acertar todos de uma vez. Mas neste caso tem que se fazer outras verificações na função para determinar que tipo de objeto está sendo enviado, para não acessar propriedades que não existem e não dar ´paus´.
Voce também notará que as propriedades Width e height podem ser mandadas com o valor zero. Isto acontece com Labels com autosize = false, por exemplo, quando elas são automáticas.
Espero ter dado uma ajuda
Marconi
10/12/2003
Marconi
a linha abaixo
if (form1 = nil) then exit;
deve ser colocada senão a função vai dar pau quando estive fechando o form
Marconi
Clique aqui para fazer login e interagir na Comunidade :)