Как проверить, пустой ли RichView на Delphi? - PullRequest
0 голосов
/ 23 мая 2018

A есть вопрос о Delphi и компоненте RichView.

Как я могу проверить, является ли RichView пустым?

Мне нужно знать, что пользователь что-то набрал или что-то вставил в компонент RichView.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Спасибо всем, ответ @BMS работал для меня!

Мне пришлось адаптировать вашу функцию к моей программе, потому что функция ItemCount у меня не работала, поэтому Я изменил функцию наэто и работало очень хорошо :

function MyProgram.isEmpty(RView: TbsRichView): boolean;
var AStream: TMemoryStream;
begin
  AStream:= TMemoryStream.Create;
  try
    RView.Editor.SaveTextToStream('', AStream, 0, false, true);
    AStream.Position:= 0;
    Result:= AStream.Size = 0;
  finally
    AStream.free;
  end;
end;

В этой функции я просто проверяю, равен ли результат 0. Если он равен 0, это означает, что пользователь ничего не набрал, или удалилбыло написано ранее.Так что Я могу проверить, пустой ли RichText или нет .В моей программе RichText не может быть пустым для сохранения формы.

0 голосов
/ 23 мая 2018

Вы можете попробовать использовать метод GetTextLen :

function IsRichViewEmpty(Control: TCustomRichView): Boolean;
begin
  Result := Control.GetTextLen = 0;
end;

Это потому, что TRichView обрабатывает WM_GETTEXTLENGTH сообщение по-своему, поэтому я считаю (не проверял, просто проверил источник), что достаточно (есть флаг rvflCanProcessGetText , который будетзапретить получение длины текста, но она включается при создании элемента управления TRichView ).

0 голосов
/ 23 мая 2018

Попробуйте эту функцию, надеюсь, это поможет вам:

function TRichViewEditFrame.isEmpty: boolean;
var AStream: TMemoryStream;
begin
  Result := false;
  if TRichViewEdit(RichEditEntete).ItemCount = 0 then exit;
  AStream:= TMemoryStream.Create;
  try
    TRichViewEdit(RichEditEntete).SaveTextToStream('', AStream, 0, false, true);
    AStream.Position:= 0;
    Result:= AStream.Size = 0;
  finally
    AStream.free;
  end;
end;
...