⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 capture.pas

📁 该控件用于window截屏
💻 PAS
字号:
{*********************************************************************}
{  Component of Capture                                               }
{  Copyright (C) 2004 by                                              }
{  Xi'an Electronic Engineering Research Institute(XEERI)             }
{  Version 1.0                                                        }
{  Write By Qixh                                                      }
{*********************************************************************}
unit Capture;

interface

uses
  windows,ExtCtrls,StrUtils,JPEG, ComCtrls,graphics, SysUtils,shlobj,Classes,Forms;
type
  TCapture = class(TComponent)
  private
    FSavePath:String;
    FFileName:String;
    FX0,FY0,FX1,FY1:integer;
    FPixelFormat:TPixelFormat;
    procedure SetFold(SavePath:string);
    procedure SetFileName(FileName:string);
    procedure SetX0(const Value: integer);
    procedure SetX1(const Value: integer);
    procedure SetY0(const Value: integer);
    procedure SetY1(const Value: integer);
    procedure SetPixelFormat(const Value: TPixelFormat);
    { Private declarations }
  protected
    { Protected declarations }
  public
    BMPToJPGZIPRate:integer;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Capture;
    { Public declarations }
  published
    property SavePath:string read FSavePath write SetFold;
    property FileName:string read FFileName write SetFileName;
    Property X0:integer read FX0 write SetX0;
    Property Y0:integer read FY0 write SetY0;
    Property X1:integer read FX1 write SetX1;
    Property Y1:integer read FY1 write SetY1;
    property PixelFormat:TPixelFormat read FPixelFormat write SetPixelFormat;
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('QixhComponent', [TCapture]);
end;

{ TCapture }
procedure TCapture.SetFold(SavePath:string);
begin
  if SavePath='' then SavePath:='C:\';
  if FSavePath=SavePath then exit;
  FSavePath:=SavePath;
end;

procedure TCapture.SetFileName(FileName:string);
begin
  if FileName='' then FileName:='Screen.JPG';
  if FFileName=FileName then exit;
  FFileName:=FileName;
end;

constructor TCapture.Create(AOwner: TComponent);
begin
  inherited;
  FSavePath:='C:\';
  FFileName:='Screen.JPG';
  FX0:=0;
  FY0:=0;
  FX1:=Screen.Width;
  FY1:=Screen.Height;
  FPixelFormat:= pf24bit;
  BMPToJPGZIPRate:=50;
end;

destructor TCapture.Destroy;
begin
  inherited;
end;

procedure TCapture.Capture;
var
  ScreenDC:HDC;
  newbitmap:TBitmap;
  newJPEG : TJPEGImage;
  SS:string;
begin
  newbitmap:=tbitmap.Create;
  newbitmap.PixelFormat:=FPixelFormat;
  try
    newbitmap.Width:=abs(FX1-FX0);
    newbitmap.Height:=abs(FY1-FY0);
    ScreenDC:=GetDC(0);
    try
     bitblt(newBitmap.Canvas.Handle,0,0,FX1-FX0,
            FY1-FY0,screendc,FX0,FY0,srccopy);
    finally
      releasedc(0,screendc);
    end;
    ss:=FSavePath;
    if not AnsiEndsText('\',ss) then ss:=ss+'\';
    if not DirectoryExists(ss) then
    MKdir(ss);

    if AnsiEndsText('bmp',FFileName) then
      newbitmap.SaveToFile(ss+FFileName);
    if AnsiEndsText('jpg',FFileName) then
    begin
      newJPEG:=TJPEGImage.Create;
      with newJPEG do
      begin
        assign(newbitmap);
        CompressionQuality:=BMPToJPGZIPRate; //压缩比例
        Compress;
        SaveToFile(ss+FFileName);
        Free;
      end;
    end;
  finally
    newbitmap.Free;
  end;
end;

procedure TCapture.SetX0(const Value: integer);
begin
  FX0 := Value;
end;

procedure TCapture.SetX1(const Value: integer);
begin
  FX1 := Value;
end;

procedure TCapture.SetY0(const Value: integer);
begin
  FY0 := Value;
end;

procedure TCapture.SetY1(const Value: integer);
begin
  FY1 := Value;
end;

procedure TCapture.SetPixelFormat(const Value: TPixelFormat);
begin
  FPixelFormat := Value;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -