Пример: вставка компонентов, которые могут изменять своё содержимое, в TDBRichViewEdit

<< Нажмите, чтобы показать Содержание >>

Пример: вставка компонентов, которые могут изменять своё содержимое, в TDBRichViewEdit

В этом примере показано, как работать с TEdit, вставленным в TDBRichViewEdit, если требуется сохранять его текст в поле RVF.

Проблема: когда пользователь изменяет текст в TEdit, набор данных (dataset) не получает уведомление об изменении документа, поэтому эти изменения не сохраняются.

В этом примере на форме Form1 размещён компонент DBRichViewEdit1: TDBRichViewEdit.

1) Добавьте в раздел private формы Form1:

procedure EditChange(Sender: TObject);

Реализация (Implementation):

procedure TForm1.EditChange(Sender: TObject);

begin

  if DBRichViewEdit1.CanChange then

    DBRichViewEdit1.Change

  else

    Beep;

end;

2) При создании нового TEdit назначьте его событие OnChange:

var Edit: TEdit;

begin

  Edit := TEdit.Create(nil);

  Edit.OnChange := EditChange;

  DBRichViewEdit1.InsertControl('', Edit, rvvaBaseline);

end;

3) Необходимо также назначить это событие всем компонентам TEdit, загруженным из поля базы данных вместе с документами RichView. Для этого используйте событие OnControlAction компонента DBRichViewEdit:

procedure TForm1.DBRichViewEdit1ControlAction(Sender: TCustomRichView;

  ControlAction: TRVControlAction; ItemNo: Integer; var ctrl: TControl);

begin

  if (ControlAction=rvcaAfterRVFLoad) and (ctrl is TEdit) then

    TEdit(ctrl).OnChange := EditChange;

end;

Не забудьте зарегистрировать TEdit в секции initialization модуля:

initialization

  RegisterClasses([TEdit]);