Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 06 de Outubro de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
122 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Criando um componente - Inserindo zeros à esquerda
Publicado por ActiveDelphi : Sexta, Julho 14, 2006 - 08:37 GMT-3 (5960 leituras)
Comentários comentar   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Fernando Tremonti 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



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados