Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как программно изменить фон рабочего стола?


Irinka ©   (2005-08-03 10:58:00) 

Как программно изменить фон рабочего стола? Хотелось бы взять картинку из image.


Irinka   (2005-08-29 05:47:00) [1]

Все решила гораздо проще: оставила свой код обновления рабочего стола, затем сначала выключила, а за тем включила ActiveDesktop и у меня тут же обновилась картинка на рабочем столе :-)


Eraser   (2005-08-04 15:27:00) [2]

Irinka ©   (04.08.05 14:37) [8]

с jpg, а нет способа сделать фоном рабочего стола jpg файл?


Для этого перед помещением картинки на раб. стол её нужно преобразовать в bmp.
см. TJPEGImage из модуля Jpeg.


Irinka   (2005-08-04 14:48:00) [3]

А точнее любой (bmp или jpg) файл?


Irinka   (2005-08-04 14:37:00) [4]

с jpg, а нет способа сделать фоном рабочего стола jpg файл?


Eraser   (2005-08-04 13:39:00) [5]

Irinka ©   (04.08.05 05:09) [6]

А вы случайно не jpg файлы пытаетесь поместить на рабочий стол?
Пример работает только для bmp.


Irinka   (2005-08-04 05:09:00) [6]

Я это делаю в windows 2000, а вы?


Eraser   (2005-08-03 14:51:00) [7]

Irinka ©   (03.08.05 14:44) [4]

Всё прекрасно обновляется, только проверил:
procedure TForm1.Button1Click(Sender: TObject);
var
 Wallpaper : string;
begin
 if OpenDialog1.Execute then
 begin
   Wallpaper := OpenDialog1.FileName;
   SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, PChar(Wallpaper), SPIF_SENDCHANGE)
 end;
end;


Прибавь сюда ещё
uses Registry

var
Reg: TRegIniFile;
begin

Reg := TRegIniFile.Create('Control Panel');
Reg.WriteString('desktop', 'Wallpaper', 'c:\windows\Установка.jpg');
Reg.WriteString('desktop', 'TileWallpaper', '0');
Reg.Free;


Irinka   (2005-08-03 14:44:00) [8]

Втом-то и дело, что не обновляется картинка сразу. Хотя когда откраваешь свойства рабочего стола, нужная картинка на месте, а экран не перерисовался. Как сделать чтобы он сразу перерисовывался.


Eraser   (2005-08-03 14:29:00) [9]

Irinka ©   (03.08.05 14:21) [2]
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE);


;-)

___
uses Registry

var
Reg: TRegIniFile;
begin

Reg := TRegIniFile.Create('Control Panel');
Reg.WriteString('desktop', 'Wallpaper', 'c:\windows\Установка.jpg');
Reg.WriteString('desktop', 'TileWallpaper', '0');
Reg.Free;


++++++++++++++++

var Wallpaper : string;
begin
Wallpaper := 'C:\windows\ACD Wallpaper.bmp';
SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, PChar(Wallpaper), SPIF_SENDCHANGE)
end;


Думаю мысль понятна? )


Irinka   (2005-08-03 14:21:00) [10]

спасибо, Eraser , но этот метод меняет картинку только на время, т.е. при перемещении окна фон остается прежним. :-(
Однако, я нашла способ действительно поменять картинку рабочего стола:

uses Registry

var
Reg: TRegIniFile;
begin

 Reg := TRegIniFile.Create('Control Panel');
Reg.WriteString('desktop', 'Wallpaper', 'c:\windows\Установка.jpg');
 Reg.WriteString('desktop', 'TileWallpaper', '0');
 Reg.Free;
 SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE);

Только в этом случае возникает другой вопрос: Как немедленно перерисовать DeskTop? (Как и какое сообщение нужно послать, чтобы система знала, что необходимо обновить картинку рабочего стола?)


Eraser   (2005-08-03 12:10:00) [11]

Irinka ©   (03.08.05 10:58)

var Wallpaper : string;
begin
 Wallpaper := 'C:\windows\ACD Wallpaper.bmp';
 SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, PChar(Wallpaper), SPIF_SENDCHANGE)
end;


Как установить обои в формате jpeg.
SystemParametersInfo только для bmp.

uses
 ComObj, ShlObj;

procedure ChangeActiveWallpaper;
const
 CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var
 ActiveDesktop: IActiveDesktop;
begin
 ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
 ActiveDesktop.SetWallpaper('c:\windows\forest.jpg', 0);
 ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо