Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Elisei

[Resolvido] Contando caracteres de um Edit

Recommended Posts

Bom dia.

Por favor, me ajudem.

Tenho um edit em um formulário que preciso contar seus caracteres.

 

Desta forma, criei a seguinte funcao:

 

function QtdCaracteres(Edit:String): integer;
begin
   Result := Length(Edit);
end;

Eu preciso que no Evento OnExit do Edit, seja chamada a função de modo que se a quantidade de caracteres for menor do que 10 (por exemplo), o sistema me retorne:

 

Showmessage('Insuficiente');
Edit1.SetFocus;

O problema é que não estou conseguindo um meio de cahamar esta função e testar o seu retorno.

Alguém poderia me ajudar?

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não seria apenas fazer isto?

 

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  if QtdCaracteres(Edit1.Text) < 10 then
  begin
	 Showmessage('Insuficiente');
	 Edit1.SetFocus;
  end;
end;

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função para contar os caracteres no campo eu consegui fazer.... do jeito que postou também funciona...

 

Na verdade eu tenho um campo com máscara e preciso validar se o usuário digitou corretamente.

Por exemplo, minha máscara estava com zeros (000.000.000-00) por exemplo e isso obriga a digitação no campo.

Alterei então, a máscara para (999.999.999-99) o que não obriga a digitar por completo, eliminando assim os erros nativos do delphi.

 

Como preciso conferir se o usuário digitou o campo corretamente, no evento OnExit do meu Edit, estou chamando uma função para retirar as máscaras do edit, desta forma posso saber, pela quantidade de caracteres digitados se a formatação está ok.

 

Segue comandos do evento OnExit.

 

procedure TForm1.MaskEdit1Exit(Sender: TObject);
var
tex, tex2 : string;
begin
   tex  := EliminarFormatacao(MaskEdit1.Text);
   tex2 := Alltrim(tex);
   Label1.Caption := Trim(tex2);
end;

Reparem que este bloco de comandos, chama a funcção EliminarFormatacao()

 

function EliminarFormatacao(sTexto:String):String;
var
   iPos : Integer;
   iTamanho : Integer;
   sTextoSemFormato : String;
   sCaractere : String;
   sCaracMascaras : String;
begin
   Result := sTexto;
   if sTexto = '' then begin
	  Exit;
   end;
   sTextoSemFormato := '';
   sCaracMascaras := './><_+=[]{}()-$&@*';
   iTamanho := Length(sTexto);
   for iPos := 1 to iTamanho do begin
	   sCaractere := Copy(sTexto,iPos,1);
	   if Pos(sCaractere,sCaracMascaras) = 0 then begin
		  sTextoSemFormato := sTextoSemFormato + sCaractere;
   end;
end;
Result := sTextoSemFormato;
end;

Ao me retornar, percebo que os caracteres estão sem a máscara como deveria ser, porém com espaços em branco.

Assim, acrescentei o comando: Trim(tex2) na procedure do OnExit acima citado mas o comando não retira os espaços em brancos do valor digitado.

 

Imaginei que o valor possuísse algum caracter desconhecido ou "invisível" e então declarei mais uma função Alltrim() para retirá-los:

 

function Alltrim(const Search: string): string; const BlackSpace = [#33..#126];
var
   Index: byte;
begin
   Index:=1;
   while(Index <= Length(Search)) and not (Search[Index] in BlackSpace) do
		 begin
			Index:=Index + 1;
		 end;
   Result:=Copy(Search, Index, 255);
   Index := Length(Result);
   while(Index > 0) and not (Result[Index] in BlackSpace) do
		 begin
			Index:=Index - 1;
		 end;
   Result := Copy(Result, 1, Index);
end;

O problema é que mesmo assim o valor retornado não está sendo tratado pelo trim. O que poderia estara contecendo?

 

Caso queira, abaixo está todo o fonte de meu código:

 

Utilizo:

1 Fom

1 MaskEdit com a máscara: !\(99\) 9999-9999;1;_

1 Label para receber o resultado

 

implementation

{$R *.dfm}

function EliminarFormatacao(sTexto:String):String;
var
   iPos : Integer;
   iTamanho : Integer;
   sTextoSemFormato : String;
   sCaractere : String;
   sCaracMascaras : String;
begin
   Result := sTexto;
   if sTexto = '' then begin
	  Exit;
   end;
   sTextoSemFormato := '';
   sCaracMascaras := './><_+=[]{}()-$&@*';
   iTamanho := Length(sTexto);
   for iPos := 1 to iTamanho do begin
	   sCaractere := Copy(sTexto,iPos,1);
	   if Pos(sCaractere,sCaracMascaras) = 0 then begin
		  sTextoSemFormato := sTextoSemFormato + sCaractere;
   end;
end;
Result := sTextoSemFormato;
end;

function Alltrim(const Search: string): string; const BlackSpace = [#33..#126];
var
   Index: byte;
begin
   Index:=1;
   while(Index <= Length(Search)) and not (Search[Index] in BlackSpace) do
		 begin
			Index:=Index + 1;
		 end;
   Result:=Copy(Search, Index, 255);
   Index := Length(Result);
   while(Index > 0) and not (Result[Index] in BlackSpace) do
		 begin
			Index:=Index - 1;
		 end;
   Result := Copy(Result, 1, Index);
end;

procedure TForm1.MaskEdit1Exit(Sender: TObject);
var
tex, tex2 : string;
begin
   tex  := EliminarFormatacao(MaskEdit1.Text);
   tex2 := Alltrim(tex);
   Label1.Caption := tex2;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que seu problema no momento esteja na função que elimina a formatação do maskedit... não testei aqui, mas acho que essa alteração pode lhe ajudar a sanar o problema.

 

function EliminarFormatacao(sTexto:String):String;
var
   iPos : Integer;
   iTamanho : Integer;
   sTextoSemFormato : String;
   sCaractere : String;
   sCaracMascaras : String;
begin
   Result := sTexto;
   if Trim(sTexto) = '' then begin
	  Exit;
   end;
   sTextoSemFormato := '';
   sCaracMascaras   := './><_+=[]{}()-$&@*';
   iTamanho := Length(sTexto);
   for iPos := 1 to iTamanho do begin
	   sCaractere := Trim(Copy(sTexto,iPos,1));
	   if (Pos(sCaractere,sCaracMascaras) = 0) AND (sCaractere <> '') then
	   begin
		  sTextoSemFormato := sTextoSemFormato + sCaractere;
	   end;
   end;
   Result := sTextoSemFormato;
end;

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.