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

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

Как изменить фоновую картинку на рабочем столе.


Страницы:   1 2

Yandexman ©   (2005-06-01 12:53:00) 

Тема была незаслуженно закрыта, поэтому извиняюсь за открытие новой.
вот код программы, совместил 3 и 8, но от этого картинка не менятся!
procedure SetWallpaper(sWallpaperBMPPath: string; bTile: boolean);
var
 reg: TRegistry;
begin
 reg := TRegistry.Create;
 with reg do
 begin
   RootKey:=HKEY_CURRENT_USER;
   OpenKey('Control Panel\Desktop',True);
   WriteString('Wallpaper',sWallpaperBMPPath);
 end;
 reg.Free;
SystemParametersInfo(spi_SetDeskWallpaper, 0, PChar(sWallpaperBMPPath) , spif_UpdateIniFile);
end;


Yandexman   (2005-06-23 06:47:00) [1]


> Придется разбивать на кадры (с помощью какого-нибудь компонента,
> возможно, из RxLib) и по таймеру менять!

Так и геморой заработать можно!Ведь мало разбить еще и конвертить в битмап нужно.


Zeqfreed   (2005-06-08 17:14:00) [2]

Yandexman   (08.06.05 17:08) [27]
Придется разбивать на кадры (с помощью какого-нибудь компонента, возможно, из RxLib) и по таймеру менять!


Yandexman   (2005-06-08 17:08:00) [3]

А как же с GIF? ведь XP держит анимированные картинки!


Zeqfreed   (2005-06-08 15:02:00) [4]

Преверено  на WinXP Pro SP 2
Пример использования:


Блин, почему-то у меня из клиента Piter'ского не отправляются посты, а при копировании забыл сменить раскладку :)


Zeqfreed   (2005-06-08 15:00:00) [5]

unit setwall;

interface

uses
Windows, SysUtils, Registry, JPEG, Graphics;

function SetWallpaper(filename : String) : boolean;

implementation

function Jpg2Bmp(const filename : String) : String;
var
jpg : TJPEGImage;
bmp : TBitmap;
windir : String;
buff : array[0..MAX_PATH - 1] of Char;
begin
Result := '';

jpg := TJPEGImage.Create;
try
 jpg.CompressionQuality := 100;
 jpg.LoadFromFile(filename);
 bmp := TBitmap.Create;
 try
  bmp.Assign(jpg);

  GetWindowsDirectory(buff, MAX_PATH);
  windir := buff;
  Result := windir + '\' + ChangeFileExt(ExtractFileName(filename), '.bmp');

  bmp.SaveToFile(Result);
 finally
  bmp.Free;
 end;  
finally
 jpg.Free;
end;
end;

function SetWallpaper(filename : String) : boolean;
var
r : TRegistry;
ext : String;
begin
Result := false;
ext := AnsiUpperCase(ExtractFileExt(filename));

if ext = '.JPG' then
 filename := jpg2bmp(filename)
else if ext '.BMP' then Exit;

r := TRegistry.Create;
try
 try
  r.RootKey := HKEY_CURRENT_USER;
  r.OpenKey('Control Panel\Desktop', false);
  r.WriteString('Wallpaper', filename);
  r.CloseKey;

  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, PChar(filename), SPIF_SENDCHANGE);

  Result := true;
 except
  MessageBeep(MB_ICONHAND);
  MessageBox(0, 'Error while accessing registry', 'SetWallpaper', MB_OK + MB_ICONWARNING);
 end;
finally
 r.Free;
end;
end;

end.


ïðîâåíî íà WinXP Pro SP 2
Ïðèìåð èñïîëüçîâàíèÿ:
SetWallpaper('C:\Images\wallpaper.jpg');


Yandexman   (2005-06-08 13:40:00) [6]


> речь шла не о заставке.

О фоне конечно, очепятался :()


Antonn   (2005-06-03 07:02:00) [7]


> Помошнички, все тут гении собрались, а заменить
> заставку на рабочем столе не могут :-[

речь шла не о заставке.


Yandexman   (2005-06-03 06:35:00) [8]


> Ну значит несудьба...

Помошнички, все тут гении собрались, а заменить заставку на рабочем столе не могут :-[


Eraser   (2005-06-02 20:46:00) [9]

Yandexman   (02.06.05 20:18) [20]

Ну значит несудьба...


Yandexman   (2005-06-02 20:18:00) [10]


> конвертни в bmp

Нифига, таже лажа.


Eraser   (2005-06-02 14:39:00) [11]

Yandexman   (02.06.05 07:40) [14]

Это из рабочей программы.


Yandexman   (2005-06-02 11:32:00) [12]

Как енто?
А как GIF и GPEG?


Antonn   (2005-06-02 10:18:00) [13]

Yandexman   (02.06.05 9:58) [16]
конвертни в bmp


Yandexman   (2005-06-02 09:58:00) [14]


> не буду ругаться, но ты пробывал это?

Только что попробовал на WinXP SP1 и WinXP SP2, картинка менятся только при перезагрузке.
Может быть подскажете в чем может быть трабла?
У всех работает а у меня нет!


Antonn   (2005-06-02 07:44:00) [15]

Yandexman   (02.06.05 7:40) [14]
не буду ругаться, но ты пробывал это?

procedure SetWallpaper(Value: string);
begin
   SystemParametersInfo(spi_SetDeskWallpaper, 0, PChar(Value) , spif_UpdateIniFile);
end;

после вызова этой процедурки, у меня на рабочем столе картинка меняется сразу, и при перезагрузке остается.


Yandexman   (2005-06-02 07:40:00) [16]


> не может не работать, т.к. работает.

Попробуй сам что пишеш, а потом утверждай


> абсолютно заслуженно, оффтоп пошел

Люди советуют, и так уверены в том что работает,что даже начинают доказывать это, хотя сами не пробовали.
Мне нужна система нажал кнопку, и мгновенно сменилась картинка, фишки с реестром и SystemParametersInfo в WIndows XP НЕ РАБОТАЮТ!Про другие OC не знаю может для Win9X и годится это.


Antonn   (2005-06-02 06:25:00) [17]


> Тема была незаслуженно закрыта

абсолютно заслуженно, оффтоп пошел...


vaxluk   (2005-06-01 20:14:00) [18]

тебе ничего не нужно переводить! Напиши просто путь к нужному файлу, и все прекрасно работает!


Eraser   (2005-06-01 19:09:00) [19]

Yandexman   (01.06.05 19:04) [10]


var
 CurFile: string;
 PCur: PChar;
...
 pcur:=pchar(curfile);
 SystemParametersInfo(SPI_SETDESKWALLPAPER,0,pcur,SPIF_SENDCHANGE);


не может не работать, т.к. работает.


Yandexman   (2005-06-01 19:04:00) [20]

Люди, вы сами то хоть пробовали то что советуете?
Я же сказал вам что перепробовал все предложенные варианты в ДельфиВорлд, все 6 вариантов и ни один не работает!
А в варианте vaxluk   я не знаю как String привести к PWideChar&


Страницы:   1 2

Наверх

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