// Для копирования изображения, находящегося в клиентской части// формы есть метод GetFormImage. Для копирования любого// прямоугольника экрана можно воспользоваться функциями GDI.// Копирование произвольной прямоугольной области экранаFunction CaptureScreenRect( ARect: TRect ): TBitmap;
var
ScreenDC: HDC;
begin
Result := TBitmap.Create;
with Result, ARect dobegin
Width := Right - Left;
Height := Bottom - Top;
// получаем для экрана контекст устройства
ScreenDC := GetDC( 0 );
try// копируем оттуда прямоугольную область на канву// растрового изображения
BitBlt( Canvas.Handle, 0, 0, Width, Height, ScreenDC,
Left, Top, SRCCOPY );
finally
ReleaseDC( 0, ScreenDC );
end;
end;
end;
// Таким образом, задавая нужный прямоугольник, можно получить// изображение любой части экрана, получить изображение любого// элемента формы(кнопок , выпадающих списков и так далее).// Пример для копирования нужного элемента формы или всей формы,// включая и заголовок и рамку:Function CaptureControlImage( Control: TControl ): TBitmap;
beginwith Control doIF Parent = nilThen
Result := CaptureScreenRect( Bounds( Left, Top, Width,Height ))
ElseWith Parent.ClientToScreen( Point( Left, Top )) DO
Result := CaptureScreenRect( Bounds( X, Y, Width,Height ));
end;
Перевод контента на русский язык:
Код-набор на языке программирования Delphi демонстрирует, как поймать прямоугольную область экрана или конкретный элемент формы и сохранить ее в виде изображения. Функция CaptureScreenRect принимает объект TRect в качестве входного параметра, который определяет координаты верхнего левого и нижнего правого углов области для поймания. Функция возвращает объект TBitmap, представляющий пойманное изображение.
Разбор кода:
Функция CaptureScreenRect создает новый объект TBitmap и инициализирует его указанным прямоугольником.
Она получает контекст устройства (DC) для экрана с помощью функции GetDC, которая возвращает.handle к DC.
Она копирует указанную прямоугольную область из DC экрана на канвас битмапа с помощью функции BitBlt. Константа SRCCOPY используется для указания, что источник и целевой прямоугольники должны быть скопированы точьно.
Наконец, она освобождает.handle DC с помощью функции ReleaseDC.
Функция CaptureControlImage - это обертка вокруг CaptureScreenRect, которая принимает объект TControl в качестве входного параметра (например, кнопку или комбо-бокс). Она проверяет, является ли родительский элемент nil, что означает, что контрол не содержится в другом контроле. Если это так, она вызывает CaptureScreenRect с координатами контрола. В противном случае она использует метод ClientToScreen для преобразования координат контрола из клиентского пространства в экранный и затем вызывает CaptureScreenRect с конвертированными координатами.
Этот код может использоваться для поймания изображений различных частей экрана или конкретных элементов формы, что может быть полезно для задач, таких как скриншотирование или обработка изображений.
Альтернативное решение - использовать функции Windows API, такие как GetDC и BitBlt, напрямую без создания обертки-функции. Например:
Также можно использовать компонент TScreenCapture из VCL, который предоставляет простой способ поймать экран.
Копирование экрана или отдельных элементов форм в программе на Delphi выполняется с помощью метода GetFormImage для копирования изображения из клиентской части формы и функций GDI для копирования произвольной прямоугольной области экрана.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.