Adaptando para resoluções de video diferentes?

Sempre que procurei algo sobre esse tema, ia para no Tip da Borland #2861, que  a mesma informao do arquivo de help da
Loyd's. Esse texto tambem aparece nos bancos de dados da Q&A. Eu suponho que essa seja a informao definitiva. Encontrei
uma informao que no foi mencionada aqui. Pela lista de correiros do Delphi-Talk havia mensagens de Brien King e Michael
Novak que discutiam esse assunto.

***

LOYDS TIPS:

Resoluo de Vdeo:

Quando criamos formulrios, s vezes  til escrever um cdigo para que a tela e todos os seus objetos sejam mostrados no
mesmo tamanho, no importando qual a resoluo da tela. Aqui esta um cdigo que mostra como isso  feito:

Implementation

const
ScreenWidth: LongInt = 800; {I designed my form in 800x600 mode.}
ScreenHeight: LongInt = 600;

{$R *.DFM}

procedure TForm1.FormCreate (Sender: Tobject);

begin
scaled := true;
if (screen.width <> ScreenWidth) then
begin
height := longint(height) * longint(screen.height) DIV ScreenHeight;
width := longint(width) * longint(screen.width) DIV ScreenWidth;
scaleyBy(screen.width, ScreenWidth);
end;
end;

Agora, voc vai querer checar, se o tamanho dos fontes(de letra) esto OK. Antes de trocar p tamanho do fonte, voc precisar ter
certeza de que o objeto realmente tem a propriedade fonte pela checagem da RTTI. Isso pode ser feito assim:

USES tyinfo; {Add this to your USES statement.}

var

i:integer;

begin
for i := componentCount - 1 downto 0 do
with components[i] do
begin
if GetPropInfo(ClassInfo, font) <> nil then
font.size := (NewFormWidth DIV OldFormWidth) * font.size;
end;
end;



{Esta  a maneira longa de fazer a mesma coisa}

var

i:integer;

p:PPropInfo;

begin
for i := componentCount - 1 downto 0 do
with components [i] do
begin
p := GetPropInfo (ClassInfo, font);
if assigned (p) then
font.size := (NewFormWidth DIV OldFormWidth) * font.size;
end;
end;

Ateno: Nem todos os objetos tem a propriedade FONT. Isso deve ser o suficiente para voc comear.

Ateno: A seguir, algumas dicas para ter em mente quando representar aplicaes Delphi (formulrios) em diferentes resolues
de Tela:

* Decida antecipadamente, na etapa de criao do formulrio, se ele ser escalvel ou no. A vantagem de um no escalvel 
que nada muda em tempo de execuo. A desvantagem  equivalente (seu formulrio pode ser muito pequeno ou grande para
alguns sistemas se no for usada escala).

* Se voc no for usar formulrio escalvel, configure o set scaled to False.

* Ou ento, configure a propriedade scaled do formulrio para True.

* Configure a propriedade AutoScroll para False. AutoScroll = True quer dizer "no mexa no tamanho do frame do formulrio em
tempo de execuo", o que no parece bom quando o contedo do formulrio muda de tamanho.

* Configure a fonte do formulrio para uma True Type escalvel, como a Arial MS. San Serif  uma boa alternativa, mas lembre que
ainda  uma fonte bitmapped. S a Arial dar uma fonte dentro de um pixel da altura desejada.ATENO: Se a fonte usada em
uma aplicao no estiver instalada no computador, o Windows selecionar uma fonte alternativa da mesma famlia para utilizar. O
tamanho dessa fonte pode no corresponder ao da fonte original, podendo causar problemas.

* Configure a propriedade position do formulrio para uma opo diferente de poDesigned. poDesigneddeixa o formulrio onde voc
o deixou ( no design Time), o que sempre termina fora da margem,  esquerda da minha tela 1280 x 1024 - e completamente fora
da tela 640 x 480.

* No amontoe controles no formulrio - deixe pelo menos 4 pixels entre else, para que uma mudana de um pixel nas margens
(devido a apresentao em escala) no mostre controles sobrepostos.

* Para labels de uma linha alinhadas  esquerda ou  direita, configure o AutoSize para True. Para outras formas de alinhamento
configure o AutoSize para False.

* Tenha certeza de que h espao em branco suficiente num componente de labels para alteraes no tamanho da fonte - um
espao de 25% do comprimento da linha de caracteres mostrada  um pouco a mais do que se precisa, mas  mais seguro.
(Voc vai precisar de um espao equivalente a 30% de espanso para string labels se voc pretende traduzir sua aplicao para
outra linguagem). Se o Autosize estiver em False, tenha certeza de que realmente configurou o tamanho do label corretamente.
Se o Autosize estiver em True, esteja certo de que h espao suficiente para que o label se amplie.

* Em labels de mltiplas linhas ou de termos ocultos, deixe pelo menos uma linha em branco na base. Isso vai ser necessrio
para incluir o que estiver sobrando quando o texto for oculto de maneira diferente, pela mudana do tamanho da fonte com a
escala. No assuma isso porque est usando fontes grandes. Voc no tem que deixar sobra de texto - as fontes (grandes) de
outros usurios podem ser maiores que as suas!

* Tenha cuidado quando abrir um projeto em IDEs com resolues diferentes. Assim que o formulrio for aberto, sua propriedade
Pixel per Inch ser moditificada, e gravada para o DFM se voc salvar o projeto.  melhor testar a aplicao rodando sozinho, e
editar o formulrio em apenas uma resoluo. Editar em vrias resolues e tamanhos de fonte provoca problemas de fluxo e
tamanho dos componentes.

*Falando em fluxo de componentes, no represente o formulrio em escala muitas vezes, quando estiver sendo criado ou quando
tiver sendo executado. Cada escala introduz erros de roundoff que se acumulam muito rapidamente, uma vez que as coordenadas
so rigorosamente interias. Quando valores fracionrios forem retirados das origens e tamanhos do controle com cada sucessiva
representao em escala, os conttroles parecero deslizar para noroeste e ficar menores. Se voc quer deixar seus usurios
representarem o formulrios em escala quantas vezes quiserem, comece com um formulrio recentemente criado para que erros
de escala no se acumulem.

* Definitivamente, no mexa na propriedade Pixel pre Inch do formulrio.

* Em geral, no  necessrio criar formulrios em uma resoluo especfica, mas  essencial que voc os revise em 640 x 480
com fontes pequenas e/ou grandes, e em alta resoluo com fontes pequenas e/ou grandes antes de liberar suas aplicaes. Isso
deverser parte de sua lista de conferncia para testar a compatibilidade do sistema regularmente.

* Preste bastante ateno em todos os componentes que so basicamamente TMemo de uma linha - com oTDBLookupCombo. O
controle de edio (multi-linhas) do Windows sempre mostra apenas linhas inteiras de texto. Se o controle for muito curto para
sua fonte, um TMemo no mostrar coisa alguma, e um TEdit mostrar um pedao do texto.  melhor fazer esses componentes
um pouco maiores do que deix-los um pixel menores e no aparecer nada do texto.

* Tenha em mente que toda representao em escala  proporcional  diferena da altura da fonte entre o modo de execuo e o
modo de desenho, NO  resoluo ou ao tamanho do monitor. Lembre tambm que as origens dos seus controles sero
alteradas quando o formulrio for representado em escala. Voc no pode aumentar componentes muito bem sem tambm
mov-los um pouco, novamente.

    

Autor : desconhecido

Voltar