Delphi. Юзер отделался первым легким испугом

Xakep, номер #032, стр. 032-073-2


Теперь отредактируем параметры формы. Найди свойство BorderStyle в объектном инспекторе и измени его на bsNone. Это чтобы твое окно не имело обрамлений, системного меню и каких-либо кнопок. Теперь оно будет выглядеть как простой прямоугольник. Теперь растянем прямоугольник на весь экран. Для этого найди свойство WindowState и измени его на wsMaximized. Теперь программа будет растянута на весь экран.

Нажми F9 или выбери Run из меню Run, чтобы запустить прогу. После запуска весь твой экран покроет окно проги. Посмотрел? Теперь нажми Alt+F4, чтобы закрыть прогу. Как видишь, все просто и быстро. А главное - никакого напряга.

ПошКодим маленько

Теперь мы должны отобразить на экране содержимое окна до запуска программы. Для этого нам надо поймать событие "Запуск проги" и в это время запомнить содержимое экрана и перенести его на форму. Такое событие есть и называется оно OnCreate. Найди его на закладке Events и дважды щелкни по строке напротив. Delphi автоматически создаст пустую процедуру, которая будет вызываться при запуске проги. Напиши в этой процедуре код, указанный в листинге 1.

Теперь ты можешь запустить прогу, но она еще не запустится :). Сначала брось на форму компонент Image с закладки Additional. Delphi присвоит этому компоненту имя Image1.

TImage - это компонент-картинка, в которой можно рисовать. Внутри этого компонента мы будем рисовать содержимое рабочего стола до запуска проги. Выдели этот компонент и в объектном инспекторе измени свойство Аlign на alClient, чтобы картинка растянулась по всему экрану.

Ну а теперь давай подробно разберем содержимое листинга.

1. Первая строка после begin - я получаю доступ к содержимому экрана. GetDC - это API функция. Она контекст рисования, сохраняя результат в переменной ScreenDC. Что такое контекст? Чтобы не забивать тебе голову, я назову его просто - это область памяти. Так что можно сказать, что мы получили доступ к контексту рисования (области памяти) содержимого экрана с помощью переменной ScreenDC.

2. Во второй строке (Canvas:=TCanvas.Create()) я создаю объект типа TCanvas. Это объект, используемый для рисования в Delphi. В принципе, это тот же контекст рисования, просто он более удобен. TCanvas связан с контекстом рисования через свойство Handle. Вот именно через это свойство я связываю переменную Canvas.Handle с ScreenDC (контекстом рисования экрана).

3. Далее я выставляю ширину и высоту окна в размеры экрана, чтобы моя программа покрывала весь монитор.

4. Следующая строка Image1.Canvas.CopyRect(...); копирует содержимое экрана в компонент Image1.

5. После этого я освобождаю память, выделенную под переменные ScreenDC и Canvas.

Почему память освобождается по-разному? ScreenDC - это Windows API переменная типа HDC. API переменные выделяются и освобождаются по-разному. Canvas - переменная типа TСanvas и относится к библиотеке VCL (разработка Бормана). Все бормановские объекты уничтожаются как "ИмяОбъекта.Free".

Назад на стр. 032-073-1  Содержание  Вперед на стр. 032-073-3