Transformar TImage em uma espécie de Panel

Delphi

06/02/2015

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

Curtidas 0

Melhor post

Joel Rodrigues

Joel Rodrigues

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.
GOSTEI 1

Mais Respostas

Joel Rodrigues

Joel Rodrigues

06/02/2015

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.
GOSTEI 0
Renato Rubinho

Renato Rubinho

06/02/2015

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;
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

06/02/2015

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.
GOSTEI 0
Renato Rubinho

Renato Rubinho

06/02/2015

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