Основы буфера обмена (вырезать / копировать / вставить)

Буфер обмена Windows представляет собой контейнер для любого текста или графики, которые вырезаны, скопированы или вставлены из или в приложение. Эта статья покажет вам, как использовать объект TClipboard для реализации функций вырезания-копирования-вставки в вашем приложении Delphi.

Буфер обмена в целом

Как вы, вероятно, знаете, буфер обмена может одновременно хранить только один фрагмент данных одного типа для вырезания, копирования и вставки. Если мы отправляем новую информацию в том же формате в буфер обмена, мы стираем то, что было раньше, но содержимое буфера обмена остается в буфере обмена даже после вставки этого содержимого в другую программу.

TClipboard

Чтобы использовать буфер обмена Windows в наших приложениях, мы должны добавить Блок ClipBrd предложению использования проекта, за исключением случаев, когда мы ограничиваем вырезание, копирование и вставку компонентов, уже имеющих встроенную поддержку методов буфера обмена. Этими компонентами являются TEdit, TMemo, TOLEContainer, TDDEServerItem, TDBEdit, TDBImage и TDBMemo.

instagram viewer

Блок ClipBrd автоматически представляет объект TClipboard с именем Clipboard. Мы будем использовать CutToClipboard, Скопировать в буфер обмена, PasteFromClipboard, ясно и HasFormat методы для работы с буфером обмена и манипуляциями с текстом / графикой.

Отправить и получить текст

Для отправки некоторого текста в буфер обмена используется свойство AsText объекта Clipboard. Если мы хотим, например, отправить строка Информация, содержащаяся в переменной SomeStringData для буфера обмена (стирая текст, который там был), мы будем использовать следующий код:

использования ClipBrd; ...
Буфер обмена. AsText: = SomeStringData_Variable; 

Для извлечения текстовой информации из буфера обмена мы будем использовать

использования ClipBrd; ...
SomeStringData_Variable: = Буфер обмена. AsText; 

Примечание: если мы только хотим скопировать текст, скажем, из компонента Edit в буфер обмена, нам не нужно включать блок ClipBrd в условие использования. Метод CopyToClipboard TEdit копирует выделенный текст в элементе управления редактирования в буфер обмена в формате CF_TEXT.

процедура TForm1.Button2Click (Отправитель: TObject); начать// следующая строка выделит // ВСЕ текст в элементе управления редактирования {Edit1.SelectAll;} Edit1.CopyToClipboard; конец; 

Изображения буфера обмена

Чтобы получить графические изображения из буфера обмена, Delphi должна знать, какой тип изображения там хранится. Аналогично, для передачи изображений в буфер обмена приложение должно сообщить буферу обмена, какой тип графики оно отправляет. Ниже приведены некоторые из возможных значений параметра Format; Есть много других форматов буфера обмена, предоставляемых Windows.

  • CF_TEXT - Текст с каждой строкой, заканчивающейся CR-LF сочетание.
  • CF_BITMAP - Растровая графика Windows.
  • CF_METAFILEPICT - Графический метафайл Windows.
  • CF_PICTURE - Объект типа TPicture.
  • CF_OBJECT - Любой постоянный объект.

Метод HasFormat возвращает True, если изображение в буфере обмена имеет правильный формат:

если Буфер обмена. HasFormat (CF_METAFILEPICT) тогда ShowMessage («Буфер обмена имеет метафайл»); 

Используйте метод Assign для отправки (назначения) изображения в буфер обмена. Например, следующий код копирует растровое изображение из растрового объекта с именем MyBitmap в буфер обмена:

 Буфер обмена. Назначить (MyBitmap); 

В общем, MyBitmap - это объект типа TGraphics, TBitmap, TMetafile или TPicture.

Чтобы извлечь изображение из буфера обмена, мы должны: проверить формат текущего содержимого буфера обмена и использовать метод Assign целевого объекта:

{поместите одну кнопку и один элемент управления изображением в форму1} {Перед выполнением этого кода нажмите комбинацию клавиш Alt-PrintScreen}использования ClipBrd;... процедура TForm1.Button1Click (Отправитель: TObject); начатьесли Буфер обмена. HasFormat (CF_BITMAP) тогда Image1.Picture. Битовая карта. Назначить (буфер обмена); конец; 

Больше контроля буфера обмена

Буфер обмена хранит информацию в нескольких форматах, поэтому мы можем передавать данные между приложениями, используя разные форматы. При чтении информации из буфера обмена с помощью класса Delphi TClipboard мы ограничиваемся стандартными форматами буфера обмена: текстом, изображениями и метафайлами.

Предположим, вы работаете между двумя различными приложениями Delphi; Как бы вы определили пользовательский формат буфера обмена для отправки и получения данных между этими двумя программами? Предположим, вы пытаетесь закодировать вставку. пункт меню. Вы хотите, чтобы он был отключен, когда в буфере обмена нет текста (как пример).

Поскольку весь процесс с буфером обмена происходит за кулисами, не существует метода класса TClipboard, который бы информировал вас о некоторых изменениях содержимого буфера обмена. Идея состоит в том, чтобы подключить систему уведомлений буфера обмена, чтобы вы могли получать доступ к событиям и реагировать на них при изменении буфера обмена.

Для большей гибкости и функциональности необходима работа с уведомлениями об изменении буфера обмена и пользовательскими форматами буфера обмена - прослушивание буфера обмена.

instagram story viewer