Tutorial rápido — Create(Owner) em Object Pascal
Em Object Pascal, muitos componentes, incluindo formulários, são criados utilizando o padrão:
```Objeto := TClasse.Create(Owner);
O parâmetro Owner define o proprietário do
componente. Uma das principais responsabilidades do Owner é
controlar a destruição automática do objeto.
1. Create(Application)
Form2 := TForm2.Create(Application);
Nesse caso:
- O Owner do formulário é
Application. - A aplicação será responsável pela sua destruição.
- O formulário também pode ser destruído antecipadamente usando
Free.
2. Create(Self)
Form2 := TForm2.Create(Self);
Self não significa simplesmente
"ele mesmo". Em Object Pascal, Self representa a
instância atual do objeto.
Por exemplo:
procedure TForm1.Abrir;
begin
Form2 := TForm2.Create(Self);
end;
Nesse exemplo:
SelfrepresentaForm1.- Portanto, o Owner de
Form2seráForm1. - Quando
Form1for destruído,Form2também será destruído automaticamente.
3. Create(nil)
Form2 := TForm2.Create(nil);
Quando o parâmetro é nil, o formulário é criado
sem Owner.
- Nenhum outro objeto será responsável pela sua destruição.
- O formulário não será destruído automaticamente por um Owner.
- O código que criou o formulário deve cuidar de sua destruição.
Um padrão comum para um formulário modal é:
Form2 := TForm2.Create(nil);
try
Form2.ShowModal;
finally
Form2.Free;
end;
Create(nil) não significa
"na prática, Application". Se o Owner é nil, o objeto
realmente não possui proprietário.
4. Application.CreateForm
Application.CreateForm(TForm2, Form2);
CreateForm é um método de TApplication usado
para criar formulários.
Conceitualmente, o resultado é semelhante a criar o formulário passando
Application como Owner:
Form2 := TForm2.Create(Application);
Portanto, nesse caso, o formulário fica associado ao ciclo de vida da aplicação.
Regra prática
| Criação | Owner | Responsável pela destruição |
|---|---|---|
Create(Application) |
Application | Application |
Create(Self) |
Objeto representado por Self | Objeto representado por Self |
Create(nil) |
Nenhum | Seu código |
Owner não é Parent
Um conceito importante é não confundir Owner com Parent.
Owner
Está relacionado ao gerenciamento do ciclo de vida e destruição dos componentes.
Parent
Está relacionado à hierarquia visual dos controles.
Por exemplo:
Button1.Parent := Panel1;
Nesse caso, Panel1 passa a ser o Parent visual do botão.
Isso não significa que Panel1 tenha se tornado
automaticamente o Owner do botão.
Resumo
```- Owner controla quem será responsável pela destruição automática do componente.
- Self representa a instância atual do objeto.
- nil significa que o objeto não possui Owner.
Create(nil)não transforma o Owner emApplication.- Owner e Parent são conceitos diferentes.
A escolha do Owner deve levar em consideração quem deverá controlar o ciclo de vida do objeto criado.
```Abraços
Terence