Esse artigo faz parte da revista Clube Delphi Edição 78. Clique aqui para ler todos os artigos desta edição

etc., sejam para apenas exibir um botão na tela ou para fornecer acesso a um banco de dados.

E, independentemente da função dos componentes, a sua utilização (e criação) foi enormemente facilitada através de uma sigla que conhecemos bem: VCL. Mas, como a VCL funciona? Quais classes a sustentam? Entender o seu funcionamento interno é de suma importância para criar novos componentes corretamente, e saber como se comportam os que são nativos do Delphi. Isso tudo veremos neste artigo.

 

VCL: um pequeno histórico

Em inglês, VCL significa Visual Component Library. Em português, Biblioteca de Componentes Visuais. Embora o nome faça parecer que a VCL é composta apenas de controles visíveis ao usuário, também há classes que, mesmo não aparecendo no sentido literal do termo, servem como base ou auxiliam as que assim o são.

A VCL existe desde o Delphi 1, lançado em 1995, e assim como a ferramenta, vem sofrendo mudanças e melhorias ao longo do tempo. Sua principal função era abstrair do desenvolvedor o conhecimento de API’s nativas do sistema operacional para a criação de interfaces gráficas (GUI ou Graphical User Interface).

Esse papel, todos sabemos que a VCL cumpre muito bem, e isso foi um dos grandes atrativos para o Delphi, quando do seu lançamento. Afinal, alguém aqui já precisou escrever CreateWindow para criar um formulário?

 

Hierarquia da VCL

A hierarquia da VCL é absurdamente extensa. Nela estão todos os componentes nativos do Delphi/C++ Builder. Nesse grupo de classes, podemos destacar um subconjunto que serve de base para todos os outros:

 

·         TObject

o        TPersistent

§         TComponent

·         TControl

o        TGraphicControl

o        TWinControl

§         TCustomControl

 

Veremos agora a função, alguns métodos e propriedades de cada classe.

TObject

Essa classe é a base para todos os objetos na Delphi Language. Todas as classes da VCL herdam dela, direta ou indiretamente. TObject provê as funções básicas de todo objeto, como criação, destruição, alocação e liberação de memória. Além disso, também publica informações de run-time (RTTI ou Runtime Type Information) sobre as propriedades declaradas em sua seção published.

Essa classe não possui propriedades nem eventos, apenas métodos, muitos estáticos (também chamados de métodos de classe). Algumas dessas rotinas são bem interessantes em determinadas situações. Vejamos então quais são elas:

AfterConstruction: chamado após o construtor da classe ter sido executado com sucesso. Na implementação original em TObject ele não faz nada. Você deve, portanto codificá-lo em uma classe derivada. TCustomForm, por exemplo, utiliza esse método para gerar o evento OnCreate. Como essa rotina é chamada automaticamente após o construtor da classe, você nunca deve chamá-la explicitamente;

BeforeDestruction: sua função é a oposta do método anterior. É chamado imediatamente antes do destrutor da classe ser executado. Novamente, não chame essa rotina diretamente, pois ela é disparada automaticamente em momento oportuno. É importante notar que o método só será chamado se o construtor da classe for bem sucedido. Isso quer dizer que se uma exceção ocorrer dentro do construtor, o destrutor será chamado para liberar a memória do objeto alocada até o momento do erro, mas BeforeDestruction não será executado;

ClassName: retorna o nome da classe do objeto. Por exemplo, um botão retornaria TButton, um Label retornaria TLabel etc. É muito útil quando precisamos diferenciar instâncias de objetos armazenadas em variáveis cujo tipo seja uma classe ancestral; ...

Quer ler esse conteúdo completo? Tenha acesso completo