Mostrarei neste artigo como se fazer um componente descendente do TEdit, que completará o número digitado com zeros à esquerda. Para começarmos, abra o Delphi e clique no menu File, New, Other. Escolha a opção Component. A tela abaixo será exibida...

Figura 1 - Criando o componente
Explicando a janela:
Ancestor Type: qual classe ancestral do novo componentede,
no nosso caso, "TEdit [ StdCtrls ]".
Class Name: O nome da nossa nova classe, do novo componente.
Pallete Page: Em qual paleta nosso componente irá ficar.
Unit file name: Nome da pasta onde a unit será salva.
Em Seguida Clique em Ok.
Uma Unit “limpinha” será mostrada pra você e é nela
que iremos desenvolver nosso componente. Neste, teremos apenas 2
propriedades diferentes do Edit, que são:
- Tamanho: Propriedade do tipo Byte, responsável pela
quantidade de zeros à esquerda.
- SoNumeros: Propriedade do tipo Boolean, responsável
por verificar se
somente numeros serão digitados.
Após esta breve definição vamos aos códigos.
Na seção private digite:
FTamanho : Byte;
FSoNumeros : Boolean;
Estas são nossas duas propriedades. Precisamos agora que apareçam
no Object Inspector. Para isso, digite na
seção published:
property Tamanho : byte read FTamanho write SetFTamanho;
property SoNumeros : Boolean read FSoNumeros write SetSoNumeros
Além delas, na seção protected digite:
procedure KeyPress(var Key: Char); override;
procedure DOExit ; override;
Estas são duas procedures do TEdit que implementaremos. Usamos
o override para sobrescrevê-las.
Precisaremos de uma rotina para dar valores iniciais ao nosso componente.
Para isso, na seção public digite:
constructor Create(AOwner : TComponent); override;
Precisaremos de mais algumas procedures auxiliares. Então, na seção
private, abaixo das
nossas duas propriedades, digite:
function LeftZero(cString: String; nPosicoes: Word): String;
function RTrim(cString: String): String;
function LTrim(cString: String): String;
Pressione "Ctrl + Shift + C" e pronto! Nosso código já foi
gerado.
Implemente as rotinas conforme o código abaixo:
constructor TEdtLeftZero.Create(AOwner: TComponent);
begin
inherited;
SoNumeros := True;
end;
procedure TEdtLeftZero.DOExit;
begin
if FTamanho > 0 Then
Text := LeftZero( Text , FTamanho);
inherited;
end;
procedure TEdtLeftZero.KeyPress(var Key: Char);
begin
if FSoNumeros Then
if not (Key in ['0'..'9' , #13 , #8]) Then
Key := #0;
inherited;
end;
function TEdtLeftZero.LeftZero(cString: String; nPosicoes: Word): String;
Const
cDigitosValidos: PChar = ' 0123456789/';
Var
lDigitoNumerico: Boolean;
nString: Integer;
begin
cString := RTrim(LTrim(cString));
lDigitoNumerico := True;
nString := Length( cString );
while nString > 0 do
begin
if StrScan(cDigitosValidos, cString[nString]) = nil then
begin
lDigitoNumerico := False;
nString := 0
end
else
Dec(nString);
end;
if lDigitoNumerico = True then
begin
while Length( cString ) < nPosicoes do
begin
cString := '0'+ cString;
end;
end;
LeftZero := cString;
end;
function TEdtLeftZero.LTrim(cString: String): String;
var
Count, i: Byte;
begin
Count := Length(cString);
if Count > 0 then
begin
for i := 1 to Count do
begin
if cString[i] <> ' ' then Break;
end;
cString := Copy(cString,i,Count-i+1);
end;
LTrim := cString;
end;
function TEdtLeftZero.RTrim(cString: String): String;
var
Count, i: Byte;
begin
Count := Length(cString);
if Count > 0 then
begin
for i := Count downto 1 do
begin
if cString[i] <> ' ' then Break;
end;
cString := Copy(cString,1,i);
end;
RTrim := cString;
end;
procedure TEdtLeftZero.SetFTamanho(const Value: byte);
begin
FTamanho := Value;
end;
procedure TEdtLeftZero.SetSoNumeros(const Value: Boolean);
begin
FSoNumeros := Value;
end;
Agora seu componente está pronto! Basta compilar o package,
instalar e utilizar a vontade!
Por este componente ser realmente muito simples, dispenso qualquer outro
tipo de explicação e comentário, mas quem estiver com
alguma duvida é
só entrar em contato
que responderei com o maior prazer.
Daria para irmos mais além com o componente, mas isso vai
da criatividade de cada um.
Um componente que eu indico tanto para uso e para aprendizado é o componente
MaskEditMCT. Nao sei quem o desenvolveu,
mas é um excelente componente.
Espero que tenham gostado, e até a próxima.
Fernando Tremonti
fernando_tremonti@yahoo.com.br
www.guardiansofhell.cjb.net
|