Книга: Delphi. Учимся на примерах

Шутка №5 — назначение фона для Рабочего стола

Шутка №5 — назначение фона для Рабочего стола

Пятая шутка будет делать копию экрана, сохранять этот рисунок, а затем назначать его в качестве фона для Рабочего стола. Вначале в разделе implementation напишем процедуру SetWallpaper, которая будет устанавливать фоновый рисунок:

procedure SetWallpaper(sWallpaperBMPPath: String; bTile: boolean);
begin
 reg:= TRegistry.Create;
 reg.RootKey:= hkey_current_user;
 if reg.OpenKey('Control PanelDesktop', True) then
  reg.WriteString('Wallpaper', sWallpaperBMPPath); {ключ содержащий путь к bmp-файлу}
 //растянуть рисунок на весь экран
 reg.WriteString('TileWallpaper', '1');
 with reg do begin
  WriteString('Wallpaper', sWallpaperBMPPath);
  if bTile then begin
   WriteString('TileWallpaper', '1');
  end
  else begin
   WriteString('TileWallpaper', '0');
  end;
 end;
 reg.Free;
 SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Nil, SPIF_SENDWININICHANGE);
end;

Информацию о фоновом рисунке Рабочего стола можно найти в реестре в ветке HKEY_CURRENT_USER по пути Control PanelDesktop. Параметр, содержащий название рисунка, называется wallpaper. То есть, для того чтобы сменить "обои" нам необходимо изменить значение параметра wallpaper и оповестить систему о том, что были внесены изменения в реестр. Последняя строка самая важная — она обновляет системные настройки.

Функция SystemParametersInfo имеет следующие параметры:

• действие, которое необходимо выполнить (в нашем случае SPI_SETDESKWALLPAPER — установка обоев);

• зависит от значения первого параметра;

• в нашем случае — путь к файлу с рисунком;

• в последнем параметре указывается, что необходимо сделать по сле выполнения всех действий. В данном случае мы должны обновить настройки системы — для этого выбираем SPIF_SENDWININICHANGE.

Код шутки в обработчике события таймера имеет следующий вид:

ВМР1:= Graphics.TBitmap.Create;
//задаем размеры рисунка такие же,как размеры экрана
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, назначаем в качестве фона Рабочего стола.

Оглавление книги


Генерация: 1.057. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз