Avatar billede azzodiac Nybegynder
03. maj 2001 - 18:40 Der er 4 kommentarer og
1 løsning

Tæl ord i RichEdit

Hej.
Jeg bikser med et richedit-komponent,
og jeg vil gerne lave en funktion
som tæller antallet af ord som brugeren
har skrevet i richedit\'en.
Håber nogen kan hjælpe..
P.S. 400 point for præcist svar.

Avatar billede bratkid Nybegynder
03. maj 2001 - 18:48 #1
hehe næsten

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Spin, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    SpinEdit1: TSpinEdit;
    procedure RichEdit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.RichEdit1Change(Sender: TObject);
begin
spinedit1.value:=(spinedit1.value+1);
end;

end.
Avatar billede bratkid Nybegynder
03. maj 2001 - 18:54 #2
put lige en richedit1 og en spinedit1 på din form og kopier sourcen..og prøv...det kan  være du får en idée
Avatar billede nico26 Nybegynder
04. maj 2001 - 03:43 #3
prøv det her - giver det samme antal ord som Word

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    RichEdit1: TRichEdit;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    function WordCount(Text: string): Integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function TForm1.WordCount(Text: string): Integer;
const
  Tokens: array[0..3] of Char = (#9, #10, #13, #32); //tab, lf, cr, space

  procedure StripTokens(var Str: string);
  var
    i: Integer;
    T: Boolean;
  begin
    repeat
      T := False;
      for i := Low(Tokens) to High(Tokens) do
        if Str[1] = Tokens[i] then
        begin
          Delete(Str, 1, 1);
          T := True;
          Break;
        end;
    until not T or (Length(Str) = 0);
  end;

  function FindNextToken(const Str: string): Integer;
  var
    i, p: Integer;
  begin
    Result := Length(Str);

    for i := Low(Tokens) to High(Tokens) do
    begin
      p := Pos(Tokens[i], Str);
      if (p <> 0) and (p < Result) then
        Result := p;
    end;
  end;

var
  Count, P: Integer;
begin
  Count := 0;

  if Length(Text) > 0 then
    repeat
      StripTokens(Text);
      P := FindNextToken(Text);
      Delete(Text, 1, P);
      if p <> 0 then Inc(Count);
    until (P = 0) or (Length(Text) = 0);

  Result := Count;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := IntToStr(WordCount(RichEdit1.Text));
end;

end.
Avatar billede borrisholt Novice
04. maj 2001 - 07:07 #4
nico22>> Den burde vist optimeres ..... :-)

Jens B
http://fotx.net/borrisholt
Avatar billede nico26 Nybegynder
05. maj 2001 - 01:34 #5
yep :)
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