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

Копирование экрана

Delphi , ОС и Железо , Монитор и Экран

Копирование экрана


Новая марка монохромных мониторов ViewSonic имеет в качестве символа трех пингвинов.


unit ScrnCap;

interface

uses
  WinTypes, WinProcs, Forms, Classes, Graphics, Controls;

{ Копирует прямоугольную область экрана }
function CaptureScreenRect(ARect : TRect) : TBitmap;
{ Копирование всего экрана }
function CaptureScreen : TBitmap;
{ Копирование клиентской области формы или элемента }
function CaptureClientImage(Control : TControl) : TBitmap;
{ Копирование всей формы элемента }
function CaptureControlImage(Control : TControl) : TBitmap;

implementation

function GetSystemPalette : HPalette;
var
  PaletteSize : integer;
  LogSize : integer;
  LogPalette : PLogPalette;
  DC : HDC;
  Focus : HWND;
begin
  result:=0;
  Focus:=GetFocus;
  DC:=GetDC(Focus);
  try
    PaletteSize:=GetDeviceCaps(DC, SIZEPALETTE);
    LogSize:=SizeOf(TLogPalette)+(PaletteSize-1)*SizeOf(TPaletteEntry);
    GetMem(LogPalette, LogSize);
    try
      with LogPalette^ do
      begin
        palVersion:=$0300;
        palNumEntries:=PaletteSize;
        GetSystemPaletteEntries(DC, 0, PaletteSize, palPalEntry);
      end;
      result:=CreatePalette(LogPalette^);
    finally
      FreeMem(LogPalette, LogSize);
    end;
  finally
    ReleaseDC(Focus, DC);
  end;
end;


function CaptureScreenRect(ARect : TRect) : TBitmap;
var
  ScreenDC : HDC;
begin
  Result:=TBitmap.Create;
  with result, ARect do
  begin
    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;
    Palette:=GetSystemPalette;
  end;
end;

function CaptureScreen : TBitmap;
begin
  with Screen do
    Result:=CaptureScreenRect(Rect(0,0,Width,Height));
end;

function CaptureClientImage(Control : TControl) : TBitmap;
begin
  with Control, Control.ClientOrigin do
    result:=CaptureScreenRect(Bounds(X,Y,ClientWidth,ClientHeight));
end;

function CaptureControlImage(Control : TControl) : TBitmap;
begin
  with Control do
    if Parent=nil then
      result:=CaptureScreenRect(Bounds(Left,Top,Width,Height))
    else
      with Parent.ClientToScreen(Point(Left, Top)) do
        result:=CaptureScreenRect(Bounds(X,Y,Width,Height));
end;

end.

Привет!

Вот перевод текста на русский язык:

Единица ScrnCap предлагает четыре функции для захвата изображений экрана:

function CaptureScreenRect(ARect: TRect): TBitmap;
function CaptureScreen: TBitmap;
function CaptureClientImage(Control: TControl): TBitmap;
function CaptureControlImage(Control: TControl): TBitmap;

Функции захватывают:

  1. прямоугольную область экрана (CaptureScreenRect)
  2. весь экран (CaptureScreen)
  3. клиентскую область формы или контрола (CaptureClientImage)
  4. всю форму или контроль (CaptureControlImage)

Имплементация использует Windows API для взаимодействия с графическим устройством и получения желаемого изображения.

Вот некоторые конкретные заметки о каждой функции:

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

CaptureScreenRect Захватывает прямоугольную область экрана с помощью BitBlt и возвращает ее как TBitmap.

CaptureScreen Вызывает CaptureScreenRect с прямоугольником всей области экрана (Rect(0, 0, Screen.Width, Screen.Height)).

CaptureClientImage Захватывает клиентскую область формы или контрола, вызывая CaptureScreenRect с границами клиентской области.

CaptureControlImage Захватывает всю форму или контроль. Если контроль не имеет родителя (т.е., он не находится внутри другого контрола), то захватывает rectangle контрола. В противном случае конвертирует координаты контрола в экранные координаты и вызывает CaptureScreenRect с этими координатами.

В целом, это код предлагает простой способ захвата различных частей экрана или форм изображений в приложениях Delphi.

Альтернативным решением может быть использование метода LoadFromResource битмапа для загрузки изображения из ресурсного файла. Это может быть более эффективно и удобно, чем ручное захват изображения.

В статье рассматривается разработка программы для копирования экрана на языке Pascal с использованием библиотеки WinTypes и Graphics.


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

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




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


:: Главная :: Монитор и Экран ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:12:25/0.0034360885620117/0