richedit lines word count

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

richedit lines word count

Mesaj gönderen sr1111 »

Şunu yapamadim yardimci olurmusunuz.
richedit de imlec ile satir, harfler icinde gezdigimde kacinci kelimede oldugunu vermesi labele yazmasini istiyorum.
ama sadece bulundugu satirin.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: richedit lines word count

Mesaj gönderen SimaWB »

RichEdit'te imlecin bulunduğu satır

Kod: Tümünü seç

RichEdit1.Lines[RichEdit1.ActiveLineNo]
ile seçilebilir. TStringList'in Delimiter ve DelimitedText özelliklerinden yararlanarak:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  SL: TStringList;
begin
  SL := TStringList.Create;
  try
    SL.Delimiter := ' ';
    SL.DelimitedText := RichEdit1.Lines[RichEdit1.ActiveLineNo];
    Caption:= Inttostr(Sl.Count);
  finally
    SL.Free;
  end;
end;
There's no place like 127.0.0.1
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

Re: richedit lines word count

Mesaj gönderen sr1111 »

tesekkurler fakat simawb bu procedure bulundugu satirin toplam kelime sayisini veriyor.
(imleç nerde ise o kelime kacinci), imlec nereye giderse gittigi kelime kacinci kelime onu istiyorum.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: richedit lines word count

Mesaj gönderen SimaWB »

Daha önceki sorunuzda bahsettiğiniz Richedit1.CaretPos.X yardımıyla problemi çözebilirsiniz.
There's no place like 127.0.0.1
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

Re: richedit lines word count

Mesaj gönderen sr1111 »

bir türlü baaşaramadım. toplam kelimeyi veriyor gene.

SL := TStringList.Create;
SL.Delimiter := ' ';

For x := 1 to richedit1.CaretPos.x+1 do
If (richedit1.Text[x] <> #13) and (richedit1.Text[x] <> #10) and
(richedit1.Text[x] <> ' ') then
SL.DelimitedText := RichEdit1.Lines[ActiveLineNo(richedit1)];
Characters:=Sl.Count+1;
Label1.Caption := InttoStr(Characters);
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: richedit lines word count

Mesaj gönderen mrmarman »

Merhaba.

Önceden belirleyeceğiniz tüm ayraç karakterlerini hesaba katarak kelime sayar.

Kod: Tümünü seç

function RichBilgisi( RichEdit:TRichEdit ): String;
  function KelimeSayisi( icerik: String ): Integer;
  Const
    BizimAyrac = #250;
  Var
    Blok : String;
    idxAyrac, Kelime : Integer;
  begin
    Result := 0;
    Blok   := icerik;
    // Tüm Ayraç kabul edilecekleri tek paydaya, bizim bildiğimiz bir karaktere dönüştürelim.
    Blok   := StringReplace( Blok, ' ', BizimAyrac, [rfReplaceAll] );
    Blok   := StringReplace( Blok, #10, BizimAyrac, [rfReplaceAll] );
    Blok   := StringReplace( Blok, ',', BizimAyrac, [rfReplaceAll] );
    Blok   := StringReplace( Blok, '.', BizimAyrac, [rfReplaceAll] );
    Blok   := StringReplace( Blok, ';', BizimAyrac, [rfReplaceAll] );
    Blok   := StringReplace( Blok, ':', BizimAyrac, [rfReplaceAll] );
    // ...
    // YanYana gelenleri tekilleştirelim...
    while Pos( BizimAyrac+BizimAyrac, Blok ) > 0
    do Blok   := StringReplace( Blok, BizimAyrac+BizimAyrac, BizimAyrac, [rfReplaceAll] );

    while ( Pos(BizimAyrac, Blok) > 0 ) do
    begin
      idxAyrac := Pos(BizimAyrac, Blok);
      System.Delete( Blok, 1, idxAyrac );
      Blok := Trim(Blok);
      inc(Result);
    end;
    if Blok <> '' then inc(Result);
  end;
Var
  SatirNo, KelimeSay, SatirKelime, KelimeNo : Integer;
  Satir : String;
begin
  SatirNo     := 1+ RichEdit.Perform(EM_LINEFROMCHAR,RichEdit.SelStart,0);
  KelimeSay   := KelimeSayisi( Trim( RichEdit.Lines.Text ) );
  SatirKelime := KelimeSayisi( RichEdit.Lines[SatirNo-1] );

  Result := Format('Top.Kelime Sayısı: %d Satır: %d Satirdaki Kelime: %d ', [KelimeSay, SatirNo, SatirKelime] );
end;

Kullanımı :

Kod: Tümünü seç

procedure TForm1.RichEdit1Click(Sender: TObject);
begin
  Caption := RichBilgisi( RichEdit1 );
end;

procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  Caption := RichBilgisi( RichEdit1 );
end;
Resim
Resim ....Resim
Cevapla