Создать объект TMemoryStream и поместить в clipboard
Создать объект TMemoryStream и поместить в clipboard
Создать объект TMemoryStream, эаполнить его и поместить в clipboard Сперва вы должны зарегистрировать свой собственный формат данных для clipboard с помощью функции RegisterClipboardFormat(): CF_MYFORMAT := RegisterClipboardFormat('My Format Description'); Далее вы должны выполнить эти шаги : 1. Создать поток (memory stream) и записать туда данные. 2. Создать глобальный буфер в памяти и скопировать поток туда. 3. Вызвать Clipboard.SetAsHandle(), чтобы поместить буфер в clipboard. Пример: var hbuf : THandle; bufptr : Pointer; mstream : TMemoryStream; begin mstream := TMemoryStream.Create; try {-- Write your data to the stream. --} hbuf := GlobalAlloc(GMEM_MOVEABLE, mstream.size); try bufptr := GlobalLock(hbuf); try Move(mstream.Memory^, bufptr^, mstream.size); Clipboard.SetAsHandle(CF_MYFORMAT, hbuf); finally GlobalUnlock(hbuf); end; except GlobalFree(hbuf); raise; end; finally mstream.Free; end; end; ВНИМАНИЕ: Не уничтожайте буфер, созданный с GlobalAlloc(). Поскольку вы поместили его в clipboard, это уже дело clipboard'а его уничтожить. Опять же, получая буфер из clipboard, не уничтожайте этот буфер -- просто сделайте копию содержимого. Для обратного получения потока и данных, сделайте что-нибудь вроде этого: var hbuf : THandle; bufptr : Pointer; mstream : TMemoryStream; begin hbuf := Clipboard.GetAsHandle(CF_MYFORMAT); if hbuf <> 0 then begin bufptr := GlobalLock(hbuf); if bufptr <> nil then begin try mstream := TMemoryStream.Create; try mstream.WriteBuffer(bufptr^, GlobalSize(hbuf)); mstream.Position := 0; {-- Read your data from the stream. --} finally mstream.Free; end; finally GlobalUnlock(hbuf); end; end; end; end;