Один из примеров обработчиков события OnDragDrop выглядит так:
Code: |
procedure TFormI.OLEContainerlDragDropfSender, Source: TObject; X, Y: Integer); begin if Source is TOLEDropNotify then with Source as TOLEDropNotify do begin if (DataFormat = CF_TEXT) then begin Labell.Caption := StrPas(GlobalLock(DataHandle)); GlobalUnlock(DataHandle) ; GlobalFree(DataHandle) ; end else if DataFormat = Word(-l) then OLEContainerI.PInitInfo := TOLEDropNotify(Source).PInitInfo; end; end; |
Обратите внимание, что в этом примере полученную структуру PInitInfo не нужно освобождать при помощи ReleaseOLEInitInfo.
Вставка объектов OLE из буфера обмена
Вставку реализует специальный диалог, вызываемый функцией:
function PasteSpecialDlg(Form: TForm;
const Fmts: array of BOLEFormat; HelpContext: THelpContext;
var Format: Word; var Handle: THandle;
var PInitInfo: Pointer ): Boolean;
Параметры этой функции означают следующее:
Form — принимающая данные форма;
Fmts — список поддерживаемых форматов данных;
HelpContext — контекст системы помощи для диалога (в файле с расширением .HLP, связанном с приложением). Если этот параметр имеет значение 0, то кнопка Help будет отсутствовать;
Функция присваивает значения трем параметрам:
Format — выбранный пользователем формат (из доступных в диалоге);
Handle — дескриптор данных;
PInitInfo — указатель на структуру данных инициализации. Функция возвращает True, если пользователь нажал в диалоге кнопку ОК или клавишу <Enter>. Логическая взаимосвязь между значениями Format, Handle и PInitInfo такая:
• если пользователь решил присоединить или встроить имеющийся в буфере обмена объект, то в параметре Format возвращается значение -1. В этом случает дескриптор недействителен, а смысл имеет только параметр PTnitTnfo:
• если вставляются имеющиеся в буфере обмена данные одного из обычных форматов, то параметр Format содержит его идентификатор, Handle — дескриптор соответствующих данных, a PInitInfo равен nil.
Перед тем, как вызывать PasteSpecialDIg, нужно убедиться в целесообразности этого, вызвав функцию:
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!