Componente Windows Forms
Criando um componente .NET com BDS 2006 para aplicações Windows Forms
Neste artigo veremos como criar um componente .NET utilizando o BDS 2006. A idéia é criarmos um componente derivado do TextBox (paleta Windows Forms) utilizando a linguagem C#. Criar um componente derivado de um existente é bastante útil quando você realiza repetidamente alterações em diversas propriedades e eventos. Estas alterações podem ser definidas diretamente no novo componente.
Criando o componente
Para o exemplo deste artigo vamos criar um componente descendente do TextBox que terá sua propriedade BorderStyle definida como FixedSingle por padrão ao invés de Fixed3D e possuirá um código em seu evento Enter para alterar a propriedade BackColor ao receber foco e um código no evento Leave para retornar o valor original à propriedade BackColor. Abra o BDS 2006 e a partir do menu principal selecione File|New|Other... para abrir a janela New Items. Selecione a categoria C# Projects e crie uma nova Class Library. Na janela New Application entre com um nome e uma localização para o projeto. Para este exemplo utilizei o nome ClubeDelphi. Selecione a janela Project Manager e altere o nome do arquivo Class.cs para ClubeDelphi.cs a partir da opção Rename disponível no menu de contexto.
Caso o arquivo ClubeDelphi.cs não esteja aberto no editor de código, realize um duplo clique em cima do mesmo. Altere o nome do namespace para ClubeDelphi.Componentes. Antes de iniciarmos o desenvolvimento do componente nós devemos adicionar as referencias aos Assemblies que serão utilizados por nossa biblioteca. Ainda na janela Project Manager selecione a pasta References e clique na opção Add reference... através do menu de contexto. Dentro da janela Add Reference entre na aba .NET Assemblies. Selecione na lista o assembly System.Drawing e clique no botão Add reference para adicioná-lo ao projeto. Faça o mesmo para o assembly System.Windows.Forms (Figura 1).
Figura 1. Adicionando a referencia aos Assemblies necessários para a criação do componente .NET
Clique no botão OK para fechar a janela Add reference. Os dois Assemblies adicionados passam a ser listados dentro da pasta References da janela Project Manager. Voltando ao arquivo ClubeDelphi.cs adicione o seguinte código no início do arquivo:
using System.Drawing;
using System.Windows.Forms;
Após adicionar a referencia aos Assemblies dentro do projeto nós precisamos fazer referencia aos mesmos também dentro do arquivo que irá utilizar suas classes. Altere o nome da classe de Class para CDTextBox. Altere também o nome no construtor da classe. Como o componente será herdado do TextBox nós devemos especificar isto na assinatura da classe. Em C# a característica de herança é apontada através de dois-pontos (:). Veja o código completo da classe até este ponto:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace ClubeDelphi.Componentes
{
public class CDTextBox: TextBox
{
//Construtor
public CDTextBox()
{
}
}
}
Dentro do construtor da classe entre com o seguinte código:
BorderStyle = BorderStyle.FixedSingle;
Através deste código alteramos o valor padrão da propriedade BorderStyle para FixedSingle ao invés de Fixed3D. Como próximo passo vamos criar uma variável para que possamos armazenar o valor original da propriedade BackColor do componente. Antes do construtor da classe entre com o seguinte código para declarar a variável:
private Color oldBackColor;
No código acima declaramos uma variável de nome oldBackColor do tipo Color. Definimos o escopo de visibilidade da mesma como private, isto é, seu valor estará disponível apenas para os métodos presentes nesta classe. Como comentado no início deste artigo à idéia é alterarmos também o comportamento dos eventos Enter e Leave fazendo com que a cor de fundo do componente seja alterada ao receber foco e tenha sua cor original restaurada ao perder o foco. Para que possamos adicionar está funcionalidade ao nosso componente vamos incluir o seguinte código a nossa classe logo abaixo do construtor:
protected override void OnEnter(System.EventArgs e)
{
oldBackColor = BackColor;
BackColor = Color.Yellow;
}
protected override void OnLeave(System.EventArgs e)
{
BackColor = oldBackColor;
}
No código acima nós criamos dois métodos: OnEnter e OnLeave. Na verdade estes métodos estão presente na classe base, neste caso TextBox. O que fizemos foi herdar esses métodos e customizar o seu comportamento. Repare que na linguagem C# a palavra override é utilizada dentro da assinatura do método logo após a especificação do escopo de visibilidade do mesmo.
No método OnEnter nós armazenamos o valor original da propriedade BackColor em nossa variável oldBackColor e alteramos a propriedade BackColor para receber a cor amarela. Este código será executado quando nosso componente receber o foco. No método OnLeave nós devolvemos o valor original da propriedade BackColor através de nossa variável oldBackColor. Este código será executado quando nosso componente perder o foco. Veja na listagem abaixo o código completo do arquivo ClubeDelphi.cs:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace ClubeDelphi.Componentes
{
public class CDTextBox : TextBox
{
private Color oldBackColor;
public CDTextBox()
{
BorderStyle = BorderStyle.FixedSingle;
}
protected override void OnEnter(System.EventArgs e)
{
oldBackColor = BackColor;
BackColor = Color.Yellow;
}
protected override void OnLeave(System.EventArgs e)
{
BackColor = oldBackColor;
}
}
}
Terminada a implementação do componente clique na opção Project|Build disponível no menu principal para compilar e gerar o assembly (arquivo .dll) o qual conterá nosso componente.
Instalando o componente
O próximo passo é instalarmos o componente dentro da Tool Palette do BDS 2006 para que possamos utilizá-lo em nossas aplicações Windows Forms. Através do menu principal selecione a opção Component|Installed .NET Components... para abrir a janela Installed .NET Components. Dentro da aba .NET Components altere o campo Category para ClubeDelphi e clique no botão Select na Assembly... para que possamos selecionar o assembly que contem nosso componente CDTextBox. Ao abrir a janela “Browse to an assembly or executable...” selecione o arquivo ClubeDelphi.dll criado dentro do subdiretório bin/Debug do diretório de nosso projeto e clique no botão Abrir para adicioná-lo a IDE. Veja na Figura 2 o componente adicionado na janela Installed .NET Components.
Figura 2. Componente CDTextBox adicionado a IDE do BDS 2006
Testando o componente
Para que possamos testar as funcionalidades do nosso componente vamos criar uma aplicação Windows Forms. Está aplicação pode ser tanto em Delphi for .NET quando em C# Builder. Apesar do nosso componente ter sido escrito em C# nós podemos utilizá-lo normalmente em uma aplicação Windows Forms Delphi for .NET.
Inicie uma nova aplicação Windows Forms no BDS 2006 através da opção de menu File|New|Windows Forms Application – Delphi for .NET. Selecione o componente CDTextBox através da paleta de componentes (Figura 3).
Figura 3. Componente CDTextBox disponível na paleta ClubeDelphi da janela Tool Palette.
Adicione três componentes CDTextBox ao WinForm e altere a propriedade BackColor de dois deles para uma cor qualquer a sua escolha. Compile e rode a aplicação. Veja a mesma em execução na Figura 4.
Figura 4. Aplicações Windows Forms de exemplo utilizando o componente CDTextBox
Conclusão
Neste artigo vimos que a criação de componentes .NET são tão simples quanto componentes Win32 – VCL. Apesar deste artigo ter utilizado a linguagem C# na criação do componente, você pode criar o mesmo utilizando Object Pascal (ou Delphi Language).
Um abraço e até a próxima.