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

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

Wallpapers [D7, Win2k]


Dot ©   (2004-10-08 22:36:00) 

Весь инет облазил но ничего путного не нашел.
Кто нить мне может подсказать функцию меняющую обои на рабоче столе
чтобы можно было вводить обои из списка
типа
SetWall(ListBox1.Items[ListBox1.ItemIndex]);
ПРИ этом независимо от того Включен Актив Десктоп или нет!!!!


Rifo   (2004-10-10 00:48:00) [1]

Сам не проверял:

program wallpapr;
uses Registry, WinProcs;

procedure SetWallpaper(sWallpaperBMPPath:String;bTile:boolean);
var
 reg : TRegIniFile;
begin
// Изменяем ключи реестра
// HKEY_CURRENT_USER
//   Control Panel\Desktop
//     TileWallpaper (REG_SZ)
//     Wallpaper (REG_SZ)
 reg := TRegIniFile.Create('Control Panel\Desktop' );
 with reg do begin
   WriteString( '', 'Wallpaper',  
     sWallpaperBMPPath );
   if( bTile )then
   begin
     WriteString('', 'TileWallpaper', '1' );
   end else begin
     WriteString('', 'TileWallpaper', '0' );
   end;
 end;
 reg.Free;
// Оповещаем всех о том, что мы
// изменили системные настройки
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Nil,SPIF_SENDWININICHANGE );
end;


Kolan   (2004-10-09 12:00:00) [2]

Если нет active destop то только bmp а, если включен то любое вот
как я делаю:

procedure TForm1.ChangeWallpaper(Path:PwideChar);
const
 CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var
 ActiveDesktop: IActiveDesktop;
begin
 if path <> '' then
   begin
     ActiveDesktop := CreateComObject(CLSID_ActiveDesktop)as IActiveDesktop;
     ActiveDesktop.SetWallpaper(path, 0);
     ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
   end
 else exit;
end;


вот перевод в pwidechar

function TForm1.StringToPWide( sStr: string; var iNewSize: integer ): PWideChar;
var
 pw : PWideChar;
 iSize : integer;
begin
 iSize := Length( sStr ) + 1;
 iNewSize := iSize * 2;

 pw := AllocMem( iNewSize );

 MultiByteToWideChar( CP_ACP, 0, PChar(sStr), iSize, pw, iNewSize );

 Result := pw;
end;


Вот пример вызова:
ChangeWallpaper(StringToPWide(current_dir+only_file_name,iSize));


Okcid   (2004-10-08 23:10:00) [3]

Сорри, http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988622498&n=15


Sulimxar   (2004-10-08 23:09:00) [4]

Изменить обои можно функцией SystemParametersInfo() Переслав ей в качестве параметров константу SPI_SETDESKWALLPAPER и имя нового файла обоев (тока bmp).
Пример:
              SystemParametersInfo(SPI_SETDESKWALLPAPER,
                                   0,
                                   PChar('C:\SOMEPATH\SOME.BMP'),
                                   SPIF_SENDWININICHANGE);
- может поможет?
Насчет "Актив десктоп" не знаю :/


Okcid   (2004-10-08 23:07:00) [5]

Заглянул тут в FAQ этова сайта и нашёл ответ на твой вопрос)))
http://www.delphimaster.ru/cgi-bin/faq.pllook=1&id=988622498&n=15


Наверх

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