Копирование текстовой информации
procedure TFormClipboard.bnCopyTextAsTextClick(Sender: TObject);
begin
//Если в буфере текст, то выводим его в поле редактора
if Clipboard.HasFormat(CF_Text)
then MemoText := Clipboard.AsText
end;
При работе с графическими компонентами для операций, связанных с обменом информацией через общую область, удобно использовать метод Assign. Процедура Assign (Source: TPers is tent) присваивает буферу обмена объект, указанный параметром Source. Если объект является изображением и принадлежит таким графическим классам, как TBitmap, TPicture или TMetaf ile, то в буфер обмена копируется изображение установленного формата. Для извлечения изображения также может использоваться метод Assign.
Пример использования буфера обмена для копирования изображений проводится в листинге 8.6.
...
Листинг 8.6.
Обмен изображением через буфер обмена
procedure TFormClipboard.bnCopyImageClick(Sender: TObject);
begin
//Открываем монопольный доступ
Clipboard.Open;
//Заносим изображение в буфер
Clipboard.Assign(ImageMyPic1.Picture);
//Проверям формат находящихся в буфере данных
if Clipboard.HasFormat(CF_Picture)
then ImageMyPic2.Picture.Assign(Clipboard);
//Закрываем монопольный доступ к буферу
Clipboard.Close;
end;
Изображение, находящееся в образе ImageMyPicl, помещается в буфер обмена, откуда затем копируется в образ ImageMyPic2. Для выполнения этих операций устанавливается монопольный доступ к объекту Clipboard.
Таким образом, использование объекта Clipboard находит широкое применение в программировании приложений, которым необходим обмен данными с другими программами. Необходимо отметить, что буфер обмена ориентирован на работу с пользователем (пользователь инициирует обмен данными между приложениями), поэтому такой способ обмена данными наиболее удобен с точки зрения пользователя. К тому же буфер обмена поддерживает множество форматов представления информации, что позволяет сделать обмен данными более гибким и эффективным.
8.3. Проецируемые в память файлы
Не менее мощным и гибким методом организации обмена данными между приложениями является метод, который базируется на проецируемых в память файлах (Files Mapping). Главная идея этого механизма основывается на использовании динамической разделяемой памяти системы для хранения в ней данных. Как известно, каждый процесс имеет свой участок памяти, называемый виртуальным адресным пространством. При использовании механизма проецируемых в память файлов данные становятся доступны из любого процесса, который использует этот файл. В этом случае говорят, что файл отображается в виртуальное адресное пространство процесса, поэтому данные, хранимые в файле, доступны процессу, который этот файл открыл. Механизм проецирования файлов в память используется, например, для исполняемых файлов приложений, а также для DLL.
Для работы с проецируемыми в память файлами существует целый ряд API-функций. Но прежде чем их рассматривать, разберемся в процессе организации обмена данными через проецируемые файлы. На первом этапе необходимо создать объект (файл, отображаемый в память), затем «отобразить» созданный объект в адресное пространство процесса приложения, получая возможность записи и чтения данных их этого файла. При отображении файла на определенный участок памяти (адресного пространства процесса) манипуляции с данными этого участка памяти отражаются на содержимом файла. После произведенных над объектом манипуляций необходимо закрыть доступ к данным файла (удалить проекцию и закрыть файл).
Рассмотрим некоторые функции для работы с проецируемым в память файлом. Для того чтобы создать объект файла, проецируемого в память, можно использовать функцию CreateFileMapping. Ее синтаксис выглядит следующим образом:
...
function CreateFileMapping(hFile: THandle;
lpFileMappingAttributes: PSecurityAttributes;
flProtect, dwMaximumSizeHigh, dwMaximumSizeLow: DWORD;
lpName: PChar ): THandle;
Подробнее рассмотрим параметры функции.
• hFile – идентификатор файла. В результате присвоения этому аргументу значения константы INVALID_HANDLE_VALUE мы свяжем создаваемыйобъект файлового отображения со страничным swap-файлом (системным файлом подкачки).