Há uns 2 anos, eu precisei implantar um formulário que deveria manter a aparência em diferentes resoluções. Após testar alguns códigos, cheguei a um que resolveu o meu problema:

procedure ScaleForm(AForm: TForm);
var
  i, x, y, w, sw: integer;
  nEscala: Double;
  nPorcento: Integer; 
begin
  sw := 1280;  // a resolucao original, que eu utilizo em meu monitor
  w := AForm.width;
  AForm.Scaled := true;
  if (Screen.width <> sw) then
  begin
    nEscala := ((Screen.Width - sw) / sw);
    nPorcento := Round((nEscala * 100) + 100);

    AForm.Scaleby(screen.width, sw);

    for y := 0 to AForm.ComponentCount -1 do
    begin
      if (AForm.Components[y] is TDBGrid) and
        (TDBGrid(AForm.Components[y]).Columns.Count > 0) then
      begin
        for x := 0 to TDBGrid(AForm.Components[y]).Columns.Count -1 do
          TDBGrid(AForm.Components[y]).Columns[x].Width :=
            Round(TDBGrid(AForm.Components[y]).Columns[x].Width * (nPorcento /
            100));
      end;
    end;
  end;
end;

Chamo a função no create do form. Com isso, posso utilizar diferentes resoluções (800×600, 1024×768, etc.) e o form mantém sua aparência.

Abraços.

Desenvolvedor de software desde 1995. Em 1998, abriu sua própria empresa, a Lukas Sistemas, desde então passou a atender diversas empresas, principalmente autopeças. Apaixonado por Delphi, porém não o impede de flertar com outras linguagens sempre que possível. Mora na cidade de Balsas/MA com sua esposa e dois filhos.

2 thoughts on “Dica: Adaptando Form para diferentes resoluções”

  1. não dá certo..
    gera o seguinte erros:


    [DCC Error] Unit1.pas(34): E2029 ')' expected but identifier 'lt' found
    [DCC Error] Unit1.pas(43): E2003 Undeclared identifier: 'TDBGrid'
    [DCC Error] Unit1.pas(44): E2029 ')' expected but identifier 'Columns' found
    [DCC Error] Unit1.pas(46): E2029 'DO' expected but identifier 'Columns' found
    [DCC Error] Unit1.pas(14): E2065 Unsatisfied forward or external declaration: 'TForm1.ScaleForm'
    [DCC Fatal Error] Project1.dpr(5): F2063 Could not compile used unit 'Unit1.pas'

    Uso e delphi xe2.

    1. Olá Cleber

      Referente ao erro (34), já foi corrigido no post. O WordPress trocou <> por outros carateres.

      Com relação ao erro (43), certifique-se de que a unit DBGrids esteja na cláusula uses. Quando você adiciona um dbgrid no seu form automaticamente ele adiciona as units necessárias.

      Veja isso, para verificar se existe algum outro erro.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.