|
Класс TClipboard
Класс TClipboard
предоставляет программисту интерфейс с буфером (папкой)
обмена (Clipboard) Windows. При
включении в проект модуля CLIPBRD.PAS глобальный объект
clipboard создается автоматически
и доступен приложению в течение всего времени его работы.
Методы открытия и закрытия буфера обмена:
procedure Open; procedure
Close;
вызываются во всех остальных методах
TClipboard, поэтому программист
редко нуждается в обращении к ним. В объекте ведется
счетчик числа обращений к этим функциям, так что соответствующие
функции API Windows вызываются только при первом открытии
и последнем закрытии.
Очистка содержимого буфера (для всех
форматов) производится вызовом метода:
procedure Clear;
О доступных форматах можно узнать,
пользуясь следующими свойствами и методами:
- property FormatCount: Integer;
Содержит число форматов в буфере на
данный момент.
- property Formats[Index: Integer]:
Word;
Содержит их полный список.
- function HasFormat(Format:
Word): Boolean.
Проверяет, содержится ли в данный момент
формат Format.
Волею разработчиков различаются способы
обмена графической и текстовой информацией через буфер
обмена. Рассмотрим их независимо.
Через вызов метода
procedure Assign(Source:
TPersistent);
в буфер обмена помешаются данные классов
TGraphic, точнее, его потомков
— классов TBitmap (формат CF_BITMAP)
и TMetafile (CF_ENHMETAFILE),
а также данные класса TPicture.
Данные класса Ticon не имеют
своего формата и с классом Tclipboard
несовместимы.
Допустимо и обратное: в Tclipboard
есть специальные (скрытые) методы для присваивания содержимого
объектам классов TPicture, TBitmap и
TMetafile. Допустимы выражения вида:
MyImage.Picture.Assign(Clipboard);
Clipboard.Assign(MyImage.Picture);
Для работы с текстом предназначены
методы:
- function GetTextBuf(Buffer:
PChar; BufSize: Integer): Integer;
Читает текст из буфера обмена в буфер
Buffer, длина которого ограничена
значением Bufsize. Функция возвращает
истинную длину прочитанного текста.
- procedure SetTextBuf(Buffer:
PChar);
Помещает текст из Buffer
в буфер обмена в формате CF_TEXT.
Впрочем, можно поступить проще. Свойство
property AsText:
string;
соответствует содержимому буфера обмена
в текстовом формате CF_TEXT (приведенному
к типу string). При отсутствии
в буфере данных этого формата возвращается пустая строка.
Методы:
- function GetAsHandle(Format: Word):
THandle;
- procedure SetAsHandle(Format: Word;
Value: THandle);
соответственно читают и пишут данные
в буфер в заданном формате Format.
При чтении возвращается дескриптор находящихся в буфере
данных (или 0 при отсутствии данных). Для дальнейшего
использования эти данные должны быть скопированы. При
записи данные, передаваемые в параметре value,
в дальнейшем должны быть уничтожены системой (а не программой
пользователя).
Два метода предназначены для обмена
компонентами через буфер обмена (в специально зарегистрированном
формате CF_COMPONENT):
function GetComponent(Owner,
Parent: TComponent): TComponent;
procedure SetComponent(Component:
TComponent);
Они используются составными частями
среды Delphi.
|