Toda vez que você coloca um painel em um formulário e um botão nesse painel, você faz uma conexão "invisível". O formulário se torna o proprietário do botão e o painel está definido como pai.
Todo componente Delphi possui uma propriedade Owner. O proprietário cuida de libertando os componentes de propriedade quando está sendo liberado.
Semelhante, mas diferente, a propriedade Parent indica o componente que contém o componente "filho".
Pai
Pai se refere ao componente em que outro componente está contido, como TForm, TGroupBox ou um TPanel. Se um controle (pai) contiver outros, o controles contidos são controles filhos do pai.
Pai determina como o componente é exibido. Por exemplo, as propriedades Esquerda e Superior são todas relativas ao Pai.
A propriedade Parent pode ser atribuída e alterada durante o tempo de execução.
Nem todos os componentes têm o pai. Muitos formulários não têm um pai. Por exemplo, os formulários que aparecem diretamente na área de trabalho do Windows têm o Pai definido como nulo. Um componente
HasParent O método retorna um valor booleano indicando se o componente foi ou não atribuído a um pai.Usamos a propriedade Parent para obter ou definir o pai de um controle. Por exemplo, coloque dois painéis (Painel1, Painel2) em um formulário e coloque um botão (Botão1) no primeiro painel (Painel1). Isso define a propriedade Parent do botão como Panel1.
Button1.Parent: = Panel2;
Se você colocar o código acima no evento OnClick para o segundo painel, quando você clicar em Panel2, o botão "pula" do Panel1 para o Panel2: Panel1 não é mais o pai do botão.
Quando você deseja criar um TButton em tempo de execução, é importante lembrarmos de atribuir um pai - o controle que contém o botão. Para que um componente fique visível, ele deve ter um pai para se exibir dentro.
ParentThis e ParentThat
Se você selecionar um botão no momento do design e examinar o Object Inspector, notará várias propriedades "compatíveis com os pais". o ParentFont, por exemplo, indica se a fonte usada para a legenda do botão é igual à usada para o pai do botão (no exemplo anterior: Painel1). Se ParentFont for True para todos os botões em um painel, alterar a propriedade de fonte do painel para Negrito fará com que todas as legendas de botões no painel usem essa fonte (em negrito).
Propriedade Controls
Todos os componentes que compartilham o mesmo pai estão disponíveis como parte do Controles propriedade desse pai. Por exemplo, controles podem ser usados para iterar sobre todos os filhos do controle em janelas.
O próximo trecho de código pode ser usado para ocultar todos os componentes contidos no Panel1:
para ii: = 0 para Panel1.ControlCount - 1 Faz
Panel1.Controls [ii] .Visible: = false;
Truques
Os controles com janelas têm três características básicas: eles podem receber o foco de entrada, usam os recursos do sistema e podem ser pais de outros controles.
Por exemplo, o componente Button é um controle em janela e não pode ser o pai de outro componente - você não pode colocar outro componente nele. O problema é que o Delphi esconde esse recurso de nós. Um exemplo é a possibilidade oculta de um TStatusBar ter alguns componentes como TProgressBar nele.
Propriedade
Primeiro, observe que um formulário é o proprietário geral de todos os componentes que residem nele (posicionados no formulário no momento do design). Isso significa que, quando um formulário é destruído, todos os componentes no formulário também são destruídos. Por exemplo, se tivermos um aplicativo com mais de um formulário quando chamarmos o método Free ou Release para um objeto de formulário, não precisa se preocupar em liberar explicitamente todos os objetos desse formulário - porque o formulário é o proprietário de todos os seus componentes.
Cada componente que criamos, no design ou no tempo de execução, deve pertencer a outro componente. O proprietário de um componente - o valor de sua propriedade Owner - é determinado por um parâmetro transmitido ao construtor Create quando o componente é criado. A única outra maneira de reatribuir o Proprietário é usar os métodos InsertComponent / RemoveComponent durante o tempo de execução. Por padrão, um formulário possui todos os componentes nele e, por sua vez, pertence ao Aplicativo.
Quando usamos a palavra-chave Auto como o parâmetro para o método Create - o objeto que estamos criando pertence à classe em que o método está contido - que geralmente é um formulário Delphi.
Se, por outro lado, tornamos outro componente (não o formulário) o proprietário do componente, então estamos responsabilizando-o pelo descarte do objeto quando ele é destruído.
Como qualquer outro Componente Delphi, O componente TFindFile personalizado pode ser criado, usado e destruído em tempo de execução. Para criar, usar e liberar um Componente TFindFile na execução, você pode usar o próximo trecho de código:
usa Achar arquivo;
...
var FFile: TFindFile;
procedimento TForm1.InitializeData;
início // form ("Self") é o proprietário do componente // não há pai, pois esse // é um componente invisível.
FFile: = TFindFile. Criar (Self);
...
fim;
Nota: Como o FFile é criado com um proprietário (Form1), não precisamos fazer nada para liberar o componente - ele será liberado quando o proprietário for destruído.
Propriedade de componentes
Todos os componentes que compartilham o mesmo proprietário estão disponíveis como parte do Propriedade de componentes desse proprietário. O procedimento a seguir é usado para limpar todos os componentes de edição que estão no formulário:
procedimento ClearEdits (AForm: TForm);
var
ii: Inteiro;
início
para ii: = 0 para Um formulário. ComponentCount-1 Faz
E se (Um formulário. Componentes [ii] é TEdit) então TEdit (AForm. Componentes [ii]) Texto: = '';
fim;
"Órfãos"
Alguns controles (como controles ActiveX) estão contidos em janelas que não são da VCL, e não em um controle pai. Para esses controles, o valor de Parent é nada e a ParentWindow A propriedade especifica a janela pai não-VCL. A configuração ParentWindow move o controle para que ele fique contido na janela especificada. ParentWindow é definido automaticamente quando um controle é criado usando o CreateParented método.
A verdade é que, na maioria dos casos, você não precisa se preocupar com pais e proprietários, mas quando se trata de OOP e desenvolvimento de componentes ou quando você quiser dar um passo à frente no Delphi, as instruções neste artigo o ajudarão a dar esse passo mais rapidamente.