|
<< Нажмите, чтобы показать Содержание >> Редактирование ячеек таблиц |
Когда пользователь щелкает мышью по ячейке таблицы или вводит данные в ячейку с помощью клавиатуры, 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, 0, 0);
end;
Пример 2:
▪Demos\*\Assorted\Graphics\DragImg\