Содержание материала

Для упрощения создания элемента списка форматов есть функция:

function OLEFormat(AFmtId: Word; AName, AResultName: String;

AIsLinkable: Bool): BOLEFormat;

Она заполняет структуру типа BOLEFormat переданными ей параметрами и возвращает указатель на нее. Приведенный выше фрагмент кода можно преобразовать так:

FEmbedClipFmt := RegisterClipboardFormat С Embedded Object');

FLinkClipFmt := RegisterClipboardFormat ('Link Source');

RegisterFormAsOLEDropTarget (Self,

[OLEFormat (PEmbedClipFmt, '%s', '%s', FALSE), OLEFormat (PLinkClipFmt, '%s', '%s', TRUE)]) ;

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

procedure RegisterFormAsOLEDropTgt(Form: TForm);

procedure SetFormOLEDropFormats(Form: TForm;

const Fmts: array of BOLEFormat) ;

В паре они делают то же, что и RegisterFormAsOLEDropTarget. Для очистки списка форматов можно воспользоваться процедурой:

procedure ClearForrnOLEDropFormats(Form: TForm);

"Перетаскивание" объектов OLE

Форма может принимать данные, направляемые серверами OLE при помощи интерфейса Drag&Drop. Обратите внимание, что этот случай представляет собой исключение из общего правила, разрешающего "перетаскивать" объекты только в пределах одной формы.

Возможность работы Drag&Drop с OLE реализована, например, в приложениях из пакета Microsoft Office, однако, далеко не все серверы OLE 2.0 ее поддерживают.

Для получения данных путем "перетаскивания" нужно, во-первых, зарегистрировать форму при помощи ReisterFormAsOLEDropTarget. Во-вторых, для формы нужно создать обработчик события OnDragDrop (будьте внимательны: именно для формы, а не для контейнера!). При "перетаскивании" данных OLE этот обработчик получает в параметре Source объект специального класса TOLEDropNotify:

 

Code:

TOLEDropNotify = class(TObject)

public

procedure Setlnfo(Form: TForm; Rect: TRect; Info: BOLEInitInfo);

property DropPorm: TForm;

property DropRect: TRect;

property DataPormat: Word;

property DataHandle: THandle;

property PInitInfo: Pointer ;

end;

  

Его свойства приведены в таблице:

@ property DropForm: TForm;       Определяет форму, в которую перемещены данные. Значение обычно равно Self.

(Ro) property DropRect: TRect;       Определяет  ПрЯМОуГОЛЬНИК,  В  КОТОрЫН

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

(Ro) property DataFormat: Word;     Определяет формат перемещенных данных. (Ro) property DataHandle: THandle;   Содержит дескриптор перемещенных данных.

(Ro) property pinitinfo: pointer;    Содержит указатель на структуру для инициализации.

Сброшенные данные могут как представлять объект OLE, так и иметь один из обычных форматов. Логическая взаимосвязь между тремя последними свойствами такая:

• если получен объект OLE, то в параметре DataFormat возвращается значение -1. В этом случает дескриптор DataHandle недействителен, смысл имеет только свойство PInitInfo;

• если получены данные в одном из обычных форматов, то свойство DataFormat содержит идентификатор этого формата, DataHandle — дескриптор соответствующих данных, a PInitInfo имеет значение nil.

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить