Чтение онлайн

на главную - закладки

Жанры

Шрифт:

Таким образом, для передачи данных (строки) записываем передаваемую строку в текстовое поле первой формы и нажимаем кнопку Отправить. Результат работы приложений можно увидеть на рис. 8.1.

Рис. 8.1. Вид приложений посылки и получения строки

Необходимо добавить, что передача данных посредством сообщения WM_COPYDATA является удобным и простым способом. Но WMCOPYDATA можно передавать только функцией SendMessage, и это является существенным недостатком такого метода. SendMessage «замораживает» работу приложения-отправителя, поэтому такой способ применяется для передачи небольших объемов данных, которые не требуют сложной обработки на стороне программы-приемника. К тому же на использование WMCOPYDATA налагаются некоторые существенные ограничения, о которых говорилось выше.

8.2. Использование буфера обмена

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

Буфер обеспечивает простейший обмен данными между приложениями. Одно приложение помещает туда данные, другое – считывает данные из буфера. Как правило, эти действия (чтение и запись) выполняются при непосредственном участии пользователя. В использовании буфера может участвовать и одно приложение, в этом случае проходит обмен данными внутри его.

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

При помощи свойств и методов объектаСЫрЬоа^ возможно осуществление различных операций обмена или анализа хранимых данных. Для доступа к объекту буфера в разделе uses модуля, в котором выполняются операции с объектом буфера обмена, указывается модуль Clipboard.

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

...

//В разделе uses указываем модуль Clipboard

InformationClipLabel.Caption := IntToString(Clipboard.FormatCount);

Буфер обмена поддерживает самые разнообразные типы данных. Приведем список поименованных констант некоторых форматов.

• CF_TEXT – обычный текст (коды ANSI). Символ окончания строки – #1С и #13, окончание текста – #0.

• CF_BITMAP – рисунок ВМР-формата.

• CF_MetaFilePic – рисунок WMF-формата.

• CF_TIFF – рисунок TIFF-формата.

• CF_OEMTEXT – текст.

• CF_DIB – рисунок DIB-формата.

• CF_Wave – звук.

• CF_UniCodeText – текст (коды Unicode).

• CF_Picture – объект типа TPicture.

При необходимости можно создать и зарегистрировать свои форматы данных в дополнение к имеющимся базовым.

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

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

...

Листинг 8.3.

Отображение значений форматов буфера

procedure TFormClipboard.bnInfoCipClick(Sender: TObject);

var i: integer;

begin

ListBoxInfo.Clear;

for i := 0 to Clipboard.FormatCount – 1 do

ListBoxInfo.Items.Add(IntToStr(Clipboard.Formats[i]));

end;

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

Перед доступом к данным, содержащимся объектом Clipboard, может потребоваться анализ формата данных, для этого служит метод HasFormat. Процедура HasFormat (Format: Word): Boolean используется для запроса к буферу обмена и позволяет узнать, можно ли извлечь хранимые в нем данные в заданном формате, указанном параметром Format. При положительном ответе возвращаемое значение равно True, в противном случае – False.

Как правило, различные приложения используют буфер обмена. Но в случае, когда необходимо получить монопольный доступ к буферу, приложение должно открыть его для себя в специальном режиме. Для этого вызывается метод Open, позволяющий программе получить полный (исключительный) доступ к общей области обмена. После вызова метода Open содержимое буфера не может быть изменено другими приложениями, поэтому после окончания монопольного использования приложение должно вызвать метод Close объекта Clipboard. Если открытый буфер не был закрыт с помощью метода Close, то он будет автоматически закрыт системой после завершения программы, открывшей буфер обмена.

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

Класс TClipboard используется многими другими классами и компонентами, которые поддерживают обмен данными через буфер обмена. К примеру, компоненты Memo и Edit имеют специальные методы для обмена текстовой информацией посредством буфера. Методы CopyToClipBoardH CutToClipBoard помещают текстовые данные в буфер обмена, копируя и вырезая их из источника (компонента) соответственно, а метод PasteFromClipBoard вставляет текстовый фрагмент из буфера в текстовое поле.

Поделиться:
Популярные книги

Жизнь коротка

Желязны Роджер Джозеф
Классика мировой фантастики
Фантастика:
социально-философская фантастика
научная фантастика
боевая фантастика
космическая фантастика
7.33
рейтинг книги
Жизнь коротка

Я все еще не царь. Книга XXVI

Дрейк Сириус
26. Дорогой барон!
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Я все еще не царь. Книга XXVI

Матабар III

Клеванский Кирилл Сергеевич
3. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар III

Путь

Yagger Егор
Фантастика:
космическая фантастика
4.25
рейтинг книги
Путь

Лекарь Империи 10

Карелин Сергей Витальевич
10. Лекарь Империи
Фантастика:
городское фэнтези
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Лекарь Империи 10

Почем цветочек аленький?

Луганцева Татьяна Игоревна
Женщина-цунами
Детективы:
иронические детективы
7.88
рейтинг книги
Почем цветочек аленький?

Тринадцатый IV

NikL
4. Видящий смерть
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Тринадцатый IV

Товарищ "Чума" 6

lanpirot
6. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Товарищ Чума 6

Кондотьер

Листратов Валерий
7. Ушедший Род
Фантастика:
фэнтези
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Кондотьер

Орден Архитекторов 9

Винокуров Юрий
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Орден Архитекторов 9

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Черный Маг Императора 26

Герда Александр
26. Черный маг императора
Фантастика:
аниме
сказочная фантастика
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Черный Маг Императора 26

На границе тучи ходят хмуро...

Кулаков Алексей Иванович
1. Александр Агренев
Фантастика:
альтернативная история
9.28
рейтинг книги
На границе тучи ходят хмуро...

Древесный маг Орловского княжества 4

Павлов Игорь Васильевич
4. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 4