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