logo search
Лабораторная работа6

Работа с буфером обмена

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

Для выполнения операций обмена данными через буфер в Delphi предназначен специальный класс TClipboard и специальный объект Clipboard, являющийся экземпляром этого класса. Для доступа к свойствам и метолам объекта Clipboard необходимо указать в разделе Uses имя модуля Clipbrd. Свойство Clipboard.AsText позволяет получить содержимое буфера обмена, который представлен как текст.

С помощью функции HasFormat(Format:Word) можно проверить, какого формата информации содержится в буфере. В скобках могут быть следующие константы:

Метод Open позволяет открыть монопольный доступ приложения к буферу обмена, а метод Close закрывает его.

Методы CopyToClipboard, CutToClipboard и PasteFromClipboard позволяют выполнить стандартные операции копирования, вырезания и вставки текстового фрагмента. Например, в компоненте Memo1 скопируем набранный текст в буфер обмена, назначив для этого обработчик события - нажатие на кнопку Button1:

Procedure TForm1.Button1Click(Sender: TObject);

Begin

Memo1.SelectAll;

Memo1.CopyToClipboard;

End;

Можно также скопировать в Memo1 содержимое буфера, если там содержится текст:

If Clipboard.HasFormat(CF_Text) then

Memo1.PasteFromClipboard;

Или скопировать в Memo1 содержимое первой строки в следующую строчку:

Clipboard.Astext:=Memo1.Lines[0];

Memo1.Lines[1]:=Clipboard.AsText;

При работе с графическими компонентами используют метод Assign(Source: TPersistent), который позволяет скопировать и извлечь из буфера изображение, принадлежащих классам TBitmap, TPicture или TMetafile. Например, скопируем изображение из одной компоненты Image в другую:

Procedure TForm1.Button1Click(Sender: TObject);

Begin

Clipboard.Open;

Clipboard.Assign(Image1.Picture);

If Clipboard.HasFormat(CF_Picture)

Then Image2.Picture.Assign(Clipboard)

Else Image2.Picture.Assign(nil);

Clipboard.Close;

End;

Объект Clipboard – это глобальный буфер обмена. Кроме него в программе могут использоваться локальные буферы обмена, представляющие собой области оперативной памяти, выделенные программе во время выполнения для временного хранения и использования каких-либо данных. Для обмена между объектом Clipboard и локальным буфером предназначены методы GetTextBuf и SetTextBuf.