Копирование потока компонент в буфер обмена

Советы » Буфер обмена » Копирование потока компонент в буфер обмена

{ 
  Clipboard has  methods  GetComponent and SetComponent but we need 
  to stream multiple components to the clipboard to include copy paste type 
  of feature. 

  Die Zwischenablage hat die Methoden GetComponent and SetComponent 
  aber wir wollen mehrere Komponenten in die 
  Zwischenablage speichern und wieder auslesen. 
}


 procedure

CopyStreamToClipboard(fmt: Cardinal; S: TStream); var

hMem: THandle; pMem: Pointer; begin

S.Position := 0; hMem := GlobalAlloc(GHND or

GMEM_DDESHARE, S.Size); if

hMem <> 0 then

begin

pMem := GlobalLock(hMem); if

pMem <> nil

then

begin

S.Read

(pMem^, S.Size); S.Position := 0; GlobalUnlock(hMem); Clipboard.Open; try

Clipboard.SetAsHandle(fmt, hMem); finally

Clipboard.Close; end

; end

{ If } else

begin

GlobalFree(hMem); OutOfMemoryError; end

; end

{ If } else

OutOfMemoryError; end

; { CopyStreamToClipboard } procedure

CopyStreamFromClipboard(fmt: Cardinal; S: TStream); var

hMem: THandle; pMem: Pointer; begin

hMem := Clipboard.GetAsHandle(fmt); if

hMem <> 0 then

begin

pMem := GlobalLock(hMem); if

pMem <> nil

then

begin

S.Write

(pMem^, GlobalSize(hMem)); S.Position := 0; GlobalUnlock(hMem); end

{ If } else

raise

Exception.Create('CopyStreamFromClipboard: could not lock global handle ' + 'obtained from clipboard!'); end

; { If } end

; { CopyStreamFromClipboard }

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com