Contador de caracteres

Delphi

02/12/2003

COMO POSSO FAZER UM CONTADOR DE CARACTERES DE UM DBEDIT OU DBEMEMO?

Título editado pelo Moderador - AZ


Crcam

Crcam

Curtidas 0

Respostas

Fabiosilva

Fabiosilva

02/12/2003

Coloque um label (LblDigitos), ira receber o numero de caracteres em tempo de execção
Insira o codigo no evento onchange

var
I: Integer;
Ch: Char;
Cnttotal: Integer;

begin
Cnttotal := 0;
for I := 1 to Length(Memo1.Text) do
begin
Ch := Memo1.Text[I];
if Ch in ChrMaiusculas then
Inc(Cnttotal);
else
if Ch in ChrMinusculas then
Inc(Cnttotal);
else
if Ch in ChrNumeros then
Inc(Cnttotal);
else
if Ch in ChrBrancos then
Inc(Cnttotal);
else
if Ch in ChrEspeciais then
Inc(Cnttotal);
else
Inc(Cnttotal);

LblDigitos.Caption := IntToStr(Cnttotal);


GOSTEI 0
Fabiosilva

Fabiosilva

02/12/2003

Coloque um label (LblDigitos), ira receber o numero de caracteres em tempo de execção
Insira o codigo no evento onchange

var
I: Integer;
Ch: Char;
Cnttotal: Integer;

begin
Cnttotal := 0;
for I := 1 to Length(Memo1.Text) do
begin
Ch := Memo1.Text[I];
if Ch in ChrMaiusculas then
Inc(Cnttotal);
else
if Ch in ChrMinusculas then
Inc(Cnttotal);
else
if Ch in ChrNumeros then
Inc(Cnttotal);
else
if Ch in ChrBrancos then
Inc(Cnttotal);
else
if Ch in ChrEspeciais then
Inc(Cnttotal);
else
Inc(Cnttotal);

LblDigitos.Caption := IntToStr(Cnttotal);


GOSTEI 0
Deus

Deus

02/12/2003

Que foi isso? Primeiro, você não definiu os conjuntos em lugar nenhum - que sets são esses?! [i:53dc7f32ec]ChrMaiusculas[/i:53dc7f32ec], [i:53dc7f32ec]ChrMinusculas[/i:53dc7f32ec], etc. E outra - essa é mais de estilo. Ao invés de tantos [i:53dc7f32ec]if / else[/i:53dc7f32ec], não seria melhor usar um [i:53dc7f32ec]if[/i:53dc7f32ec] só e vários [i:53dc7f32ec]or[/i:53dc7f32ec]? Ou seja:

for i := 1 to Length(Memo1.Text) do 
  begin 
    Ch := Memo1.Text[i]; 
    if (Ch in ChrMaiusculas) or (Ch in ChrMinusculas) or (Ch in ChrNumeros) or (Ch in ChrBrancos) or (Ch in ChrEspeciais) then
      Inc(Cnttotal);
  end;

LblDigitos.Caption := IntToStr(Cnttotal);


Sem falar que eu não entendi o porquê de tantos sets. Não seria melhor um set só, assim:

for i := 1 to Length(Memo1.Text) do 
  begin 
    if (Memo1.Text[i] in [´a´..´Z´, ´0´..´9´, ´ ´]) then
      Inc(Cnttotal);
  end;

LblDigitos.Caption := IntToStr(Cnttotal);


Acho que seria melhor. Ele queria para um Memo, ou para um DBEdit? É só mudar o nome do controle, então. Desta forma, você não vai precisar declarar tantas variáveis - só [i:53dc7f32ec]i[/i:53dc7f32ec], que vai servir para a contagem.

Abraços, dEUS.


GOSTEI 0
Demian Soares

Demian Soares

02/12/2003

crie um label qualquer... entao no evento onchange do componente dbedit ou dbmemo coloque o seguinte codigo...

label1.caption := inttostr(length(DBEdit1.Text));

pronto enquanto vc estiver digitando ou apagndo ele ira incrementar ou decrementr...so...


GOSTEI 0
Cebikyn

Cebikyn

02/12/2003

Não é tão simples assim, se colocar apenas Length, será contados os caracteres #10 ( ou $0A ), que indicam mudança de linha. O melhor código para o caso é o código de [b:120ae9a55a]dEUS[/b:120ae9a55a].


GOSTEI 0
Cebikyn

Cebikyn

02/12/2003

Válido para DBMemo:
Não é tão simples assim, se colocar apenas Length, será contados os caracteres #10 ( ou $0A ), que indicam mudança de linha. O melhor código para o caso é o código de [b:8cb40a5dca]dEUS[/b:8cb40a5dca].


No caso do DBEdit é válido o uso de Length.


GOSTEI 0
POSTAR