logo
Программирование в среде Delphy / Программирование в среде Delphi

Объект ClipBoard

Объект Clipboard используется как буфер межпрограммного обмена в системе Windows. Для использования его возможностей достаточно в разделе uses подключить модуль Clipbrd.

Методы открытия и закрытия буфера обмена:

Procedure Open;

Procedure Close;

вызываются во всех остальных методах TClipBoard, поэтому прямой их вызов практически не используется.

Очистка буфера обмена производится методом – Procedure Clear;

С помощью свойств

Property FormatCount:Integer; // число форматов

Property Formats[Index:Integer]:Word; // номера форматов

можно узнать о форматах данных, записанных в буфер обмена.

Стандартно поддерживаются форматы, определяемые следующими текстовыми константами:

CF_TEXT – буфер содержит текст,

CF_BITMAP – буфер содержит картинку,

CF_METAFILEPICT – буфер содержит векторную картинку,

CF_PICTURE – буфер содержит объект типа TPicture,

CF_COMPONENT – буфер содержит компонент,

CF_PALETTE – буфер содержит палитру картинки.

Для работы с текстом предназначены следующие методы:

Function GetTextBuf(Buffer:PChar; BufSize:Integer):Integer;

Procedure SetTextBuf(Buffer:PChar);

Первый метод помещает текст из буфера обмена в переменную Buffer, длина которого ограничена значением BufSize. Функция возвращает истинную длину перемещенного текста. Второй метод помещает текст из переменной Buffer в буфер обмена в формате CF_TEXT.

Например, оператор

Clipboard.SetTextBuf(PChar(Memo1.SelText));

записывает в буфер обмена выделенный текст из компонента Memo1. Можно произвести и обратную операцию – поместить текст из буфера обмена, например, в компонент Memo2:

Memo2.Lines.Add(ClipBoard.AsText);

Здесь используется свойство AsText для извлечения текста из буфера обмена. Используя метод

Procedure Assing(Source:TPersistent);

можно помещать в буфер обмена данные классов TBitMap (формат CF_BITMAP) или TMetaFile (формат CF_METAFILEPICT).

Следующий пример показывает возможность сохранения картинки из компонента Image1 в буфере обмена и последующей переписи этой картинки в компонент Image2:

ClipBoard.Asssign(Image1.Picture);

Image2.Picture.Assing(ClipBoard);

Для определения формата данных, находящихся в буфере обмена, можно использовать, например, следующий обработчик события нажатия кнопки Button1:

Procedure TForm1.Button1Click(Sender: TObject);

begin

if Clipboard.HasFormat(CF_TEXT) then

ShowMessage('Буфер содержит текст');

if Clipboard.HasFormat(CF_BITMAP) then

ShowMessage('Буфер содержит картинку');

if Clipboard.HasFormat(CF_METAFILEPICT) then

ShowMessage('Буфер содержит векторную картинку');

if Clipboard.HasFormat(CF_PICTURE) then

ShowMessage('Буфер содержит объект типа TPicture');

if Clipboard.HasFormat(CF_COMPONENT) then

ShowMessage('Буфер содержит компонент');

end;

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