PDA

Просмотр полной версии : [Статья] Работаем с буфером обмена в среде Delphi.


.Master.
12.03.2014, 18:22
Сегодня каждый из нас сталкивается с помещением информации в буфер и извлечением ее оттуда. Простым примером этого, может служить программа - Ворд. При нажатии кнопки копировать помещает выделенный текст в буфер, а при нажатии вставить - извлекает его. Таким же образом мы можем поместить в буфер изображения и данные разных форматов. Что же такое буфер? Подведем итог.

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

Для того, чтобы мы могли работать с буфером обмена из Delphi, нужно подключить к нашему приложению модуль clipbrd.pas, то есть пишем в uses clipbrd.pas,...


Работаем с текстом:

Clipboard.asText:='ВАШ_ТЕКСТ';

или


Clipboard.SetTextBuf(PChar('ВАШ_ТЕКСТ'));

Чтобы мы могли извлечь текст из буферы, нам надо: поместить текст в Memo1:TMemo

Memo1.Text:=Clipboard.asText;


Работаем с изображением:

Если вы работаете с компонентом Image1:Timage, то самым простым способом поместить в него изображение из буфера будет присвоение хэндла данных Clipboard'a хэндлу Tbitmap:


Image1.Picture.Bitmap.Handle:=Clipboard.GetAsHandl e(CF_bitmap);


Как узнать формат данных буфера в данный момент?



Для этого у нас с вами есть спец. функция Clipboard.HasFormat(Format: WORD):boolean;
Функция возвращает true, если в буфере именно этот формат, в противном случает возвращает false.

Описание форматов:

CF_TEXT - Обычный текст, заканчивающийся <CR><LF>

CF_BITMAP - Битмап изображение *.bmp

CF_METAFILEPICT - Метафайл изображение *.wmf

CF_PICTURE - Объект типа TPicture

CF_COMPONENT - Компонента Delphi (Tbutton, например)

CF_OBJECT - Любой объект в Delphi типа TPersistent


Как очистить буфер?

Чтобы нам очистить буфер обмена от содержащихся в нем данных, нам надо использовать процедуру Clipboard.clear;

ОТКРЫВАЕМ // ЗАКРЫВАЕМ

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

Clipboard.Open;

После использование буфера, его необходимо закрывать процедурой Clipboard.Close;

Всем спасибо за внимание.