Código
Nessa nossa 7ª coluna estaremos finalizando o assunto sobre Criação de Componentes, aonde vimos os passos básicos para criamos um componente personalizado. Falaremos então sobre criação de um novo evento para um componente personalizado.
Um evento na verdade é um tipo especial de que aponta para uma função a ser executada sob determinada condição. Um dos tipos mais comuns de evento é o TnotifyEvent, no qual o procedimento associado a ele terá como único parâmetro o Sender, da Classe TObject.
Dando continuidade ao nosso componente das últimas duas semanas vamos criar o evento OnErroAoConverter, que como o próprio nome sugere, quando ocorrer um erro ao tentarmos converter para um valor numérico um valor de texto que contenha caracteres que não sejam números, como letras, por exemplo, que ocorre quando ativamos a propriedade Numérico do Edit para TRUE.
Vamos por a mão na massa então:
» Abra o código fonte do seu componete criado nas últimas duas semanas;
» Acrescente na diretiva PRIVATE o seguinte:
a. Private
i. Fnumerico: boolean;
ii. FonErroAoConverter: TnotifyEvent;
» Na diretiva PUBLISHED acrescente a propriedade do evento:
a. Published
i. Property Numérico: boolean read Fnumerico write Fnumerico defaut True;
ii. Property OnErroAoConverter: TNotifyEvent read FonErroAoConverter write OnErroAoConverter;
» Note que assim como a propriedade Numérico, criada na semana passada, o evento também tem um campo interno associado a ele, o FonErroAoConverter.
» Devemos definir um método de escrita (write) e este deve ter um único parâmetro, do mesmo tipo tipo da propriedae acessada. Podemos definir então um método chamado Atribuir, para a classe do nosso componente:
a. Procedure TnumEdit1.Atribuir(Valor: boolean);
b. Var ValorConvertido: integer;
c. Begin
i. Fnumerico := Valor;
ii. If not Valor then
1. try
a.
ValorConvertido := StrToInt(Text);
Except
OnEConvertErro do
If csDesigner in ComponentState then
Text := ‘0’
Else
If Assigned(FonErroAoConverter) then
FonErroAoConverter(Self)
End;
End;
End;
» Acrescente na diretiva protected o seguinte:
a. Protected
i. Property KeyPress(var Key: char); override;
ii. Property Change; override;
iii. Procedure Atribuir(Valor: boolean);
» Recompile o pacote (packager) que contém seu componete e o iclua em um Formulário para testar, como por exemplo:
a. Procedure Tform1.NumEdit1ErroAoConverter(Sender: Tobject);
b. Begin
i.
NumEdit1.Text := ‘0’;
End;
» Pontro! Assim sendo, sempre que ocorrer um erro de conversão durante a execução do seu aplicativo o valor da propriedade text será igual a ‘0’, conforme foi definido pelo usuário do componente, que poderá decidir o que deve ser feito pelo programa quando houver um erro de conversão.
Espero que tenham aprendido o básico de criação de componentes, na próxima semana espero todos com um novo assunto. Lembrem-se, qualquer coisa entre em contato
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009