Скриншоты

interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, StdCtrls, ExtCtrls, ExtCtrlsX, ComCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    HotKey1: THotKey;
    TrayIcon1: TTrayIcon;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Procedure PScreen;
implementation
 
{$R *.dfm}
Procedure PScreen;
const
  CAPTUREBLT = $40000000;
var  ScreenBM:TBitMap;
      SendJPG:TJPEGImage;
begin
 ScreenBM:=TBitMap.Create;
 SendJPG:=TJPEGImage.Create;
 ScreenBM.Width:=Screen.Width;
 ScreenBM.Height:=Screen.Height;
 BitBlt(ScreenBM.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
 GetDC(0), 0, 0, SRCCopy or CAPTUREBLT);
 SendJPG.Assign(ScreenBM);
  SendJPG.SaveToFile('d:\MyJPG.jpg');
 SendJPG.Free;
 ScreenBM.Free;
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
PScreen;
     end;
end.
Помогите доделать программу. Программа делает скриншот. Но дело в том, что в скрине сама программа отражается(ее форма). Как мне ее убрать? Второй вопрос. Программа создает скрин и сохраняет его на диск d:/ А как мне сделать чтобы оно сохраняло на форме программы в image, а уж затем можно было бы сохранить, куда мне надо?
4 ответа

1. Нельзя постоянно вызывать GetDC(0) не освобождая его затем. 2. Вместо BitBlt используй PrintWindow. 3. Можно просто сворачивать свою форму перед копированием экрана.


дак я и сворачиваю.. в трей..но почему то на скрине оно фиксируется в середине экрана..=(


Вот попробуй пример и переделай под свои нужды. "Горячие" клавиши для копирования Ctrl-Alt-PrSreen.


ок..спасибо большое..посмотрю..=)))