Fórum Transformar TImage em uma espécie de Panel #509708

06/02/2015

0

Boa noite!

Eu gostaria de colocar uma imagem como background no meu form, mas de forma onde conseguisse alinhar os objetos dentro do TImage. Ex.:

1 - Tenho um TImage alclient no meu form;
2 - Coloco um label, e alinho altop.

Gostaria que o label ficasse altop, mas dentro da imagem... O label foi só um exemplo... gostaria que a imagem ficasse por trás de qualquer objeto que eu alinhasse, ficando como um "panel". Como eu poderia fazer isso??
Robert

Robert

Responder

Post mais votado

06/02/2015

Outra opção seria deixar o TImage com Align = alNone e fixá-lo em Left=0, Top=0 e Height e Width iguais às do form. Em seguida, alterar a propriedade Anchors para fixar todas as posições (akLeft, akTop, akRight e akBottom). Assim o TImage teria sempre o mesmo tamanho do form, ocupando o que seria o plano de fundo, porém sem alinhamento, o que permitiria colocar outros controles com Align definido por cima dele. Se for preciso, também se pode enviar o TImage para trás, clicando com a direita sobre ele, depois em Control>Send To Back.

Joel Rodrigues

Joel Rodrigues
Responder

Gostei + 1

Mais Posts

06/02/2015

Joel Rodrigues

Não é possível fazer de forma automática, pois o TImage não é um container. Esse tipo de manipulação precisa ser feita manualmente, posicionando cada controle em seu devido lugar e ativando as âncoras para ele permanecer fixo.
Responder

Gostei + 0

06/02/2015

Renato Rubinho

Uma opção menos trabalhosa é utilizar o evento onResize do Parent dos objetos:

No exemplo a seguir coloquei o TImage e o TLabel dentro de um TPanel.

No OnResize do TPanel, removo o Align do TLabel, atribuo alClient ao TImage para alinhá-lo e depois removo, pois "já está posicionado onde desejo" e, por fim, atribuo alClient ao TLabel.

procedure Panel1Resize(Sender: TObject);
begin
  Label1.Align := alNone;
  Image1.Align := alClient;
  Image1.Align := alNone;
  Label1.Align := alTop;
end;
Responder

Gostei + 0

06/02/2015

Joel Rodrigues

Se é pra manter os controles internos em posições fixas, será que essa opção é mesmo menos trabalhosa, uma vez que envolve codificação para todos os controles em questão? E se consideramos que a cada pixel alterado nas dimensões esse evento é disparado, teríamos essa "montagem" da interface sendo feita inúmeras vezes.
Abraço.
Responder

Gostei + 0

06/02/2015

Renato Rubinho

Joel Rodrigues, eu nunca tinha usado a propriedade Anchors...
Assim é obviamente melhor.
Faz a mesma coisa, mas sem uma linha de programação.
Responder

Gostei + 0

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

Aceitar