Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
os5.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
494.08 Кб
Скачать

1. Открытие Clipboard

Вопрос (

Открытие Clipboard выполняется аналогично предыдущему случаю вызовом функции:

OpenClipboard().

2. Проверка наличия требуемого формата данных в Clipboard

Проверка наличия требуемого формата данных выполняется вызовом функции:

IsClipboardFormatAvailable(cf_Text),

которая возвращает True, если данные запрашиваемого формата присутствуют.

)Вопрос

3. Чтение данных из Clipboard

Вопрос (

Чтение данных, в случае успешного выполнения всех предыдущих операций, выполняется за несколько шагов:

1) Получение ссылки на блок памяти, содержащий данные требуемого формата:

HGLOBAL GHandle = GetClipboardData(cf_Text);

2) Получение адреса данного блока памяти и фиксирование его от возможных перемещений на время считывания данных:

LPTSTR GPtr = (LPTSTR)GlobalLock(GHandle);

3) Выделение локальной памяти для чтения в нее интересующих данных:

P = malloc(strlen(GPtr) + 1));

4) Копирование данных из глобальной памяти в локальную память:

strcpy(P, GPtr);

5) Разрешение перемещения глобального блока памяти:

GlobalUnlock(GHandle).

)Вопрос

4. Закрытие Clipboard

Закрытие Clipboard в случае приема данных выполняется аналогично закрытию в случае передачи данных:

CloseClipboard().

Как видно из приведенного описания, для программной реализации обмена данными через Clipboard требуется выполнения достаточно большого количества действий. При этом, реализация обмена для других, более сложных форматов, таких, например, как «графическое изображение», становится еще более сложной.

Поддержка обмена данными через Clipboard в современных средах программирования

Современные среды проектирования позволяют существенно облегчить работу программиста по реализации обмена данными.

Посмотрим, как, например, можно реализовать обмен данными через Clipboard в среде проектирования Delphi.

Среда проектирования Delphi предоставляет объект TClipboard, который включает в себя все необходимые действия для управления Clipboard.

Включение модуля Clipbrd в состав проекта, автоматически создает, открывает и делает доступным экземпляр Clipboard.

Вопрос (

При этом, компоненты TEdit и TMemo, обеспечивающие работу с текстовыми строками, а также компонент TImage, обеспечивающий работу с графическими образами, получают возможность использования своих методов работы с Clipboard.

)Вопрос

Вопрос (

Скопировать информацию в Clipboard, из компонента Memo типа TMemo, можно следующим образом:

Memo.SelectAll; выделить весь текст

Memo.CopyToClipboard; скопировать выделенный текст

возможен другой метод:

Clipboard.AsText := Memo.Text;

Вырезать текст можно следующим образом:

Memo.SelectAll; выделить весь текст

Memo.CutToClipboard; вырезать выделенный текст

Скопировать текст из Clipboard можно следующим образом:

Memo.PasteFromClipboard; или:

Memo.Text := Clipboard.AsText;

)Вопрос

Вопрос (

Перед считыванием данных из Clipboard целесообразно проверить, есть ли в Clipboard данные требуемого типа. Это можно сделать с помощью вызова метода объекта Clipboard:

Clipboard.HasFormat(cf_Text),

который вернет True, если данные в формате cf_Text есть в Clipboard.

)Вопрос

Вопрос (

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

Копирование графических данных (в формате cf_BitMap) свойства Picture компонента Image типа TImage в Clipboard:

Сlipboard.Assign(Image.Picture).

Копирование графических данных из Clipboard в компонент Image:

If Clipboard.HasFormat(cf_BitMap) Then begin

Image.Picture.Assign(Clipboard);

End;

)Вопрос

Как видно из приведенных примеров, современная среда проектирования программ берет на себя большое количество проблем, имеющих место при организации обмена данными различных форматов через Clipboard.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]