На этом разработка формы завершена. Полученный результат должен примерно соответствовать рис. 4.1.
Рис. 4.1. Форма для создания копий экрана
Разработка программного кода
Для начала объявим все переменные, которыми будем пользоваться в программе:
var
Form1: TForm1; //главная форма
ВМР1 :Graphics.ТВitmap; //для работы с рисунками (*.bmp)
DC1: HDC;//простое поле для графики
Image1:TImage;
Самое главное событие в программе — это нажатие кнопки Сделать снимок экрана. Создадим обработчик этого события:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Visible := False;//прячем форму
Sleep(15); //пауза 15 мс
BMP1:= Graphics.TBitmap.Create;
//задаем размеры рисунка такие же как размеры экрана
ВМР1.Height:= Screen.Height;
ВМР1.Width:= Screen.Width;
DC1:=GetDC(0);
//Делаем копию экрана
BitBlt(BMP1.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DC1, 0, 0, SRCCOPY);
Form1.Visible:= True;//восстанавливаем окно программы
Image1:= TImage.Create(nil);
BMP1.IgnorePalette:= True;
Image1.Picture.Assign(BMP1);
ВМР1.SaveToFile('с:\1.bmp'); //сохраняем снимок в файл 1.bmp на диске С:\
end;
Перед тем как сделать снимок экрана, мы прячем окно программы, делаем паузу в 15 мс и задаем размеры будущего рисунка. После этого делаем снимок экрана и сохраняем его в файл 1.bmp, который находится на диске C:\.
По нажатию кнопки Показать рисунок выполняем следующий код:
procedure TForm1.Button4Click(Sender: TObject);
begin
Screen1.Show; // делаем рисунок видимым
if FileExists('с:\1.bmp') then //если рисунок существует,
Screen1.Picture.LoadFromFile('c:\1.bmp'); //загружаем его
end;
По нажатию кнопки Очистить мы должны скрывать рисунок и удалять его с диска:
procedure TForm1.Button3Click(sender: TObject);
begin
//удаляем рисунок с диска
if FileExists('с:\1.bmp') then DeleteFile('С:\1.bmp');
Screen1.Hide; //скрываем рисунок
end;
Для сохранения рисунка будем использовать диалоговое окно. Код нажатия кнопки Сохранить:
procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then
BMP1.SaveToFile(SaveDialog1.FileName)//сохраняем рисунок
else ShowMessage('Файл не был сохранен!');
end;
Здесь мы проверяем, выбрал ли пользователь место сохранения файла. Если да, то сохраняем рисунок по указанному расположению.
Откомпилируем и запустим программу на выполнение (результат — на рис. 4.2).
Рис. 4.2. Программа ScreenShot в действии
Полный исходный код модуля
Полный исходный код модуля программы ScreenShot представлен в листинге 4.1.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Registry, WinProcs, jpeg;
type TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Screen1: TImage;
SaveDialog1: TSaveDialog;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1; //главная форма
ВМР1: Graphics.TBitmap; //для работы с рисунками (* .bmp)
DC1: HDC; //простое поле для графики
Image1: TImage;
implementation
{$R *.dfm}
procedure TForm1.ButtonlClick(Sender: TObject);
begin
Form1.Visible:= False; //прячем форму
Sleep(15);//пауза 15 мс
BMP1:= Graphics.TBitmap.Create;
//задаем размеры рисунка такие же как размеры экрана
ВМР1.Height:= Screen.Height;
BMP1.Width:= Screen.Width;
DC1:= GetDC(0);
//Делаем снимок экрана
BitBlt(BMP1.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DC1, 0, 0, SRCCOPY);
Form1.Visible:= True; //восстанавливаем окно программы
Image1:= TImage.Create(nil);
BMP1.IgnorePalette:= True;
Image1.Picture.Assign(BMP1);
BMP1.SaveToFile('с:\1.bmp'); //сохраняем снимок в файл
//1.bmp на диске С:\
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then
BMP1.SaveToFile(SaveDialog1.FileName) //сохраняем рисунок
else ShowMessage('Файл не был сохранен!');
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
//удаляем рисунок с диска
if FileExists('с:\1.bmp') then DeleteFile('C:\1.bmp');
Screen1.Hide; //скрываем рисунок
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Screen1.Show; // делаем рисунок видимым
if FileExists('с:\1.bmp') then //если рисунок существует,
Screen1.Picture.LoadFromFile('с:\1.bmp');//загружаем его
end;
end.
⊚ Все файлы проекта и исполняемый файл рассмотренной программы находятся на прилагаемом к книге компакт-диске в папке Chapter04.
Глава 5