GARANTIR DESCONTO

Fórum Resolução de tela #168704

10/07/2003

0

Recentemente postei um tópico com uma dúvida em relação a resolução de tela no Delphi, não obtive sucesso por isso tornei a pedir ajuda. Meu problema é que desenvolvemos uma aplicação que encaixa em uma resolução de tela 800x600 ou superior, é uma aplicação bastante complexa com muitos componentes de acesso a banco de dados, sendo assim utilizamos muitos DBEdit´s. Nosso problema aparece quando vamos rodar a aplicação em uma resolução de tela 640x480 em um monitor de 9´, a tela da aplicação reduz-se sem problema, o problema está nos DBEdit´s e Botões, eles permanecem em tamanho de criação, estourando na tela. Um código que mude cada componente ficaria inviável no momento, devido ao prazo de entrega da aplicação. Gostaria de que me ajudassem, dizendo-me, se existe alguma função ou algo parecido que verifique a resolução de tela e adaptasse os componentes percentualmente ao tamanho que ficará a form principal, esta que adapta-se corretamente. Agradecido.


Slayer

Slayer

Responder

Posts

10/07/2003

Andreyrf

mande um email p/ andreyf@uol.com.br que te mando um exemplo parecido.


Responder

Gostei + 0

15/07/2003

Slayer

Grande Andrey!!! Valeu, valeu mesmo, deu no laço exatamente o que eu precisava, não precisei nem utilizar o restante do código que seria para ajustar as fontes. Obrigado pela força!!!


Responder

Gostei + 0

16/07/2003

Petrified Eyes

Não seria uma boa se vocês postassem o exemplo aqui, para caso algum usuário com a mesma dúvida já achar o problema no pesquiser do forum?


Responder

Gostei + 0

16/07/2003

Kanedasam

Quando criamos formulários, ãs vezes é útil escrever um código para que a tela e todos
os seus objetos sejam mostrados no mesmo 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 o 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;

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ções de 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ê
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 controles 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 deve ser 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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar