Criação de Componentes
Componentes. Ah, o que seria de nós programadores sem eles. Poucos são os aplicativos que não fazem uso deles. Às vezes ele é um botão, uma caixa de opções. Outras, um engine de banco de dados, um timer. Enfim, há inúmeras funções para um componente. Neste artigo mostrarei como criá-los para tornar mais prático o processo de desenvolvimento de suas aplicações.
Por que criar um componente?
Sempre que você estiver necessitando reescrever algum código relativamente complexo que já tenha feito antes, ou no mesmo projeto ou em outro, é uma boa idéia parar e pensar se não seria mais prático encapsular este código dentro de um componente.
Eu disse “relativamente complexo” porque se o código em questão é simplesmente uma função que retorna a imagem de um código de barras, por exemplo, então apenas ponha esta função em uma unit de propósito geral e faça referência a ela onde for necessário. Agora, se você quer que o usuário possa visualizar este código de barras em um TImage próprio, gerenciado pelo próprio aplicativo e independente da intervenção dele, o usuário, então seria mais lógico criar um componente.
Transformado em componente, seu código pode ser inserido em quantas aplicações você quiser. Da mesma forma, todas as alterações que você fizer no componente refletirão automaticamente em todos os projetos que o utilizarem.
Pré-requisitos
Para desenvolver componentes no Delphi, você deve conhecer os conceitos da Programação Orientada a Objetos, pois, como dito no tópico anterior, um componente é essencialmente um objeto. Você pode encontrar boas informações sobre POO (em inglês) no site delphi.about.com.
Como os componentes são criados
A primeira coisa a decidir sobre qual classe base você derivará o seu componente. Ao derivar de outra classe, você herda as funcionalidades (métodos, propriedades e eventos) da classe pai. Você deve, portanto, escolher qual classe base se adapta melhor ao tipo de componente que você deseja criar. Veja abaixo como escolher a classe base para seus componentes:
Quando você quer simplesmente adicionar novas funcionalidades a um componente existente, derive-o diretamente da classe desejada. Por exemplo, TMemo.
Às vezes é necessário não apenas adicionar funcionalidades, mas também remover algumas existentes. Assim sendo, derive de TCustomXXXX. Por exemplo, TCustomMemo. Essas classes, em geral, declaram seus métodos, propriedades e eventos na seção Protected. Assim você pode definir quais deles serão visíveis ao usuário da classe derivada.
Se o seu componente deve receber foco em uma janela, ele precisa então de um handle desta mesma janela. TWinControl é a classe onde este handle foi primeiramente introduzido. Se ele não precisar receber foco, derive-o de TGraphicControl.
Caso o seu componente não faça nada visualmente, mas funcione internamente no programa, você deve derivá-lo de TComponent. Todos os componentes derivados desta classe base são visíveis apenas em design time.
Criando nosso primeiro componente
O primeiro componente que iremos criar se chamará TChronometer (cronômetro, em inglês). Ele irá fazer – como o próprio nome diz – a função de um cronômetro. Ao longo do artigo, iremos aperfeiçoá-lo com as técnicas que iremos aprender.
Nota: Eu particularmente nomeio meus componentes utilizando nomes em inglês, assim como seus métodos, propriedades e eventos. Procedo assim porque o componente irá interagir com a IDE do Delphi, que está em inglês, e acho deselegante ver as propriedades misturando os dois idiomas. Mas nada impede, porém, que você desenvolva no idioma que desejar.
Como o Delphi aberto, vá ao menu Components e selecione New component. Será exibida uma caixa de diálogo onde você deve informar, nesta ordem:
· A classe que o seu componente derivará;
· O nome da classe do novo componente;
· A paleta na guia de componentes do Delphi onde ele será exibido;
· Nome do arquivo da unit do componente.
Preencha o campo Ancestor Type com TComponent e em Class Name digite TChronometer. Em seguida clique em Install, para criar um pacote para nosso componente. Na próxima janela que aparecer, clique na segunda aba (Into new package), escolha um nome para o pacote, a pasta onde ele será salvo, informe uma descrição para ele e em seguida clique em OK. O Delphi automaticamente irá gerar o pacote e o código para o nosso novo componente, inclusive instalando-o na IDE. A partir daí, basta recompilar o pacote para que as alterações efetuadas sobre o componente sejam efetivadas.
Abra o pacote e dê uma olhada na unit criada para o componente e repare as seções Private, Protected, Public e Published:
type
TChronometer = class(TComponent)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
end;
Estas quatro palavras-chave definem o nível de acessibilidade que os métodos, propriedades e eventos terão em nosso componente. Veja a tabela abaixo:
|
Private |
Métodos, propriedades e eventos declarados nesta seção serão somente acessíveis para outros componentes declarados dentro da mesma unit. |
...