在Windows95/98中,都是使用注冊表對系統(tǒng)數(shù)據(jù)進行管理,有關(guān)壁紙的設置數(shù)據(jù)保存在Hkey_Current_User\Control Panel\Desktop的Wallpaper和TileWallpaper 等鍵值中,只要成功修改了這兩個鍵值,然后發(fā)消息給Windows即可更換壁紙。在本例的程序中,使用了一個Tform;兩個Tspeedbutton(Speedbutton1用于接受用戶的瀏覽命令,Speedbutton2用于接受用戶的更換壁紙命令);一個Timage(用于顯示圖片)。另外,還用到一組文件控件:Tfilelistbox,Tdrivecombobox,Tdirectorylistbox,用于選擇圖片文件,可以設置FileListBox的mask屬性,篩選顯示在FileListBox 中的文件類型(如只顯示.bmp文件)。下面的兩個程序段是實現(xiàn)瀏覽圖片和更換壁紙的關(guān)鍵代碼。
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;{創(chuàng)建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發(fā)送消息,通知Windows更換壁紙}
Reg.CloseKey;{將更改內(nèi)容寫入注冊表并關(guān)閉}
Reg.Free;{釋放對象}
End;
End;
代碼中用到的一些函數(shù)可以察看Delphi的聯(lián)機幫助。需要注意的是:調(diào)用打開子鍵的函數(shù)OpenKey時,第二個參數(shù)一定要設為False。