
- •5. Управление коммуникациями в ос
- •5.1. Общая характеристика коммуникаций
- •5.2. Концепции технологии Клиент-Сервер
- •5.3. Внутренние коммуникации между процессами
- •5.3.1. Неименованные каналы
- •5.3.2. Обмен сообщениями
- •5.3.3. Обмен данными через Clipboard
- •1. Подготовка данных для передачи в Clipboard;
- •1. Открытие Clipboard
- •2. Проверка наличия требуемого формата данных в Clipboard
- •3. Чтение данных из Clipboard
- •4. Закрытие Clipboard
- •5.3.4. Обмен данными по технологии dde
- •5.3.5. Обмен данными по технологии ole
- •5.3.5.1. Введение
- •5.3.5.2. Понятие документ-ориентированной среды
- •5.3.5.3. Принципы ole
- •5.3.5.4. Характеристика технологии ole
- •5.3.5.4.1. Ole реализует концепцию визуального редактирования - редактирования на месте.
- •5.3.5.4.2. Другой особенностью ole является возможность приложения предоставить ряд своих функций (например, проверку орфографии) для доступа из других приложений - ole-Automation.
- •5.3.5.4.3. Ядром ole стал способ хранения данных в составном документе.
- •5.3.5.4.4. Дополнительные возможности ole:
- •5.3.5.4.5. Иерархия средств ole
- •5.3.5.4.6. Недостатки ole
- •5.3.5.4.7. Трехуровневая адресация ole-объекта
- •5.4. Внешние коммуникации
- •5.4.1. Протоколы тср/ip
- •5.4.1.1. Определение и достоинства протокола tcp/ip
- •5.4.1.2. Архитектура tcp/ip
- •5.4.1.3. Соответствие между моделями tcp/ip и iso osi
- •5.4.2. Протокол ip
- •5.4.2.1. Структура заголовка ip-пакета
- •5.4.3. Протокол udp
- •5.4.4. Протокол tcp
- •5.4.4.1. Структура tcp-сегмента
- •5.4.4.2. Этапы tcp-сеанса
- •5.4.5. Программные средства поддержки сетей
- •5.4.5.1. Состав программных средств поддержки сетей
- •1. Почтовые ящики
- •2. Именованные каналы
- •3. Удаленные вызовы процедур
- •4. Протокол NetBios
- •5.4.5.2. Программные средства работы с сокетами
- •5.4.6. Сетевое программное обеспечение уровня приложений
- •5.4.6.1. Протокол ftp
- •5.4.6.2. Протокол smtp
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.