Подсчёт символов в Richviewedit

Тема в разделе "Delphi - Компоненты", создана пользователем Shouldercannon, 25 май 2010.

  1. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    С помощью данной функции я веду подсчёт всего содержимого RichViewEdit
    Код (Text):
    function GetCharCount(RVData: TCustomRVData): Integer;
    var
    i, r, c: Integer;
    table: TRVTableItemInfo;
    begin
    Result := 0;
    for i := 0 to RVData.Items.Count - 1 do
    if RVData.GetItemStyle(i) >= 0 then
    begin
    inc(Result, RVData.ItemLength(i));
    end
    else
    if RVData.GetItemStyle(i) = rvsTab then
    inc(Result)
    else
    if RVData.GetItemStyle(i) = rvsTable then
    begin
    table := TRVTableItemInfo(RVData.GetItem(i));
    for r := 0 to table.Rows.Count - 1 do
    for c := 0 to table.Rows[r].Count - 1 do
    if table.Cells[r, c] <> nil then
    inc(Result, GetCharCount(table.Cells[r, c].GetRVData));
    end;
    end;
    Вот так я вывожу количество символов в Caption панели
    Код (Text):
    r := GetCharCount(RichViewEdit1.RVData);
    Panel1.Caption := IntToStr(r);
    Минус функции в том, что она не подсчитывает количество символов занимаемое при переводе каретки на новую строку с помощью Ctrl + Enter. Прошу помощи для испраления данной проблемы.
     

    Вложения:

    • Count.zip
      Размер файла:
      7,1 КБ
      Просмотров:
      6
  2. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Ну нихренаж себе извращеньице... поражен... ;)
    а вот так не пробовали?
    Код (Delphi):
    procedure TForm1.RichViewEdit1Change(Sender: TObject);
    var
    r: integer;
    begin
    r := RichViewEdit1.GetTextLen;
    Panel1.Caption := IntToStr(r);
    end;
     
  3. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    И правда, хоть Ctrl + Enter принимается за один символ вместо двух, всёравно пасибо.
     
  4. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    не за что... :)
    Дело в том что он (Ctrl + Enter) и есть у вас всего один символ...
    Попробуйте добавить кнопку с кодом:
    Код (Delphi):
    procedure TForm1.Button1Click(Sender: TObject);
    var
    r: integer;
    s: string;
    begin
    // размер буфера с "двойным запасом"
    r := RichViewEdit1.GetTextLen*2;
    SetLength(s,r);
    // заливаем буфер #0
    FillChar(s[1],r,0);
    // читаем в буфер содержание (все символы) окна
    SendMessage(RichViewEdit1.Handle,WM_GETTEXT,r,Integer(@s[1]));
    ShowMessage(s);

    end;
    Проследите (в пошаговом режиме) изменение состояния переменной "s".
    Вы увидите что все переводы каретки будут #$D (#13).
    Если проделать тоже самое... скажем для TMemo, то мы увидим #$D#$A...
    Похоже что это особенности реализации компонета RichViewEdit...
    Хотя вполне возможно эту "фичу" можно настроить через его свойства в design time.
    Но я не проверял... :)
     
Загрузка...
Похожие Темы - Подсчёт символов Richviewedit
  1. zamanov
    Ответов:
    1
    Просмотров:
    651
  2. 123456789igor
    Ответов:
    0
    Просмотров:
    1.138
  3. maliy
    Ответов:
    1
    Просмотров:
    316
  4. sunni
    Ответов:
    0
    Просмотров:
    1.230
  5. sunni
    Ответов:
    0
    Просмотров:
    1.048

Поделиться этой страницей