Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как копировать и вставлять Bitmap через буфер обмена

Delphi , ОС и Железо , Буфер обмена

Как копировать и вставлять Bitmap через буфер обмена


function CopyClipToBuf(DC: HDC; Left, Top,
           Width, Height: Integer;  Rop: LongInt;
           var CopyDC: HDC;
           var CopyBitmap: HBitmap): Boolean;

var
  TempBitmap: HBitmap;

begin
  Result := False;
  CopyDC := 0;
  CopyBitmap := 0;
  if DC <> 0 then
    begin
      CopyDC := CreateCompatibleDC(DC);
      if CopyDC <> 0 then
        begin
          CopyBitmap := CreateCompatibleBitmap(DC,
                          Width, Height);
          if CopyBitmap <> 0 then
            begin
              TempBitmap := CopyBitmap;
              CopyBitmap := SelectObject(CopyDC,
                              CopyBitmap);
              Result := BitBlt(CopyDC, 0, 0,
                          Width, Height, DC,
                          Left, Top, Rop);
              CopyBitmap := TempBitmap;
            end;
        end;
    end;
end;

function CopyBufToClip(DC: HDC; var CopyDC: HDC;
           var CopyBitmap: HBitmap; 
           Left, Top, Width, Height: Integer;
           Rop: LongInt; DeleteObjects: Boolean): Boolean;

var
  TempBitmap: HBitmap;

begin
  Result := False;
  if (DC <> 0) and
     (CopyDC <> 0) and
     (CopyBitmap <> 0) then
    begin
      TempBitmap := CopyBitmap;
      CopyBitmap := SelectObject(DC, CopyBitmap);
      Result := BitBlt(DC, Left, Top,
                  Width, Height, CopyDC,
                  0, 0, Rop);
      CopyBitmap := TempBitmap;
      if DeleteObjects then
        begin
          DeleteDC(CopyDC);
          DeleteObject(CopyBitmap);
        end;
    end;
end;


Функции CopyClipToBuf и CopyBufToClip используются для копирования региона битмапа из одного контекста устройства (DC) в другой, используя API Windows.

Функция CopyClipToBuf принимает DC, прямоугольник и код ROP в качестве входных параметров. Она создает временный DC и битмап, выбирает битмап в временном DC и использует BitBlt для копирования указанного региона из оригинального DC в временный битмап. Копированный регион затем возвращается в переменной CopyBitmap.

Функция CopyBufToClip принимает DC, временный DC, временный битмап и прямоугольник в качестве входных параметров. Она выбирает временный битмап в целевом DC, использует BitBlt для копирования указанного региона из временного битмапа в целевой DC и затем возвращает результат.

Вот пример использования этих функций для копирования битмапа из одного DC в другой:

procedure CopyBitmapFromDC(DC1: HDC; DC2: HDC; x, y, w, h: Integer; Rop: LongInt);
var
  CopyDC: HDC;
  CopyBitmap: HBitmap;
begin
  CopyClipToBuf(DC1, 0, 0, w, h, Rop, CopyDC, CopyBitmap);
  CopyBufToClip(DC2, CopyDC, CopyBitmap, x, y, w, h, Rop, True);
end;

В этом примере процедура CopyBitmapFromDC принимает источник DC, целевой DC и координаты региона для копирования в качестве входных параметров. Она использует CopyClipToBuf для создания временного битмапа указанного региона из источника DC, а затем использует CopyBufToClip для копирования этого региона в целевой DC.

Обратите внимание: функция CopyClipToBuf не действительно кладет скопированный битмап на обойму. Если вы хотите положить битмап на обойму, вам нужно использовать другой набор функций, такие как OpenClipboard, SetClipboardData и CloseClipboard.

Описание алгоритма копирования и вставки Bitmap-изображения через буфер обмена с помощью функций CopyClipToBuf и CopyBufToClip на языке Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Буфер обмена ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:27:56/0.0057728290557861/1