Elisei 0 Denunciar post Postado Maio 6, 2009 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
Chrnos 30 Denunciar post Postado Maio 6, 2009 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
Elisei 0 Denunciar post Postado Maio 6, 2009 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
Chrnos 30 Denunciar post Postado Maio 6, 2009 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
Elisei 0 Denunciar post Postado Maio 6, 2009 Amigo, você é o cara!!! Valeu!!! resolvido!!!!! Compartilhar este post Link para o post Compartilhar em outros sites