Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Функции работы с буфером обмена

Поиск

Буфер обмена в операционной системе — это непросто выделяемая операционной системой память для обмена данными, а совокупность специальных областей данных ("корзин"), имеющих указатели (дескрипторы) на информацию, хранящуюся в специальном формате.

Буфер обмена поддерживает некоторое количество предопределенных фор­матов для хранения информации различных типов, таких как графика и текст, хотя любое приложение может определять свой собственный формат. Предопределенные форматы распознаются функциями GetClipboardData И Setciipboardoata. Для помещения информации в буфер приложение сначала должно открыть его функцией OpenClipboard, затем предварительно очистить буфер функцией EmptyClipboard, которая удаляет всю информацию из буфера в любом формате и назначает буфер конкретному окну, передавая параметр hWndNewOwner, установленный в функции Openclipboard. Затем приложение вызывает функцию SetClipboardData, передавая ей флаг, указывающий фор­мат данных, и указатель на сами данные. Функция CloseClipboard закрывает буфер и завершает работу с ним. Приложение может получить данные из бу­фера с помощью функции GetClipboardData, передавая ей флаг формата за­прашиваемых данных. Если данные в буфере существуют в запрашиваемом формате, то будет возвращен указатель на них. При помещении приложением данных в буфер желательно, чтобы они находились там во всех возможных форматах. Это нужно, чтобы наибольшее количество приложений могло ими воспользоваться. Например, если текстовый процессор поместит данные в буфер только в собственном формате, то они будут доступны только запу­щенным экземплярам этого процессора. Если этот процессор поместит дан­ные в буфер дополнительно к собственному формату еще и в форматах cf_text и cf_unicodetext, то эти данные будут доступны другим Windows-приложениям, таким как Блокнот или MS Word.

Windows обеспечивает автоматическое преобразование различных предопределенных форма­тов один в другой. В табл. 2 показаны наименования форматов, их возможные варианты конвертирования и поддержка различными версиями операционной системы Windows.

 

Таблица 2

Формат Конвертируется в Поддержка Windows
CF_BITMAP CF_DIB Windows 95/98/ME, NT/2000/XP
CF_DIB CD_BITMAP Windows 95/98/ME, NT/2000/XP
CF_DIB CF_PALETTE Windows 95/98/ME, NT/2000/XP
CF_METAFILEPICT CF_ENHMETAFILE Windows 95/98/ME, NT/2000/XP
CF_ENHMETAFILE CF_METAFILEPICT Windows 95/98/ME, NT/2000/XP
CF_OEMTEXT CF_UNICODETEXT Windows NT/2000/XP
CF_OEMTEXT CF_TEXT Windows 95/98/ME, NT/2000/XP
CF_TEXT CF_OEMTEXT Windows 95/98/ME, NT/2000/XP
CF_TEXT CF_UNICODETEXT Windows NT/2000/XP
CF_UNICODETEXT CF_OEMTEXT Windows NT/2000/XP
CF_UNICODETEXT CF_TEXT Windows NT/2000/XP

В табл. 3 приведены системные функции для работы с буфером обмена.

Таблица 3

Имя функции Краткое описание  
ChangeClipboardChain Удаляет окно просмотра буфера обмена из це­почки  
CloseClipboard Закрывает буфер обмена для чтения или записи его содержимого  
CountClipboardFormats Возвращает количество форматов, воспроизводи­мых текущим владельцем буфера обмена  
EmptyClipboard Удаляет содержимое буфера обмена и сопутст­вующие данные  
EnumClipboardFormats Перечисляет все форматы буфера обмена, вос­производимые его текущим владельцем  
GetClipboardData Извлекает дескриптор содержимого буфера обмена  
GetClipboardFormatName Указывает имя зарегистрированного формата бу­фера обмена
GetClipboardOwner Возвращает дескриптор окна владельца буфера обмена
GetClipboardViewer Возвращает дескриптор окна первой программы просмотра буфера обмена в цепочке
GetOpenClipboardWindow Определяет дескриптор окна, для которого в дан­ный момент открыт буфер обмена
GetPriorityClipboardFormat Проверяет доступность в буфере обмена требуе­мых форматов данных
IsC1ipboardFormatAvailable Указывает, содержит ли буфер обмена данные в определенном формате
OpenClipboard Открывает буфер обмена для чтения и записи его содержимого
RegisterClipboardFormat Регистрирует в Windows имя нового формата бу­фера обмена
SetClipboardData Помещает данные в буфер обмена для данного формата
SetClipboardViewer Помещает конкретное окно в начало цепочки окон просмотра буфера обмена
       

 

Используя функции работы с буфером обмена, можно, например, определить поддерживаемые форматы буфера обмена его текущего владельца.

 

Пример. Определение текущего формата буфера обмена

procedure TForml.TimerlTimer(Sender: TObject);

Const

{массив, содержащий все предопределенные имена форматов буфера обмена}

PredefinedClipboardNames: array [1..17] of string =

('CF TEXT', 'CF BITMAP’,

‘CF_METAFILEPICT’, 'CF_SYLK', 'CF_DIF’

‘CF_TIFF', 'CF_OEMTEXT', 'CF_DIB',

'CF_PALETTE’, 'CF_PENDATA’ 'CF_RIFF’

‘CF_WAVE', 'CF_UNICODETEXT',

'CF_ENHMETAFILE', 'CF_HDROP', 'CF_LOCALE',

'CF_MAX');

Var

FormatID: UINT; {для ID-формата буфера обмена}

FormatName: array [0..255] of char; {для имени формата буфера обмена}

Len: Integer; {для длины формата буфера обмена}

Begin

{очищаем окно вывода}

ListBoxl.Items.Clear;

{подсчитываем и выводим количество форматов, поддерживаемых текущим

владельцем буфера обмена}

Labell.Caption:=

'Всего форматов доступно: '+IntToStr(CountClipboardFormats);

{открываем буфер обмена}

OpenClipboard(0);

{пытаемся считать первый из доступных форматов}

FormatID:= EnumClipboardFormats(0);

{пытаемся считать остальные форматы}

while (FormatID<>0) do

Begin

{получаем имя формата буфера обмена; при этом будет возвращено имя

зарегистрированного, а не предопределенного формата}

Len:= GetClipboardFormatName (FormatID, FormatName,255);

{если длина равна нулю, то это предопределенный формат}

if Len = 0 then

ListBoxl.Items.Add(PredefinedClipboardNames[FormatID]+

‘(Предопределенный)'+

'[' + IntToStr(FormatID)+ ']')

Else

{иначе это зарегистрированное имя формата}

ListBoxl.Items.Add(FormatName+' [' + IntToStr(FormatID) + ‘]’);

{получаем ID следующего формата буфера обмена}

FormatID:=EnumClipboardFormats(FormatID);

end;

{обязательно закрываем буфер}

CloseClipboard;

end;

 

 

Задание для выполнения к части 3 лабораторной работы

Для приведенного примера изучите текст основной процедуры, разработайте форму и выполните соответствующее приложение.

 

Содержание отчета по лабораторной работе

Требования к содержанию отчета соответствуют требованиям к отчету в лабораторной работе № 1.

Лабораторная работа № 4



Поделиться:


Последнее изменение этой страницы: 2017-02-06; просмотров: 631; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.223.172.243 (0.009 с.)