Avatar billede darkside Nybegynder
04. februar 2003 - 17:55 Der er 14 kommentarer og
1 løsning

Tælle tegn i memo

Tja som overskrift siger, hvordan tæller man tegn i en memo1

Vil gerne ha sådan at man kan se hvor mange tegn man eks har tilbage ud af 5000 når man skriver ;)
Avatar billede kfz Nybegynder
04. februar 2003 - 18:07 #1
procedure TForm1.Memo1Change(Sender: TObject);
var
i,j,antaltegn,tegntilbage: integer;
tmpstr: string;
begin
antaltegn := 0;
for i := 0 to memo1.lines.count do
if memo1.Lines[i] <> '' then
begin
  tmpstr := memo1.lines[i];
  for j := 1 to length(tmpstr) do
  inc(antaltegn);
end;
  tegntilbage := 5000 - antaltegn;
  form1.Caption := inttostr(tegntilbage);
end;
Avatar billede darkside Nybegynder
04. februar 2003 - 18:14 #2
Mange tak ;)
Avatar billede kfz Nybegynder
04. februar 2003 - 18:16 #3
takker for points
Avatar billede morten_s Nybegynder
04. februar 2003 - 18:48 #4
Det kan vist gøres bedre (kortere)

Først en fonction til det grove arbejde, kan bruges på samtlige dine Memo i dit program

function AntalTegnTilbage(MitMemo: TMemo; MaxAntalTegn: Integer):Integer;
var
  i: Integer;
begin
  Result:= 0;
  for i:= 0 to MitMemo.Lines.Count do
    Result:= Result+ Length(MitMemo.Lines[i]);
  Result:= MaxAntalTegn-Result;
end;

Og så et kald af function

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(AntalTegnTilbage(Memo1, 5000)));
end;
Avatar billede athlon-pascal Juniormester
04. februar 2003 - 19:35 #5
Hvad med følgende:


procedure TForm1.Memo1Change(Sender: TObject);
begin
Caption := IntToStr(5000 - Length(Memo1.Text)); //Antal tegn der er tilbage kan ses i formens caption; 5000 = maks antal tegn;
end;
Avatar billede athlon-pascal Juniormester
04. februar 2003 - 19:43 #6
KIS (Keep It Simple) :-)
Avatar billede stoney Nybegynder
04. februar 2003 - 19:59 #7
> athlon-pascal
Hvert linie-skift er 2 karakter. :-)

Stoney
Avatar billede athlon-pascal Juniormester
04. februar 2003 - 20:24 #8
stoney -> Fylder de måske ikke?
Avatar billede morten_s Nybegynder
04. februar 2003 - 20:26 #9
procedure TForm1.Memo1Change(Sender: TObject);
begin
  Caption := IntToStr(5000 - Length(Memo1.Text))-2*Memo1.Lines.Count;
end;
Avatar billede athlon-pascal Juniormester
04. februar 2003 - 20:29 #10
morten_s ->
procedure TForm1.Memo1Change(Sender: TObject);
begin
  Caption := IntToStr(5000 - Length(Memo1.Text)-2*Memo1.Lines.Count);
end;

Parantes-problemer :)
Avatar billede athlon-pascal Juniormester
04. februar 2003 - 20:42 #11
Vent lige lidt ...

Virker stadigvæk ikke helt, ved det:

function AntalTegnTilbage(Memo: TMemo; MaxAntalTegn: Integer; IgnorerLinjeskift: Boolean = true):Integer;
begin
  Result := 5000 - Length(Memo.Text);
  if IgnorerLinjeskift then
    Result := Result - (2 * Memo.Lines.Count);
end;
Avatar billede athlon-pascal Juniormester
04. februar 2003 - 20:53 #12
Virker heller ikke helt:

function AntalTegnTilbage(Memo: TMemo; MaxAntalTegn: Integer; IgnorerLinjeskift: Boolean = true): Integer;
begin
  if IgnorerLinjeskift then
    Result := 5000 - Length(Memo1.Lines.CommaText) + Memo1.Lines.Count
  else
    Result := 5000 - Length(Memo.Text);
end;
Avatar billede borrisholt Novice
05. februar 2003 - 08:22 #13
stoney >> Linjeskift i windows er kun ET tegn #13 !!

Det er kun i linus man bruger #10#13

Jens B
Avatar billede stoney Nybegynder
05. februar 2003 - 09:58 #14
Jens>

Det er jeg ikke ening i.
Prøv at taste nogle karakter på linie 1 og 2 få delphi til at tælle antal
karakter.

Stoney
Avatar billede athlon-pascal Juniormester
05. februar 2003 - 16:02 #15
Jens Borrisholt -> Prøv at oprette en form med to memoer (Memo1 og Memo2) og sæt Memo2.Readonly til true.
Brug følgende kode:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Clear;
  Memo2.Clear;
end;

procedure TForm1.Memo1Change(Sender: TObject);
var
  I: Integer;
begin
  Memo2.Clear;
  for I := 1 to Length(Memo1.Text) do
    Memo2.Text := Memo2.Text + '#' + IntToStr(Ord(Memo1.Text[I])) + ', ';
end;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester