Criando componente para validação de CPF
Antes de tudo, precisamos entender que componentes são objetos que possuem propriedades e eventos. Um dos principais benefícios de criarmos componentes é a reutilização de código, ou seja, uma determinada rotina pode ser usada em muitos sistemas desenvolvidos.
Vamos usar como exemplo, os botões que utilizamos. Eles são aplicados praticamente em todos os sistemas e não precisamos nos preocuparmos em criá-los (do ponto de vista da existência em si, pois são objetos já prontos).
No exemplo a seguir, iremos criar um componente que será usado na validação de CPFs.
Siga os seguintes passos:
1º) No menu Component, escolha a opção New Component.
2º) Será exibida a seguinte caixa de diálogo:
Ancestor type: Sempre que um componente é construído, a criação é baseada em um componente ancestral, ou seja, ele deverá herdar características de um componente existente. Para esse exemplo, selecione TComponent. Essa classe possui as propriedades e métodos necessários a quaisquer componentes.
Class Name: O nome da nova classe (Class Name) será TCPF, geralmente é padronizado o primeiro caractere com a letra “T”.
Em
Pallete Page podemos escolher em qual paleta de componentes nosso novo componente está disponível.
Em
Unit file name pode ser definido o local onde será criada a Unit do componente.
Pressione o Botão OK.
Será exibido o código fonte de seu componente. Note que automaticamente foi criada uma rotina chamada Register, essa rotina é padrão em todos os componentes. Ela permite que esse novo componente (TCPF) seja registrado na paleta especificada (Samples).
Vamos criar uma nova propriedade para esse componente. Essa nova propriedade será do tipo Boolean (Verdadeiro / Falso) e o nome dela será Verdadeiro. Ela vai ler os dados do atributo FVerdadeiro e também vai gravar os dados no atributo FVerdadeiro. Após terminar a sua declaração pressione a combinação de teclas CTRL + SHIFT + C, então o atributo FVerdadeiro será criado.
type
TCPF = class(TComponent)
private
FVerdadeiro: boolean;
protected
public
published
property Verdadeiro: boolean read FVerdadeiro write FVerdadeiro;
end;
Em seguida crie outra propriedade com o nome de CPF, ela será do tipo String. Essa propriedade irá ler a valor do atributo FCPF e ao escrever o método Verificar será executado.
published
property Verdadeiro: boolean read FVerdadeiro write FVerdadeiro;
property CPF: string read FCPF write Verificar;
end;
Após declarar essa propriedade pressione a combinação de teclas CTRL + SHIFT + C para ir até a implementação do método.
Faça a seguinte implementação para o método Verificar:
procedure TCPF.Verificar(const Value: string);
var
n, s1, s2, dv1, dv2: Integer;
NumTemp, caracter: string;
begin
FCPF:= Value;
NumTemp := '';
FVerdadeiro := false;
//Verifica se quantidade de caracteres correspondem
//aos digitos de um CPF
for n := 1 to 12 do
begin
caracter := copy(Value, n, 1);
If (caracter >= '0') and (caracter <= '9') then
NumTemp := NumTemp + caracter;
if caracter = '-' then
NumTemp := NumTemp + caracter
end;
if Length(NumTemp) <> 12 then
exit;
//Calcula somatória 1
S1 := 0;
for n := 1 to 9 do
s1 := s1 + (StrToInt(Value[n]) * n);
dv1 := (s1 mod 11) mod 10;
//Calcula somatória 2
s2 := 0;
for n := 2 to 9 do
s2 := s2 + (StrToInt(Value[n]) * (n-1));
s2 := s2 + (dv1 * 9);
dv2 := (s2 mod 11) mod 10;
if (dv1 = StrToInt(Value[11])) and (dv2 = StrToInt(Value[12])) then
FVerdadeiro := True
else
FVerdadeiro := False;
end;
Agora iremos implementar um evento para o componente.
Acrescente a seguinte instrução ao código do seu componente:
published
property Verdadeiro: boolean read FVerdadeiro write FVerdadeiro;
property CPF: string read FCPF write Verificar;
property OnFalso: TNotifyEvent read FOnFalso write FOnFalso;
end;
Após a declaração pressiona
CTRL + SHIFT + C.
Como ultimo passo na definição do nosso evento, precisamos determinar em que ponto do programa esse evento será executado.
Em nosso exemplo, ele será executado quando a propriedade FVerdadeiro torna-se falsa. Quando isso ocorrer o componente deverá verificar quais são as instruções presentes no evento OnFalso e executá-las.
Faça a alteração a seguir no código fonte.
//Compara digitos verificadores
if (dv1 = StrToInt(Value[11])) and (dv2 = StrToInt(Value[12])) then
FVerdadeiro := True
else
begin
FVerdadeiro := False;
if Assigned(FOnFalso) then
FOnFalso(Self);
end;
Salve a Unit e feche-a.
Instalando o componente
Para instalar o componente vá até o menu Componente / Install Component.
Em Unit File name selecione a unit do componente criado anteriormente. E clique em Ok.
Será exibida a seguinte janela.
Clique sobre o botão Compile e pronto seu componente está instalado. Obs. Caso o código contenha erros, o erro será exibido em código fonte nesse momento.
Testando o componente
Coloque em um formulário um TEdit, um TButton e o componente TCPF (Samples). No onclick do botão, coloque:
procedure TForm1.Button1Click(Sender: TObject);
begin
CPF1.CPF := Edit1.Text;
end;
No evento
OnFalso do componente
CPF1 coloque:
procedure TForm1.CPF1Falso(Sender: TObject);
begin
ShowMessage('CPF inválido!');
end;
Para testar o componente, compile o programa e digite um CPF no formato XXXXXXXXX-XX.