0 просмотров

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

Программирование буфера обмена в Delphi

Зарко Гайич имеет опыт работы с SQL и практические знания систем баз данных, таких как MS SQL Server, Firebird, Interbase и Oracle. Он также владеет XML, DHTML и JavaScript.

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

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

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

TClipboard

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

Модуль ClipBrd автоматически представляет объект TClipboard с именем Clipboard. Мы будем использовать Вырезать в буфер обмена, Скопировать в буфер обмена, Вставить из буфера обмена, чистый а также ХасФормат методы работы с буфером обмена и манипулирование текстом/графикой.

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

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

Чтобы получить текстовую информацию из буфера обмена, мы будем использовать

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

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

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

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

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

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

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

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

Больше управления буфером обмена

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

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

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

Чтобы насладиться большей гибкостью и функциональностью, необходимо иметь дело с уведомлениями об изменении буфера обмена и пользовательскими форматами буфера обмена — прослушивание буфера обмена.

голоса
Рейтинг статьи
Статья в тему:  Слайм, меняющий цвет кольца настроения
Ссылка на основную публикацию
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
Adblock
detector