Form x Resolução

10/12/2003

1

Amigos,

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.


Responder

Posts

10/12/2003

Ilan

:D vc pode desenvolver sua aplicação na resolução 800/600 que não terá nenhum problema


Responder

10/12/2003

Marconi

Voce pode já entrar com ele maximizado, independente da resolução de cada um. Para isto utilize a propriedade WindowState:= wsMaximized.

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


Responder

10/12/2003

Marconi

Completando a dica

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


Responder