Sempre que procurei algo sobre esse tema, ia para no Tip da
Borland #2861, que é a mesma informação do arquivo de help da Loyd’s. Esse
texto tambem aparece nos bancos de dados da Q&A. Eu suponho que essa seja a
informação definitiva. Encontreiuma informação que não foi mencionada aqui.
Pela lista de correiros do Delphi-Talk havia mensagens de Brien King e
MichaelNovak que discutiam esse assunto.
***
LOYD´S TIPS:
Resolução de Vídeo:
Quando criamos formulários, ãs vezes é útil escrever um
código para que a tela e todos os seus objetos sejam mostrados nomesmo tamanho,
não importando qual a resolução da tela. Aqui esta um código 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) estão 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
typinfo; {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;
Atenção: Nem todos os objetos tem a propriedade FONT. Isso
deve ser o suficiente para você começar.
Atenção: A seguir, algumas dicas para ter em mente quando
representar aplicações Delphi (formulários) em diferentes resoluçõesde Tela:
* Decida antecipadamente, na etapa de criação do formulário,
se ele será escalável ou não. A vantagem de um não escalável é que nada muda em
tempo de execução. A desvantagem é equivalente (seu formulário pode ser muito
pequeno ou grande para alguns sistemas se nào for usada escala).
* Se você não for usar formulário escalável, configure o set
scaled to False.
‘* Ou então, configure a propriedade scaled do formulário
para True.
* Configure a propriedade AutoScroll para False. AutoScroll
= True quer dizer "não mexa no tamanho do frame do formulário em tempo de
execução", o que não parece bom quando o conteúdo do formulário muda de
tamanho.
* Configure a fonte do formulário para uma True Type
escalável, 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.ATENÇÃO: Se a fonte usada em uma aplicação não estiver
instalada no computador, o Windows selecionará uma fonte alternativa da mesma
família para utilizar. O tamanho dessa fonte pode não corresponder ao da fonte
original, podendo causar problemas.
* Configure a propriedade position do formulário para uma
opção diferente de poDesigned. poDesigneddeixa o formulário 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.
* Não amontoe controles no formulário - deixe pelo menos 4
pixels entre else, para que uma mudança de um pixel nas margens (devido a
apresentação em escala) não 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á espaço em branco suficiente num
componente de labels para alterações no tamanho da fonte – um espaço 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 espaço equivalente a 30%
de espansão para string labels se você pretende traduzir sua aplicação 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á espaço suficiente para que o label se amplie.
* Em labels de múltiplas linhas ou de termos ocultos, deixe
pelo menos uma linha em branco na base. Isso vai ser necessário para incluir o
que estiver sobrando quando o texto for oculto de maneira diferente, pela
mudança do tamanho da fonte com a escala. Não assuma isso porque está usando
fontes grandes. Você não tem que deixar sobra de texto - as fontes (grandes) de
outros usuários podem ser maiores que as suas!
* Tenha cuidado quando abrir um projeto em IDEs com
resoluções diferentes. Assim que o formulário for aberto, sua propriedade Pixel
per Inch será moditificada, e gravada para o DFM se você salvar o projeto. É
melhor testar a aplicação rodando sozinho, e editar o formulário em apenas uma
resolução. Editar em várias resoluções e tamanhos de fonte provoca problemas de
fluxo e tamanho dos componentes.
*Falando em fluxo de componentes, não represente o
formulário 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 são rigorosamente interias. Quando
valores fracionários forem retirados das origens e tamanhos do controle com
cada sucessiva representação em escala, os conttroles parecerão deslizar para
noroeste e ficar menores. Se você quer deixar seus usuários representarem o
formulários em escala quantas vezes quiserem, comece com um formulário
recentemente criado para que erros de escala não se acumulem.
* Definitivamente, não mexa na propriedade Pixel pre Inch do
formulário.
* Em geral, não é necessário criar formulários em uma
resolução específica, mas é essencial que você os revise em 640 x 480 com
fontes pequenas e/ou grandes, e em alta resolução com fontes pequenas e/ou
grandes antes de liberar suas aplicações. Isso deverser parte de sua lista de
conferência para testar a compatibilidade do sistema regularmente.
* Preste bastante atenção em todos os componentes que são
basicamamente TMemo de uma linha - com oTDBLookupCombo. O controle de edição
(multi-linhas) do Windows sempre mostra apenas linhas inteiras de texto. Se o
controle for muito curto para sua fonte, um TMemo não mostrará coisa alguma, e
um TEdit mostrará um pedaço do texto. É melhor fazer esses componentes um pouco
maiores do que deixá-los um pixel menores e não aparecer nada do texto.
* Tenha em mente que toda representação em escala é
proporcional à diferença da altura da fonte entre o modo de execução e o modo
de desenho, NÃO à resolução ou ao tamanho do monitor. Lembre também que as
origens dos seus controles serão alteradas quando o formulário for representado
em escala. Você não pode aumentar componentes muito bem sem também movê-los um
pouco, novamente.
Obtendo e modificando
a posição do cursor em um TMemo
Modificando a posição:
ActiveControl:=Memo1;
MemoCursorTo(Memo1,2,3);
Obtendo a Posição:
GetMemoLineCol(Memo1,Linha,Coluna);