Работа с буфером обмена в ТРВ-Редакторе (TRichView)

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

Работа с буфером обмена в ТРВ-Редакторе (TRichView)

TCustomRichView и его дочерние классы могут копировать информацию в буфер обмена в виде обычного текста, изображения, RTF и RVF, Markdown.

TRichViewEdit может вставлять информацию из буфера обмена в виде текста, изображения, RTF, HTML, RVF, URL, файла.

Также с помощью событий поддерживается работа с нестандартными форматами.

Копирование [VCL; Lazarus; FMX для Windows, macOS и Linux]

Главный метод для копирования выделенного фрагмента в буфер обмена – CopyDef.

Он копирует данные в форматах, перечисленных в свойстве TRichView.Options:

Опция

Если включена, то...

rvoAutoCopyText

CopyDef копирует в выделение как текст ANSI (устарело)

rvoAutoCopyImage

CopyDef может копировать выделенное изображение в буфер обмена

rvoAutoCopyUnicodeText

CopyDef копирует выделение как юникодный текст

rvoAutoCopyRTF

CopyDef копирует выделение как RTF (Rich Text Format)

rvoAutoCopyRVF

CopyDef копирует выделение как RVF (RichView Format)

CopyDef вызывается автоматически, когда пользователь нажимает  Ctrl + Insert  или  Ctrl + C  (или  ⌘ + C  в macOS)

Также можно использовать методы:

Copy копирует во всех возможных форматах;

CopyTextA копирует как текст ANSI (устарело; только для Windows);

CopyTextW копирует как юникодный текст;

CopyImage копирует выделенное изображение (если такое есть);

CopyRVF копирует в формате RVF. Этот формат имеет название 'RichView Format' и состоит из двух частей: <Размер RVF><RVF> где <Размер RVF> это 4-байтовое целое значение (число байт в <RVF>), <RVF> это данные RVF (см.: про RVF, спецификация RVF)

CopyRTF копирует в формате RTF (Rich Text Format).

CopyMarkdown копирует как юникодный текст в формате Markdown.

Метод SelectionExists возвращает ответ на вопрос, содержит ли выделение непустой фрагмент документа.

Событие OnCopy позволяет копировать в нестандартных форматах.

Копирование [FMX для Android и iOS]

В FireMonkey для мобильных платформ в буфер обмена можно скопировать только один формат. Copy и CopyDef работают одинаково: они копируют наиболее подходящий формат из списка форматов rvoAutoCopy* в свойстве Options.

Опции rvoAutoCopyText и rvoAutoCopyUnicodeText работают одинаково: копируется текст в формате Юникода.

Вставка

Вставка из буфера обмена в компонент TRichView невозможна. Все методы ниже относятся к компоненту TRichViewEdit.

Все нижеперечисленные методы вставляют данные, только если данные в указанных форматах присутствуют в буфере обмена.

Методы вставки:

PasteBitmap вставляет растровое изображение (обычно bitmap);

PasteMetafile вставляет метафайл [VCL];

PasteGraphic вставляет изображение (по MIME-типу) [Windows];

PasteGraphicFile вставляет графические файлы [Windows];

PasteText вставляет текст;

PasteRVF вставляет документ в формате RVF;

PasteRTF вставляет документ в формате RTF;

PasteHTML вставляет документ в формате HTML;

PasteURL вставляет URL [Windows];

Paste пытается вставить данные в следующей последовательности (если вставка какого-либо формата удаётся, выполнение прекращается; делаются попытки вставить только форматы, перечисленные в свойстве AcceptPasteFormats):

RVF

RTF

HTML

изображения из файлов

URL

текст

изображение (по MIME-типу)

изображение bitmap

метафайл.

PasteMarkdown вставляет текст как Markdown.

При нажатии  Ctrl + V  или  Shift + Insert  (или  ⌘ + V  в macOS) автоматически вызывается метод Paste.

Проверка наличия в буфере обмена подходящих форматов:

CanPaste можно ли вставить хоть в одном формате, находящемся в буфере обмена?

CanPasteRVF содержит ли буфер обмена RVF?

CanPasteRTF содержит ли буфер обмена RTF?

CanPasteHTML содержит ли буфер обмена HTML?

Событие OnPaste позволяет переопределить стандартную процедуру вставки. Например, можно вставлять данные в другом формате или разрешать вставку только в определенных форматах (например, только в виде обычного текста).

Вырезание

Метод RichViewEdit.CutDef копирует выделенный фрагмент (аналогично CopyDef), а затем удаляет его (аналогично DeleteSelection). Этот метод вызывается автоматически при нажатии пользователем  Ctrl + X  или  Shift + Delete  (или  ⌘ + X  в macOS).

Сообщения ОС Windows

TRichView обрабатывает сообщение WM_COPY, а TRichViewEdit также обрабатывает сообщения WM_PASTE, WM_CUT и EM_CANPASTE.

См. также...

Перетаскивание (Drag&drop)