Работа
с буфером обмена
Вы можете использовать
системный буфер обмена для копирования и вставки графики внутрь вашего приложения,
а также для переноса графики из вашего приложения в другие и из других приложений
в ваше. Для этого используется специальный объект Kylix Сlipboard
.
Этот объект позволяет оперировать различным типом информации, включая графику
и текст.
Прежде чем вы сможете воспользоваться
данным объектом, необходимо добавить в блок uses модуля, в котором будет использоваться
буфер обмена, имя модуля OClipbrd
:
uses
SysUtils,
Types, Classes, Variants, QGraphics, QControls, QForms, QDia-logs, QStdCtrls,
OClipbrd;
Данный модуль позволит обращаться
к объекту Clipboard
.
Копирование графики
в буфер обмена
Для копирования графической
информации в буфер обмена нужно ассоциировать графический объект с объектом
Clipboard
. Это можно сделать с помощью метода Assign
.
Код, приведенный в листинге
13.21, показывает, как можно скопировать графический образ, содержащийся в компоненте
типа Timage
, имеющем имя Image
, в буфер обмена, выбрав
пункт меню Edit/Copy формы Form1.
Листинг 13.21.Копирование
графики в буфер обмена
procedure TForm1.Copy1Click{Sender: TObject); begin
Clipboard.Assign(Image.Picture) end.
Вырезание графики в
буфер обмена
Вырезание графики в буфер
обмена похоже на копирование. Отличие заключается в том, что после копирования
картинка, содержащаяся в источнике, уничтожается.
Для реализации данной операции
нужно выполнить два последовательных шага:
1. Скопировать данные в
буфер обмена.
2. Уничтожить оригинальные
данные.
В листинге 13.22 показано,
как можно осуществить операцию вырезания картинки в буфер обмена. Сначала изображение
копируется в буфер обмена, затем место, откуда взято изображение, закрашивается
белым цветом с помощью установки режима копирования cmWhiteness
.
Листинг 13.22. Вырезание
графики в буфер обмена
procedure TForm1.Cut1Click(Sender: TObject); var
ARect: TRect; begin
Copy1Click{Sender); { копирование картинки в буфер обмена }
with Image.Canvas do begin
CopyMode := cmWhiteness;{установить режим копирования в белый цвет} ARect := Rect(0, 0, Image.Width, Image.Height); {получение квадрата
копирования}
CopyRect(ARect, Image.Canvas, AReCt); { наложение белого
прямоугольника } CopyMode := cmSrcCopy; { восстановление нормального режима
копирования } end; end;
Вставка графики из буфера
обмена
Если в буфере обмена содержится
какая-либо графическая информация, вы можете вставить ее в любой графический
компонент Kylix, включая канву формы.
Для вставки графики из
буфера обмена нужно выполнить следующие шаги:
1. Вызвать метод Provides
объекта Clipboard
для того, чтобы убедиться, что буфер обмена содержит
графическую информацию. Метод Provides
представляет собой функцию,
которая возвращает булевы значения. Если возвращаемое значение True
,
то буфер обмена содержит данные именно такого типа, которые указаны в параметре
метода Provides
.
2. Указать объект, в который
будет произведено копирование с помощью метода Assign
.
Нижеприведенный код (листинг
13.23) показывает, как можно копировать картинку из буфера обмена в компонент
Image
с помощью пункта меню Edit/Paste.
Листинг 13.23.Копирование графики из буфера обмена
procedure TForm1.PasteButtonClick(Sender: TObject); var
Bitmap: TBitmap; begin
if Clipboard.Provides(SDelphiBitmap) then { в буфере обмена
изображение? ) begin
Image1.Picture.Bitmap.Assign(Clipboard);
end; end;
Изображение, находящееся
в буфере обмена, может быть скопировано из любого приложения.