在Windows95/98中,都是使用注冊表對系統數據進行管理,有關壁紙的設置數據保存在Hkey_Current_User\Control Panel\Desktop的Wallpaper和TileWallpaper 等鍵值中,只要成功修改了這兩個鍵值,然後發消息給Windows即可更換壁紙。在本例的程序中,使用了一個Tform;兩個Tspeedbutton(Speedbutton1用於接受用戶的浏覽命令,Speedbutton2用於接受用戶的更換壁紙命令);一個Timage(用於顯示圖片)。另外,還用到一組文件控件:Tfilelistbox,Tdrivecombobox,Tdirectorylistbox,用於選擇圖片文件,可以設置FileListBox的mask屬性,篩選顯示在FileListBox 中的文件類型(如只顯示.bmp文件)。下面的兩個程序段是實現浏覽圖片和更換壁紙的關鍵代碼。
Procedure Tform1.SpeedButton1Click(Sender:Tobject);
Begin
If (filelistbox1.FileName=
′′) Then {判斷Filelistbox1中文件有沒有被選中}
Messagedlg(′請先選擇一幅位圖′,mtInformation,[mbOK],0)
Else
Image1.Picture.LoadFormFile(Filelistbox1.FileName);{加載圖片文件並顯示}
End;
ProcedureTform1.SpeedButton2Click(Sender:TObject);
Var
Reg:Tregistry;{Tregistry 對象在Registry 單元中聲明,需用Uses令引用Registry單元}
}
Begin
If (Filelistbox1.FileName=′′) Then
Messagedlg(′請先選擇一幅位圖′,mtinformation,[mbOK],0)
Else
Begin
Reg:=Tregistry.Create;{創建Tregistry對象的實例}
Reg.Rootkey:= Hkey_Current_User;{設置根鍵名稱}
Reg.OpenKey′Control Panel\Desktop′,False); {打開Control Panel\Desktop 路徑對應的主鍵}
Reg.WriteString (′TileWallPaper′,
′0′);
Reg.WriteString
′Wallpaper′,fileli?
stbox1.FileName);{向TileWallpaper 和Wallpaper串覆蓋寫入新值}
Systemparametersinfo(SPI_SETDESKWallpaper,0,Nil,SPIF_SendChange);{向Windows發送消息,通知Windows更換壁紙}
Reg.CloseKey;{將更改內容寫入注冊表並關閉}
Reg.Free;{釋放對象}
End;
End;
代碼中用到的一些函數可以察看Delphi的聯機幫助。需要注意的是:調用打開子鍵的函數OpenKey時,第二個參數一定要設為False。