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

Shouldercannon

Well-known member
25.05.2010
128
0
#1
С помощью данной функции я веду подсчёт всего содержимого RichViewEdit
Код:
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 панели
Код:
r := GetCharCount(RichViewEdit1.RVData);
Panel1.Caption := IntToStr(r);
Минус функции в том, что она не подсчитывает количество символов занимаемое при переводе каретки на новую строку с помощью Ctrl + Enter. Прошу помощи для испраления данной проблемы.
 

Вложения

sinkopa

Well-known member
17.06.2009
344
4
#2
Ну нихренаж себе извращеньице... поражен... ;)
а вот так не пробовали?
Код:
procedure TForm1.RichViewEdit1Change(Sender: TObject);
var
r: integer;
begin
r := RichViewEdit1.GetTextLen;
Panel1.Caption := IntToStr(r);
end;
 

Shouldercannon

Well-known member
25.05.2010
128
0
#3
И правда, хоть Ctrl + Enter принимается за один символ вместо двух, всёравно пасибо.
 

sinkopa

Well-known member
17.06.2009
344
4
#4
И правда, хоть Ctrl + Enter принимается за один символ вместо двух, всёравно пасибо.
не за что... :)
Дело в том что он (Ctrl + Enter) и есть у вас всего один символ...
Попробуйте добавить кнопку с кодом:
Код:
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.
Но я не проверял... :)