Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.26;
Скачать: CL | DM;

Вниз

Смена обоев на рабочем столе.   Найти похожие ветки 

 
Ugrael ©   (2004-11-12 11:46) [0]

Доброго времени суток.
Дабы разобраться хочу еаписать типовой сменщик обоев\календарь на рабочий стол.Столкнулся с такой проблемой-из тутошнего FAQ взял код по изменению обоев. Запускаю - визуально ничего не происходит, хотя в свойствах рабочего стола обои меняются.
Может где чего обновить(refresh)надо ?
у меня XP+StyleXP. Но ведь остальные проги работают ?


 
S@lik ©   (2004-11-12 11:55) [1]

вот у меня работает отлично

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.bmp", 0);
 ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;


 
-=SS=- ©   (2004-11-12 13:07) [2]

Или так

procedure ChangeWallpaper(bitmap: string);       {имя файла с изображением: *.bmp}
var pBitmap : pchar;
begin
bitmap:=bitmap+#0;
pBitmap:=@bitmap[1];
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, pBitmap, SPIF_UPDATEINIFILE);
end;


 
Ugrael ©   (2004-11-12 13:23) [3]

вариант от S@lik у меня работает, кроме одного нюанса - если я явно указываю путь к файлу. А мне надо что бы ну хотя бы через opendialog.filename. Вот тут возникает проблема - пишкт что тип string а нужен pwidechar.
уж извините за глупые вопросы ...


 
-=SS=- ©   (2004-11-12 13:26) [4]

Ну так в чем проблемы
Var
 S:String;
begin
 ....
 S:=OpenDialog1.FileName;
 ActiveDesktop.SetWallpaper(PWideChar(S), 0);
поидее должно работать


 
Ugrael ©   (2004-11-12 13:51) [5]

мистика, компилятор пропускает, но не работает. а если вывести пенременную S то там такая абракадабра... это же врое как Unicod ?


 
S@lik ©   (2004-11-12 14:01) [6]

procedure ChangeActiveWallpaper(S:string);
const
CLSID_ActiveDesktop: TGUID = "{75048700-EF1F-11D0-9888-006097DEACF9}";
var
ActiveDesktop: IActiveDesktop;
begin
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop)
  as IActiveDesktop;
ActiveDesktop.SetWallpaper(s, 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;

Вызываеш процедуру вот так
if OpenDialog1.Execute then
ChangeActiveWallpaper(OpenDialog1.FileName);


 
Ugrael ©   (2004-11-12 14:44) [7]

всех уже достал наверное 8)
ActiveDesktop.SetWallpaper(s, 0)
в этой строчке пишет что несовместимые типы .
а если сделать pwidechar(s) - проходит, но не кажет.


 
S@lik ©   (2004-11-12 15:16) [8]

попробуй Pchar(s)


 
Ugrael ©   (2004-11-12 15:45) [9]

требует pwidechar. Что это за хрень ?!
и еще - пример из FAQ и пример -=SS=- заработали. в них понимается только формат BMP. а стандартно винда понимает ведь JPG. Да и в твоем (S@lik ©) примере если явно указать jpg все работает. если давать переменные , то см. самую первую строку.


 
Ugrael ©   (2004-11-12 16:02) [10]

млин, все, разобрался. для получения pwidechar из string используем функцию function StringToOleStr(const Source: string): PWideChar;



Страницы: 1 вся ветка

Текущий архив: 2004.12.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
1-1103005195
Ailk
2004-12-14 09:19
2004.12.26
Помогите с PopupMenu!


1-1102945000
ruslanyd
2004-12-13 16:36
2004.12.26
Форма как фрейм


1-1102972333
STK
2004-12-14 00:12
2004.12.26
Загруженность процессора(100%) процессом(как облегчить)


14-1102173465
matt
2004-12-04 18:17
2004.12.26
Котенок


14-1102159316
Труп Васи Доброго
2004-12-04 14:21
2004.12.26
Клиент форума "Magic Forum" 1.2