Редактирование ячеек таблиц

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

Редактирование ячеек таблиц

Редактирование ячеек

Когда пользователь щелкает мышью по ячейке таблицы или вводит данные в ячейку с помощью клавиатуры, RichViewEdit создаёт для этой ячейки специальный редактор. В данной документации этот редактор называется встроенным редактором ячейки.

Этот редактор будет создан только в том случае, если опция rvtoEditing включена в свойство Options таблицы.

Этот редактор не имеет рамок и расположен на месте ячейки, создавая иллюзию редактирования непосредственно в главном RichViewEdit.

Такое редактирование возможно только в том случае, если таблица была вставлена ​​в TRichViewEdit, а не в TRichView.

При инициализации редактора на ячейки компонент перемещает всё содержимое ячейки в этот редактор. При уничтожении редактора компонент перемещает изменённые данные обратно в ячейку (эта процедура прозрачна для пользователя).

Поэтому, если вы хотите получить прямой доступ к содержимому ячейки, используйте метод GetRVData ячейки вместо методов самой ячейки.

Вы можете инициировать редактирование ячейки из кода: table.EditCell (см. пример в разделе о выделении в таблицах) или Cell.Edit.

Позиция редактируемой ячейки может быть получена методами GetEditedCell и GetNormalizedSelectionBounds.

Ограничения

Этот механизм редактирования ячеек накладывает некоторые ограничения. Нельзя уничтожать редактор ячейки внутри следующих событий: OnKeyDown, OnKeyUp, OnKeyPress, OnRVMouseMove, OnStartDrag, OnDragOver.

Редактор ячейки может быть уничтожен вызовом RichViewEdit.Clear или методами, размещающими каретку/выделение за пределами редактируемой ячейки (RichViewEdit.SetSelectionBounds, table.EditCell и т. д.). Следует избегать вызова этих методов в данных событиях.

Если вам необходимо выполнить такую операцию, используйте следующий метод (для Windows):

из события отправьте сообщение на форму (PostMessage);

в процедуре обработчика этого сообщения выполните эту операцию.

Пример 1 (перезагрузка документа по двойному щелчку)

Этот пример для Windows. Для других платформ нужно использовать другие реализации работы с сообщениями (например, см. модуль fmxRVMessages для FireMonkey)

Объявите константу > WM_USER:

const WM_RELOADDOC = WM_USER+5;

В секции interface формы:

procedure WMReloadDoc(var Msg: TMessage); message WM_RELOADDOC;

В секции implementation:

procedure TForm1.WMReloadDoc(var Msg: TMessage);

begin

  { код для загрузки документа }

end;

Двойной щелчок:

procedure TForm3.RichViewEdit1DblClick(Sender: TObject);

begin

  PostMessage(Handle, WM_RELOADDOC, 00);

end;

Пример 2:

Demos\*\Assorted\Graphics\DragImg\