delphi中如何实现QQ中的截图并实现拉伸放大移动的功能

解决方案 »

  1.   

    你按下截图按钮的时候,其实看到的不是真正的桌面了,是程序把桌面的图片截下来画在一个全屏的窗口上.
    我写个小程序给你参考一下。
    unit unMainFrm;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;type
      TScreenCanvas = class(TCanvas)
      protected
        procedure CreateHandle; override;
      public
        destructor Destroy; override;
      end;  TForm2 = class(TForm)
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
        procedure FormCreate(Sender: TObject);
        procedure FormPaint(Sender: TObject);
        procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
      private
        { Private declarations }
        FBitMap: TBitmap;
        FScreenCanvas: TScreenCanvas;
        FDrawEnable: Boolean;
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementation{$R *.dfm}procedure TForm2.FormCreate(Sender: TObject);
    begin
      FBitMap := TBitmap.Create;
      with FBitMap do
      begin
        Width := 1024;
        Height := 768;
      end;
      FScreenCanvas := TScreenCanvas.Create;
      FBitMap.Canvas.CopyRect(Rect(0,0,1024,768), FScreenCanvas, Rect(0,0,1024,768));
    end;procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if Key = VK_ESCAPE then
        Application.Terminate;
      if Key = VK_CONTROL then
      begin
        Canvas.FillRect(Canvas.ClipRect);
        Invalidate;
      end;
    end;procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      FDrawEnable := True;
      Randomize;
      Canvas.Brush.Color := Random($FFFFFF + 1);
      Ellipse(Canvas.Handle, X - 5, Y - 5, X + 5, Y + 5);
    end;procedure TForm2.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if FDrawEnable then
      begin
        Ellipse(Canvas.Handle, X - 5, Y - 5, X + 5, Y + 5);
      end;
    end;procedure TForm2.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      FDrawEnable := False;
    end;procedure TForm2.FormPaint(Sender: TObject);
    begin
      Canvas.Draw(0, 0, FBitMap);
    end;{ TScreenCanvas }procedure TScreenCanvas.CreateHandle;
    begin
      inherited;
      Handle := GetDC(0);
    end;destructor TScreenCanvas.Destroy;
    begin
      ReleaseDC(Handle, 0);
      inherited;
    end;end.你改下单元名和窗体的名字就可以用了.
    TScreenCanvas是用来获取桌面图像的类.
    只要掌握CopyRect函数就没什么问题了,然后记录几个鼠标的点击位置就可以把图给截出来.图片的拉伸移动也是CopyRect函数搞的