centralizar group box em um form

18/11/2008

estou desenvolvendo uma nova aplicação em Delphi 2007 e quero utilizar o MDI Form. Na execução do programa, estou abrindo um form MDI shilld já maximizado. Dependendo da resolução do monitor, este form pode maior ou menor, ocupando toda a área útil da tela. Pois bem, utilizo labels  e maskedit´s dentro de um groupbox. Gostaria de centralizar este groupbox no form, em tempo de execução.

Já tentei os comandos abaixo dentro do OnActivate e do OnShow do form, sem sucesso:

  GroupBox1.Left  := (Self.ClientWidth  div 2) - (GroupBox1.Width  div 2);
  GroupBox1.Top  := (Self.ClientHeight div 2) - (GroupBox1.Height div 2);
 
No aguardo,

Nirlan
Nirlan Fundao

Nirlan Fundao

Curtidas 0

Respostas

Guinther Pauli

Guinther Pauli

18/11/2008

Olá Nirlan !!!  Não há necessidade de se programar qualquer linha de código para poder obter o efeito desejado. Todo componente wincontrol no delphi possui um set chamado Anchors. Esse set tem quatro opções Top, Bottom, Left e Right.  Isso serve para poder “Ancorar um controle”  em relação a quem o contém.   Por padrão todos os componentes do delphi são ancorados ao Top e ao Left, por isso quando maximizamos um formulário os componentes contidos nele ficam ao topo e a esquerda. Se quiser que o componente fique imóvel basta não ancorá-lo setando o top e  o left para false. Ou se quiser que o componente seja redimensionado ancorre além do top e do left o right.   Faça o teste coloque um botão num form, rode e maximize o form. Observe, agora vai alterando a combinação dos anchors e veja o resultado. Assim fica fácil ancorar seu group box para poder sempre estar no centro do form idependente da resolução.   Aguardamos seu retorno,     abs  
GOSTEI 0
Nirlan Fundao

Nirlan Fundao

18/11/2008

Olá Guinther, Achei muito interessante o uso do anchors. Isso me terá muita utilidade.

Mas neste caso especifico, o groupbox ficou centralizado corretamente, mas ele também foi redimensionado.

Teria como ele ser centralizado sem ser redimensionado ?

Eu consegui uma solução com o uso do código abaixo:


procedure TForm940.FormResize(Sender: TObject);
begin
  GroupBox1.Left  := (Panel3.ClientWidth  div 2) - (GroupBox1.Width  div 2);
  GroupBox1.Top   := (Panel3.ClientHeight div 2) - (GroupBox1.Height div 2);
end;


abraços

Nirlan

GOSTEI 0
Guinther Pauli

Guinther Pauli

18/11/2008

Olá Nirlan   Tem sim. Sua Rotina está correta porém lembre-se seu group box está dentro de um panel assim o panel tb deve ser centralizado o que você pode fazer é criar uma procedure conforme abaixo:   procedure AlinharControle(Container: TWinControl; Control: TWinControl); begin   Control.Left := (Container.ClientWidth div 2) - (Control.Width div 2);   Control.Top := (Container.ClientHeight div 2) - (Control.Height div 2);   Control.Update;   Container.Update; end;   Essa rotina alinha qualquer controle a um outro controle container. Como vc tem um panel no form e um group box no panel os dois tem que ser alinhados. O Panel no centro do form e o group box no centro do panel. Para isso basta no OnResize do Form cahamar as rotinas na ordem:   AlinharControle(Form1,Panel1); AlinharControle(Panel1,GroupBox1);       Aguardo seu retorno para encerrarmos o chamado,   abs
GOSTEI 0
Nirlan Fundao

Nirlan Fundao

18/11/2008

ok. podemos encerrar este chamado também.
GOSTEI 0
POSTAR