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

Буфер обмена имеет методы GetComponent и SetComponent, но нам нужно

для потоковой передачи нескольких компонентов в буфер обмена, чтобы включить тип вставки копирования

функции.

Code:

 

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 }

 

 


  

Code:

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 }

 

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

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

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

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


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