![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как программно изменить фон рабочего стола?
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;