Fala ai Radizeiros e Radizeiras, tudo bem com vocês?
Quantas vezes você precisou de algumas funcionalidade e achou um componente na internet e colocou em seu projeto e esse componente foi descontinuado e você acabou ficando na mão?
Você realiza o mesmo procedimento diversas vezes e por que não automatizar isso?
O Delphi nos proporciona uma gama de funcionalidades que nos ajuda a automatizar diversas rotinas de trabalho, e uma delas é a criação de componentes, onde evitamos que nosso sistema fique dependente de terceiros, e temos total domínio das nossas ferramentas.
Aqui nesse post irei lhe ensinar a criar um componente, de forma simples e prática, onde você poderá aplicar no seu dia a dia, criando sua própria paleta de componente no Delphi.
Irei criar um componente simples, para que após a leitura desse post você possa entender os funcionamento dos eventos, e como eles trabalham dentro dos componentes.
Vamos lá?
Para criarmos um componente você deve ir no menu do Delphi e escolher a opção de packages, como mostra a imagem abaixo.
Desta forma criamos nosso novo pacote.
Nesse nosso novo componente iremos adicionar uma Unit.
type TEventos = class(TComponent) private public function TamanhoString(Value : String) : Integer; published end; implementation { TEventos } procedure register; begin RegisterComponents('BlogComponents', [TEventos]); end; function TEventos.TamanhoString(Value: String): Integer; begin Result := Length(Value); end;
Observe no código acima que criamos uma classe que herda de TComponent, todo componente que você for criar ele tem que herdar de TComponent, e foi criado um método TamanhoString.
Fazendo isso já temos uma estrutura para o componente funcionar, se você nunca criou um componente no Delphi, é basicamente isso que vamos usar.
Na cessão da interface foi declaramos um método register, em sua implementação usamos o método RegisterComponents, nele passamos a classe em que nosso componente irá se registrar, e logo em seguida passo um array com os componentes que serão adicionados na paleta de componentes.
Feito isso, já podemos compilar e instalar nosso componente.
Viu agora nosso componente já está na paleta do Delphi.
Você pode reparar que já veio com algumas propriedades padrões que é da classe TComponent, mas não tem nenhum evento.
Então o que iremos colocar dentro desses nossos eventos para ele funcionar?
Vamos voltar em nosso código, e você pode estar se perguntando para que o tal de published adicionado na classe?
Quando você coloca qualquer property dentro desse plubished o Delphi já habilita e coloca isso no Object Inspector do Delphi para trabalharmos com eles.
type TEventos = class(TComponent) private FNome: String; procedure SetNome(const Value: String); public function TamanhoString(Value : String) : Integer; published property Nome : String read FNome write SetNome; end;
Adicionamos uma property Nome e depois de compilar nosso componente, veja agora as propriedade do que acabamos de adicionar no Object Inspector.
Agora podemos em tempo de design atribuir um nome para o nosso componente.
Em nosso código criamos um método que recebe uma String e retorna o tamanho dessa String;
Agora vamos dizer que queremos criar um evento nesse nosso componente, em seguida nos criamos uma property do tipo do evento criado.
type TNotifyEvent = procedure (Sender : TObject) of Object; ... property Status : TNotifyEvent read FStatus write SetStatus; ...
Depois de compilado esse nosso componente observe o nosso evento Status parecendo na aba eventos do Object Inspector.
Vamos criar uma aplicação simples com alguns outros componentes para que possamos ver o funcionamento desse nosso novo componente.
No evento de Status do componente iremos adicionar a string passada na propriedade Nome do componente para o TMemo da nossa aplicação de exemplo.
procedure TForm2.Eventos1Status(Sender: TObject); begin Memo1.Lines.Add(TEventos(Sender).Nome); end;
Vamos na classe do componente e adicionar mais algumas funcionalidades.
... public ... procedure OnStatus; ... procedure TEventos.OnStatus; begin if Assigned(Status) then Status(Self); end; ... function TEventos.TamanhoString(Value: String): Integer; begin Nome := Value; Result := Length(Value); OnStatus; end;
Observe que criamos um método chamado OnStatus e dentro desse método verificamos se foi atribuído algum ponteiro para esse evento e retorna o Status.
No método TamanhoString adicionamos na propriedade nome o valor passado a esse método, e logo em seguida chamamos o método OnStatus.
Na nossa aplicação de exemplo no botão passamos o valor do edit no método TamanhoString do nosso componente e o seu retorno é passado para o Label que adicionamos na aplicação.
procedure TForm2.Button1Click(Sender: TObject); begin Label1.Caption := IntToStr(Eventos1.TamanhoString(Edit1.Text)); end;
Fazendo assim após compilado veja o resultado.
Passamos o nome Thulio e ao clicar no botão olha as ações que ocorreram, foi adicionado a String no memo e o tamanho dessa String foi passada para o label.
Viu como de forma simples criamos um componente?
Esse componente que criamos é um componente simples, mas se você nunca viu ou nunca criou um componente viu agora como é fácil.
Para um componente você viu que devemos ter a procedure register declarada, e na sua implementação chamamos o método RegisterComponents passando a seção que queremos salvar esse componente, e as classe que são nossos componentes.
Com o conhecimento que aplico em um dos meus treinamentos, o de Certificação especialista em programação orientada a objetos, você consegue aplicar técnicas que irão lhe ajudar a não ficar dependentes de componentes de terceiros, e até mesmo criar o seu próprio componente para que automatize suas rotinas, assim como mostrado aqui nesse post.
A Certificação Especialista Orientada a Objetos dará a você a oportunidade de melhorar seu software, otimizar o seu tempo e te dar a possibilidade de atender melhor os seus clientes. Conhecer a fundo esse paradigma e utilizar todos os seus benefícios irá facilitar muito a sua vida quando houver necessidade por parte de um cliente de um update rápido ou resolver um problema.
CLIQUE AQUI PARA SABER MAIS SOBRE A CERTIFICAÇÃO ESPECIALISTA EM PROGRAMAÇÃO ORIENTADA A OBJETOS