Delphi. Учимся на примерах | страница 59
как размеры экрана
>BMP1.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
>SetWallpaper('с:\1.bmp', False); //назначаем снимок, как фон
>Repaint; //обновляем
Здесь мы делаем копию экрана, сохраняем ее в файл и, вызывая процедуру SetWallPaper, назначаем в качестве фона Рабочего стола.
Шутка №6 — выбор фона случайным образом
Раз уж мы написали процедуру, которая устанавливает фоновый рисунок, почему бы не использовать ее в нашей следующей шутке?
Шестая шутка будет заключаться в том, чтобы выбрать случайным образом рисунок из каталога Windows и сделать его фоновым:
>endval:= Random(10) + 5; //для случайности выбора рисунка
>//ищем все файлы с расширением *.bmp в каталоге Windows
>Finds:= FindFirst('С:\Windows\*.bmp', faAnyFile, fn);
>Finds:= Random(2); //случайное число, 0 или 1
>//если выпала 1, то устанавливаем первый попавшийся рисунок
>if Finds = 1 then SetWallpaper(fn.Name, False);
>if Finds = 0 then begin //иначе…
> for i:=1 to endval do begin
> Finds:= FindNext(fn); // …ищем другие рисунки
> //выбираем любой другой рисунок и делаем его фоновым
> if i = endval – 3 then SetWallpaper(fn.Name, False);
> end;
>end;
>FindClose(fn); //завершаем поиск
Здесь мы перебираем все рисунки в каталоге Windows и случайным образом выбираем один из них в качестве фонового. Затем мы устанавливаем фон с помощью ранее созданной процедуры SetWallpaper.
Шутка №7 — выключение монитора
Седьмая шутка будет выключать монитор. Для этого достаточно написать одну строку кода:
>SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1);
Шутка №8 — сообщение об ошибке, содержащее "мусор"
Восьмая шутка будет выводить сообщение об ошибке, но не простое, а содержащее огромное количество случайных чисел. Код этой шутки:
>for i:=1 to 200 do begin
> case i of
> //после каждого 25-го числа – перенос на новую строку
> 25,50,75,100,125,150,175,199: err_str:= err_str + #13#10;
> end;
> //текст "ошибки"
> err_str:= err_str + IntToStr(Random(99999));
>end;
>MessageDlg(errstr, mtError, [mbOk], 0); //выводим сообщение
В цикле от 1 до 200 выбирается случайное число от 0 до 99999. Все числа преобразовываются к символьному виду и добавляются к строковой переменной errstr. На каждом 25-м числе происходит перенос строки. В результате выдается примерно такое сообщение об "ошибке" как на рис. 14.1.