Como redimencionar objetos

Delphi

27/06/2011

Olá Pessoal!

Meu maior problema é a parte do Design do programa.

Tenho aqui um codigo que me ajuda a resolver os problemas do redimencionamento da tela para qualquer resolução de vídeo. Ou seja, o formulário cobrirá toda a tela independente da resolução.

O codigo abaixo:

     if Components[i] is TWinControl then begin // Redefine os componentes em proporção ao original
         TWinControl(Components[i]).Width  := Round(TWinControl(Components[i]).Width  * (Screen.Width  / iWidth));
         TWinControl(Components[i]).Height := Round(TWinControl(Components[i]).Height * (Screen.Height / iHeight));
         TWinControl(Components[i]).Left   := Round(TWinControl(Components[i]).Left   * (Screen.Width  / iWidth));
         TWinControl(Components[i]).Top    := Round(TWinControl(Components[i]).Top    * (Screen.Height / iHeight));
      end;

Reposiciona os objetos no formulário, mas não esta redimencionando-os. Sendo assim, se eu coloco um botão ao lado do outro sem espaço, quando executo em uma tela com resolução maior da que o programa foi desenvolvido, os botões se reposicionam de acordo com o formulário mas não se extendem para ficarem na forma original, sem espaço.

O código completo que estou usando é esse:

procedure AdaptaResolucaoDeVideo(Formulario: TForm; iWidth, iHeight : SmallInt);
var
 i : integer;
begin
 with Formulario do begin
    // Expande form independente da resolução
    Left   := 0;
    Top    := 0;
    Width  := Screen.Width;
    Height := Screen.Height;

    for i := 0 to ComponentCount -1 do begin // Varre todos os componentes do form que possam ser redefinidos (classe TWinControl)
      if Components[i] is TWinControl then begin // Redefine os componentes em proporção ao original
         TWinControl(Components[i]).Width  := Round(TWinControl(Components[i]).Width  * (Screen.Width  / iWidth));
         TWinControl(Components[i]).Height := Round(TWinControl(Components[i]).Height * (Screen.Height / iHeight));
         TWinControl(Components[i]).Left   := Round(TWinControl(Components[i]).Left   * (Screen.Width  / iWidth));
         TWinControl(Components[i]).Top    := Round(TWinControl(Components[i]).Top    * (Screen.Height / iHeight));
      end;
    end;

    // Redefine o Formulário
    Width  := Round(Width  * (Screen.Width  / iWidth));
    Height := Round(Height * (Screen.Height / iHeight));
    Top    := Round(Top    * (Screen.Height / iHeight));
    Left   := Round(Left   * (Screen.Width  / iWidth));

    // Altera o tamanho da Fonte do Formulário
    Font.Size := Round(Font.Size * (Screen.Height / iHeight));
 end;
end;

Alguém tem alguma solução ou algum codigo de exemplo que resolva isso: vagner.almeida.rj@gmail.com
Agradeço desde já qualquer ajuda.

Vagner Almeida

Vagner Almeida

Curtidas 0

Respostas

Pjrm1470

Pjrm1470

27/06/2011

oi!
Qual delphi você está usando?

Todos os componentes podem ser redimencionados sem "estragar" o design e posicionamento deles, com as propriedades:
- Align
- Anchors

As ancoras fazem com que sem componente permaneta parado na direção em que você o definir. É menos trabalhoso que ficar utilizando algoritimo de escala. Dê um "Google" que você encontra muitos codigos prontos para escalonar componente ou o form de acordo com o tamanho da tela.

Abraço,
pjrm1470.
GOSTEI 0
Wilson Junior

Wilson Junior

27/06/2011

De uma olhada neste link https://www.devmedia.com.br/forum/viewtopic.asp?id=391295

Espero ter colaborado.
GOSTEI 0
POSTAR