Здравствуйте, в этой статье я хотел бы поговорить про то как в своих приложениях можно использовать буфер обмена. Вообще как бы буфер обмена предназначен для временно хранения данных, поэтому в буфер обмена мы можем как записывать информацию, так и получать из него эту самую информацию. Вообще например в нашем случае можно использовать буфер в качестве например программы, которая будет закачивать на сервер какой-нибудь файл. То есть мы выбираем файл и просто выделяем его и нажимаем в 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;
Хочу сказать Вам, что голосовое общение в сети Интернет очень популярно на данный момент, а для этого существует огромное количество программ. Одна из них — это skype, так что скачать skype на русском языке Вы сможете для любых платформ ОС и общайтесь на здоровье. |
Исходник статьи качаем тут
Автор статьи - Andrey53
Метки: Clipboard, Clipbrd, TClipboard, буфер, буфер обмена, работа с буфером, работа с буфером в Delphi
На текст всегда проверяли так:
ClipBoard.HasFormat(CF_TEXT)
а не
ClipBoard.FormatCount=4
И еще
ClipBoard.Close;
лучше помещать в finally.
Это все, конечно, не сильно принципиально =)
>>А вот теперь можно приступить к работе с буфером, добавляем текст в буфер
Можно было бы и без создания обойтись
Clipboard.AsText := ‘Any String’
Дело в том, что в модуле clipbrd есть:
function Clipboard: TClipboard;
begin
if FClipboard = nil then
FClipboard := TClipboard.Create;
Result := FClipboard;
end;
Кстати да Vlad, спасибо, можно было и не создавать, не до конца модуль просмотрел
без строки
ClipBoard:=TClipboard.Create;
в D2009 — AV
[…] его оттуда. Мы уже с Вами рассматривали статью о том, как работать с буфером обмена в Delphi. В данной статье мы рассмотрим […]
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
RichEdit1.PasteFromClipboard;
end;
При всткавке текста п поле RichEdit1 из буфера с помощю Этой процедуры в поле не сохраняются свойства шрифта. Как сделать чтобы при копировани текста из нету и вставке ево в поле редактора сохранялись свойства шрифта (размер, цвет, стиль и тд.)