Каждый юзер наверняка сталкивался с помещением информации в буфер и извлечением ее оттуда. Тот же пресловутый Ворд при нажатии кнопки «копировать» помещает выделенный текст в буфер, а при нажатии «вставить» — извлекает его. Таким же образом помещаться в буфер могут изображения и данные разных форматов. Итак, буфер — это специальная область оперативной памяти в которую
Windows помещает пользовательские данные для обмена между разными приложениями или внутри одного приложения.
Для работы с буфером обмена в программе определена переменная Clipboard. С помощью ее методов и свойств вы можете помещать или забирать из буфера обмена различные данные.
Приведем примеры:
Работа с текстом:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Procedure Button1OnClick(); begin Clipboard.asText := 'тест буфера обмена';//вставить текст в буфер Clipboard.SetTextBuf('тест буфера обмена'); //или это можно сделать так if Clipboard.HasFormat(CF_TEXT) then //HasFormat(CF_TEXT) проверяет что в буфере действительно текст, и если да //то возвращает true, иначе false ShowMessage(Clipboard.asText); //Clipboard.asText извлекает текст из буфера Clipboard.clear;//очищает буфер ShowMessage(Clipboard.asText);//теперь там пусто end; |
Работа с bmp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Procedure Button2OnClick(); var bmp:TBitmap; bmp2:TBitmap; begin bmp := TBitmap.Create(); bmp.LoadFromFile('c:\PaintedMass.bmp'); //загрузим какую нибудь картинку с диска Clipboard.SetAsHandle(CF_BITMAP, bmp.Handle); //вставляем картинку в буфер обмена,CF_BITMAP формат вставляемых данных bmp2 := TBitmap.Create(); bmp2.Handle := Clipboard.GetAsHandle(CF_BITMAP);//извлекаем из буфера указатель на картинку в другую переменную bmp2.SaveToFile('c:\FromClipboard.bmp');//сохраняем на диск извлеченную картинку bmp.free; //освобождаем память bmp2.free;//освобождаем память end; |
КАК УЗНАТЬ ФОРМАТ ДАННЫХ БУФЕРА В ДАННЫЙ МОМЕНТ
Для этого существует специальная функция Clipboard.HasFormat(Format: WORD):boolean;
Функция возвращает true, если в буфере именно этот формат, в противном случает возвращает false.
Описание форматов:
CF_TEXT — Обычный текст, заканчивающийся <CR><LF>
CF_BITMAP — Битмап изображение *.bmp
CF_METAFILEPICT — Метафайл изображение *.wmf
CF_PICTURE — Объект типа TPicture
CF_COMPONENT — Компонента формы (Tbutton, TMemo и т.д.)
ОЧИЩАЕМ БУФЕР
Чтобы очистить буфер обмена от содержащихся в нем данных, используйте процедуру Clipboard.clear;
ОТКРЫВАЕМ /ЗАКРЫВАЕМ
Если вы хотите, чтобы все приложения, кроме вашего не могли изменять содержимое буфера, используйте
Clipboard.Open;
После пользования буфером, его необходимо закрывать процедурой
Clipboard.Close;