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

5 минут на чтение

Здравствуйте, в этой статье я хотел бы поговорить про то как в своих приложениях можно использовать буфер обмена. Вообще как бы буфер обмена предназначен для временно хранения данных, поэтому в буфер обмена мы можем как записывать информацию, так и получать из него эту самую информацию. Вообще например в нашем случае можно использовать буфер в качестве например программы, которая будет закачивать на сервер какой-нибудь файл. То есть мы выбираем файл и просто выделяем его и нажимаем в Windows например Ctrl+C или в контекстном меню выбираем пункт «Копировать», а затем программа проверяет буфер обмена, если в нем есть что-то, то начинает закачивать, ну это я так как пример привел, а так мы будем знакомится с методами и свойствами класса, который отвечает за работу с буфером обмена. В Delphi за работу с буфером обмена отвечает модуль Clipbrd, да именно его необходимо подключить в Uses, конечно я думаю есть и другие модули, но этот по крайней мере стандартный и можно его спокойно подключать в Uses.

После того как мы подключим данный модуль, нам необходимо создать переменную класса TClipboard. После объявления нам ее необходимо создать. Но давайте пока что просто поговорим о свойствах и методах данного класса.

Свойства

  • AsText - рассматривает буфер обмена как текстовую строку, с помощью данного свойства мы можем получить из буфера текст, если он там конечно находится
  • FormatCount - возвращает общее количество форматов, хранящиеся в буфере. То есть это свойства определяет номер формата, который сейчас в буфере, если картинка, то например 3, если текст, то например 4 и так далее. Тип — Integer
  • Formats[Index:Integer]:Dword - Открывает доступ к формату, указанному индексом Index. То естаь мы можем например если в буфере находятся и картинка и другой какой-нибудь файл, то можно прочитать именно картинку, если только она там есть

Ну вот и все по свойствам, теперь перейдем к методам

  • Assign - копирует изображение в буфер
  • Clear - тут думаю и комментировать не надо, очищает буфер
  • Close - закрывает буфер обмена
  • GetTextBuf(Buffer:Pchar,Bufsize:integer) — копирует из буфера Byfsize символов и возвращает действительное количество скопированных символов
  • HasFormat(Format:Word) — возвращает True если буфер содержит данные в формате Format
  • Open - открывает буфер обмена
  • SetTextBuf(Buffer:Pchar) — помещает в буфер обмена текстовое значение

Во многих компонентах есть свойства, которые позволяет помещать данные в буфер, да и вообще работать с буфером обмена. Например TMemo, TEdit, TRichEdit есть такие методы как CopyToClipboard, CutToClipboard, PasteFromToClipboard. В TImage также имеются методы для вставки и копирования изображения в буфер и наооборот, на сейчас мы только работаем с TClipboard.

Давайте вставим теперь текст в буфер обмена

Но для начала создадим переменную класса TClipboard на OnCreate формы

procedure TForm1.FormCreate(Sender: TObject);
begin
   ClipBoard:=TClipboard.Create;
end;

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

procedure TForm1.Button3Click(Sender: TObject);
begin
    ClipBoard.SetTextBuf('Text to Buffer');
end;

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

procedure TForm1.Button4Click(Sender: TObject);
begin
   if ClipBoard.FormatCount=4 then
    ShowMessage(ClipBoard.AsText);
end;

Мы перед этим убеждаемся, что в буфере именно текстовая информация, а не картинка или еще что-нибудь

Далее теперь давайте добавим картинку в буфер из TImage например и из файла, а затем в TImage отобразим ее. Для этого на форме у нас должно быть 2 TImage, в один загружаем картинку, а второй пускай пустует, а теперь мы запишем в буфер картинку из TImage

procedure TForm1.Button1Click(Sender: TObject);
begin
   ClipBoard.Open;
   ClipBoard.Assign(Image1.Picture);
   ClipBoard.Close;
end;

Из файла

procedure TForm1.Button6Click(Sender: TObject);
var
 jpg:TJPEGImage;
begin
   if OpenPictureDialog1.Execute then
    begin
     jpg:=TJPEGImage.Create;
     jpg.LoadFromFile(OpenPictureDialog1.FileName);
     ClipBoard.Assign(jpg);
     jpg.Free;
    end;
end;

Конечно если Вы будете добавлять в jpg, например, Bitmap, то «выскочит» ошибка, поэтому необходимо проверять формат.

Ну а теперь нам осталось только в TImage отобразить нашу картинку

procedure TForm1.Button2Click(Sender: TObject);
begin
   ClipBoard.Open;
   if ClipBoard.FormatCount=3 then
    Image2.Picture.Assign(ClipBoard);
   ClipBoard.Close;
end;

Мы также проверяем формат, хранимый в буфере, чтобы не вылетало у нас никаких ошибок и отображаем в TImage

Ну а очищать буфер наверное само лекго

procedure TForm1.Button5Click(Sender: TObject);
begin
   ClipBoard.Clear;
end;
Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

Доброго времени суток дорогие читатели сайта. В этой статье, я хотел бы поговорить о том, как можно создать собственный формат данных и поместить его в буфер обмена, а затем вытащить его оттуда. Мы уже с Вами рассматривали статью о том, как работать с буфером ...
Не долго пришлось ждать следующей статьи — про MapWindow GIS в Delphi, а тема ее — Работа с таблицами атрибутов, а точнее, работа, с тем самым, файлом dbf. Вообще, как Вы догадались возможно раньше, что приложен файл dbf - к shp-файлу не с проста. Вообще, если...
Здравствуйте, вот все продолжаю мучать VK API в Delphi. На этой раз «перст пал» на расширенные методы API. К данным методам относятся работа с личными сообщениями работа со стеной пользователя работа с фотографиями и альбомами фотографий В данный момент хоте...