在Delphi中设置墙纸及相关属性
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, FileName, SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE);
其中, FileName是墙纸文件名(包含全路径)。
这种方法的缺点在于仅能设置墙纸的内容,而无法将墙纸以“居中”,“平铺”和“拉伸”等不同方式显示出来。下面我将介绍如何通过直接修改Windows系统注册表来实现上述显示效果。
在系统注册表中,主键Desktop(注册表路径为HKEY_CURRENT_USER\Control Panel\Desktop)中包含与墙纸有关的几个项值。
其中,项值TileWallpaper用以控制墙纸是否以“平铺”方式显示。当其值为1时,以“平铺”方式显示。而当其值为0时,则以非“平铺”方式显示。
项值WallPaperStyle用以控制墙纸是否以“拉伸”方式显示。当其值为2时,以“拉伸”方式显示。而当其值为0时,则以非“拉伸”方式显示。
项值WallPaper中存放墙纸文件名(包含全路径)。
因此,只需通过正确设置上述项值,就可设置相应的墙纸的属性,此后再调用SystemParametersInfo(SPI_SETDESKWALLPAPER,0,nil,SPIF_SENDCHANGE)将注册表更新的消息进行广播即可使设置立即生效。
下面代码举例说明如何将“C:\A.BMP”设置为当前墙纸,并以“平铺”的方式显示出来。
procedure SetTitledWallPaper;
var
Registry: TRegistry;
begin
// 设置墙纸的属性
Registry := TRegistry.Create;
try
if Registry.OpenKey(′Control Panel\DeskTop′, False) then
begin
Registry.WriteString(′TileWallPaper′, ′1′); // 平铺方式,TileWallPaper为1
Registry.WriteString(′WallPaperStyle′, ′0′); // 非拉伸方式,WallPaperStyle为0
Registry.WriteString(′WallPaper′, ′C:\A.BMP′); // 墙纸文件的路径″C:\A.BMP″
end;
Registry.CloseKey;
finally
Registry.Free;
end;
//广播注册表改动的消息
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDCHANGE);
end;